aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/CMakeLists.txt19
-rw-r--r--tests/auto/bic/data/QtQml.6.2.0.linux-gcc-amd64.txt6952
-rw-r--r--tests/auto/bic/data/QtQuick.6.2.0.linux-gcc-amd64.txt12616
-rw-r--r--tests/auto/bic/data/QtQuickTest.6.2.0.linux-gcc-amd64.txt5486
-rw-r--r--tests/auto/bic/data/QtQuickWidgets.6.2.0.linux-gcc-amd64.txt23057
-rw-r--r--tests/auto/cmake/CMakeLists.txt34
-rw-r--r--tests/auto/cmake/empty_qmldir/CMakeLists.txt35
-rw-r--r--tests/auto/cmake/empty_qmldir/enemy.cpp33
-rw-r--r--tests/auto/cmake/empty_qmldir/enemy.h (renamed from tests/auto/quick/shared/geometrytestutil.h)29
-rw-r--r--tests/auto/cmake/empty_qmldir/flee.qml7
-rw-r--r--tests/auto/cmake/empty_qmldir/main.cpp56
-rw-r--r--tests/auto/cmake/qmlimportscanner/CMakeLists.txt28
-rw-r--r--tests/auto/cmake/qtquickcompiler/CMakeLists.txt32
-rw-r--r--tests/auto/cmake/qtquickcompiler/main.cpp38
-rw-r--r--tests/auto/cmake/qtquickcompiler/resources with space/qqc_test.qrc6
-rw-r--r--tests/auto/cmake/test_import_static_shapes_plugin_resources/CMakeLists.txt45
-rw-r--r--tests/auto/cmake/test_import_static_shapes_plugin_resources/app.qml76
-rw-r--r--tests/auto/cmake/test_import_static_shapes_plugin_resources/tst_main.cpp104
-rw-r--r--tests/auto/cmake/test_plugins/CMakeLists.txt2
-rw-r--r--tests/auto/cmake/tooling_imports/CMakeLists.txt32
-rw-r--r--tests/auto/cmake/tooling_imports/First/CMakeLists.txt9
-rw-r--r--tests/auto/cmake/tooling_imports/First/DoSomething.qml7
-rw-r--r--tests/auto/cmake/tooling_imports/First/Neighbor.cpp33
-rw-r--r--tests/auto/cmake/tooling_imports/First/Neighbor.h (renamed from tests/auto/quick/shared/geometrytestutil.cpp)24
-rw-r--r--tests/auto/cmake/tooling_imports/Second/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/tooling_imports/Second/CheckIt.qml7
-rw-r--r--tests/auto/cmake/tooling_imports/Ttt.qml3
-rw-r--r--tests/auto/cmake/tooling_imports/main.cpp51
-rw-r--r--tests/auto/cmake/tooling_imports/main.qml11
-rw-r--r--tests/auto/core/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickage/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickage/tst_qquickage.cpp5
-rw-r--r--tests/auto/particles/qquickangleddirection/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickangleddirection/tst_qquickangleddirection.cpp5
-rw-r--r--tests/auto/particles/qquickcumulativedirection/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickcumulativedirection/tst_qquickcumulativedirection.cpp5
-rw-r--r--tests/auto/particles/qquickcustomaffector/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickcustomaffector/tst_qquickcustomaffector.cpp5
-rw-r--r--tests/auto/particles/qquickellipseextruder/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickellipseextruder/tst_qquickellipseextruder.cpp5
-rw-r--r--tests/auto/particles/qquickfriction/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickfriction/tst_qquickfriction.cpp5
-rw-r--r--tests/auto/particles/qquickgravity/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickgravity/tst_qquickgravity.cpp5
-rw-r--r--tests/auto/particles/qquickgroupgoal/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickgroupgoal/tst_qquickgroupgoal.cpp5
-rw-r--r--tests/auto/particles/qquickimageparticle/BLACKLIST4
-rw-r--r--tests/auto/particles/qquickimageparticle/CMakeLists.txt6
-rw-r--r--tests/auto/particles/qquickimageparticle/tst_qquickimageparticle.cpp89
-rw-r--r--tests/auto/particles/qquickitemparticle/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickitemparticle/tst_qquickitemparticle.cpp5
-rw-r--r--tests/auto/particles/qquicklineextruder/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquicklineextruder/tst_qquicklineextruder.cpp5
-rw-r--r--tests/auto/particles/qquickmaskextruder/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickmaskextruder/tst_qquickmaskextruder.cpp5
-rw-r--r--tests/auto/particles/qquickparticlegroup/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickparticlegroup/tst_qquickparticlegroup.cpp5
-rw-r--r--tests/auto/particles/qquickparticlesystem/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickparticlesystem/tst_qquickparticlesystem.cpp5
-rw-r--r--tests/auto/particles/qquickpointattractor/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickpointattractor/tst_qquickpointattractor.cpp5
-rw-r--r--tests/auto/particles/qquickpointdirection/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickpointdirection/tst_qquickpointdirection.cpp5
-rw-r--r--tests/auto/particles/qquickrectangleextruder/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickrectangleextruder/tst_qquickrectangleextruder.cpp5
-rw-r--r--tests/auto/particles/qquickspritegoal/BLACKLIST1
-rw-r--r--tests/auto/particles/qquickspritegoal/CMakeLists.txt6
-rw-r--r--tests/auto/particles/qquickspritegoal/tst_qquickspritegoal.cpp5
-rw-r--r--tests/auto/particles/qquicktargetdirection/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquicktargetdirection/tst_qquicktargetdirection.cpp5
-rw-r--r--tests/auto/particles/qquicktrailemitter/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquicktrailemitter/tst_qquicktrailemitter.cpp5
-rw-r--r--tests/auto/particles/qquickturbulence/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickturbulence/tst_qquickturbulence.cpp5
-rw-r--r--tests/auto/particles/qquickwander/CMakeLists.txt4
-rw-r--r--tests/auto/particles/qquickwander/tst_qquickwander.cpp5
-rw-r--r--tests/auto/qml/CMakeLists.txt38
-rw-r--r--tests/auto/qml/bindingdependencyapi/CMakeLists.txt4
-rw-r--r--tests/auto/qml/bindingdependencyapi/dummy_imports.qml7
-rw-r--r--tests/auto/qml/bindingdependencyapi/tst_bindingdependencyapi.cpp32
-rw-r--r--tests/auto/qml/debugger/CMakeLists.txt32
-rw-r--r--tests/auto/qml/debugger/qdebugmessageservice/CMakeLists.txt5
-rw-r--r--tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp10
-rw-r--r--tests/auto/qml/debugger/qpacketprotocol/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmldebugclient/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp10
-rw-r--r--tests/auto/qml/debugger/qqmldebugjs/CMakeLists.txt5
-rw-r--r--tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp10
-rw-r--r--tests/auto/qml/debugger/qqmldebuglocal/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmldebugservice/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp10
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationclient/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationclient/tst_qqmldebugtranslationclient.cpp6
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationservice/BLACKLIST7
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationservice/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.qmbin89 -> 302 bytes
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.ts26
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.qmbin95 -> 245 bytes
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.ts24
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationservice/data/test.qml55
-rw-r--r--tests/auto/qml/debugger/qqmldebugtranslationservice/tst_qqmldebugtranslationservice.cpp344
-rw-r--r--tests/auto/qml/debugger/qqmlenginecontrol/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmlenginecontrol/tst_qqmlenginecontrol.cpp13
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp10
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/CMakeLists.txt10
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/data/complexItem.qml54
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/data/customTypes.qml31
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/data/emptyItem.qml31
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/data/itemWithFunctions.qml34
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/data/jsonTest.qml31
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/data/rectangleWithTransitions.qml53
-rw-r--r--tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp118
-rw-r--r--tests/auto/qml/debugger/qqmlinspector/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp10
-rw-r--r--tests/auto/qml/debugger/qqmlpreview/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp8
-rw-r--r--tests/auto/qml/debugger/qqmlprofilerservice/CMakeLists.txt3
-rw-r--r--tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp14
-rw-r--r--tests/auto/qml/debugger/qv4debugger/CMakeLists.txt31
-rw-r--r--tests/auto/qml/debugger/qv4debugger/commontypes.h20
-rw-r--r--tests/auto/qml/debugger/qv4debugger/data/conditionalBreakPointInQml.qml9
-rw-r--r--tests/auto/qml/debugger/qv4debugger/data/qtbug_107607.qml10
-rw-r--r--tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp92
-rw-r--r--tests/auto/qml/debugger/shared/debugutil.cpp5
-rw-r--r--tests/auto/qml/debugger/shared/debugutil_p.h5
-rw-r--r--tests/auto/qml/ecmascripttests/CMakeLists.txt4
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations1
-rw-r--r--tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp4
-rw-r--r--tests/auto/qml/parserstress/CMakeLists.txt6
-rw-r--r--tests/auto/qml/parserstress/dummy_imports.qml7
-rw-r--r--tests/auto/qml/qjsengine/CMakeLists.txt6
-rw-r--r--tests/auto/qml/qjsengine/dummy_imports.qml7
-rw-r--r--tests/auto/qml/qjsengine/tst_qjsengine.cpp175
-rw-r--r--tests/auto/qml/qjsmanagedvalue/CMakeLists.txt5
-rw-r--r--tests/auto/qml/qjsmanagedvalue/dummy_imports.qml7
-rw-r--r--tests/auto/qml/qjsonbinding/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qjsonbinding/tst_qjsonbinding.cpp44
-rw-r--r--tests/auto/qml/qjsvalue/CMakeLists.txt5
-rw-r--r--tests/auto/qml/qjsvalue/dummy_imports.qml7
-rw-r--r--tests/auto/qml/qmlbasicapp/BasicExtension/CMakeLists.txt7
-rw-r--r--tests/auto/qml/qmlbasicapp/BasicExtension/ESModule.mjs1
-rw-r--r--tests/auto/qml/qmlbasicapp/BasicExtension/Less.js1
-rw-r--r--tests/auto/qml/qmlbasicapp/BasicExtension/More.ui.qml3
-rw-r--r--tests/auto/qml/qmlbasicapp/BasicExtension/lowerCase.js1
-rw-r--r--tests/auto/qml/qmlbasicapp/BasicExtension/lowerCaseModule.mjs1
-rw-r--r--tests/auto/qml/qmlbasicapp/CMakeLists.txt17
-rw-r--r--tests/auto/qml/qmlbasicapp/TimeExample/CMakeLists.txt2
-rw-r--r--tests/auto/qml/qmlbasicapp/TimeExample/timemodel.h1
-rw-r--r--tests/auto/qml/qmlbasicapp/main.qml3
-rw-r--r--tests/auto/qml/qmlbasicapp/manual_imports.cpp32
-rw-r--r--tests/auto/qml/qmlbasicapp/tst_qmlbasicapp.cpp42
-rw-r--r--tests/auto/qml/qmlcachegen/CMakeLists.txt13
-rw-r--r--tests/auto/qml/qmlcachegen/data/scriptstring.qml9
-rw-r--r--tests/auto/qml/qmlcachegen/scriptstringprops.h80
-rw-r--r--tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp203
-rw-r--r--tests/auto/qml/qmlcompiler_manual/CMakeLists.txt6
-rw-r--r--tests/auto/qml/qmlcompiler_manual/tst_qmlcompiler_manual.cpp10
-rw-r--r--tests/auto/qml/qmldiskcache/dummy_imports.qml7
-rw-r--r--tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp114
-rw-r--r--tests/auto/qml/qmlformat/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qmlformat/data/Annotations.formatted.qml5
-rw-r--r--tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml4
-rw-r--r--tests/auto/qml/qmlformat/data/Example1.formatted.qml4
-rw-r--r--tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml4
-rw-r--r--tests/auto/qml/qmlformat/data/ecmaScriptClassInQml.formatted.qml37
-rw-r--r--tests/auto/qml/qmlformat/data/ecmaScriptClassInQml.qml45
-rw-r--r--tests/auto/qml/qmlformat/data/largeBindings.formatted.qml1
-rw-r--r--tests/auto/qml/qmlformat/data/nestedFunctions.formatted.qml1
-rw-r--r--tests/auto/qml/qmlformat/data/readOnlyProps.formatted.qml1
-rw-r--r--tests/auto/qml/qmlformat/data/statesAndTransitions.formatted.qml1
-rw-r--r--tests/auto/qml/qmlformat/data/verbatimString.formatted.qml2
-rw-r--r--tests/auto/qml/qmlformat/tst_qmlformat.cpp14
-rw-r--r--tests/auto/qml/qmlimportscanner/CMakeLists.txt7
-rw-r--r--tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json3
-rw-r--r--tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/Drawer.qml.json3
-rw-r--r--tests/auto/qml/qmlimportscanner/data/Imports.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/Simple.qml.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/Singleton.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/Things.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/With/Module/A.qml3
-rw-r--r--tests/auto/qml/qmlimportscanner/data/With/Module/qmldir3
-rw-r--r--tests/auto/qml/qmlimportscanner/data/WithOut/Module/A.qml3
-rw-r--r--tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json3
-rw-r--r--tests/auto/qml/qmlimportscanner/data/localImport.qml.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json4
-rw-r--r--tests/auto/qml/qmlimportscanner/data/qmldirpref.qml3
-rw-r--r--tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json3
-rw-r--r--tests/auto/qml/qmlimportscanner/data/rootPath.json8
-rw-r--r--tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp41
-rw-r--r--tests/auto/qml/qmllint/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qmllint/data/Cycle/MenuItem.qml3
-rw-r--r--tests/auto/qml/qmllint/data/Cycle/qmldir3
-rw-r--r--tests/auto/qml/qmllint/data/LazyAndDirect/Direct.qml5
-rw-r--r--tests/auto/qml/qmllint/data/LazyAndDirect/Lazy.qml8
-rw-r--r--tests/auto/qml/qmllint/data/LazyAndDirect/qmldir4
-rw-r--r--tests/auto/qml/qmllint/data/Qt5Compat/GraphicalEffects/private/qmldir2
-rw-r--r--tests/auto/qml/qmllint/data/Things/LintDirectly.qml4
-rw-r--r--tests/auto/qml/qmllint/data/Things/NotPartOfThings.qml3
-rw-r--r--tests/auto/qml/qmllint/data/accessibleId.qml14
-rw-r--r--tests/auto/qml/qmllint/data/animationEasing.qml5
-rw-r--r--tests/auto/qml/qmllint/data/badScript.attached.qml4
-rw-r--r--tests/auto/qml/qmllint/data/badScriptBinding.attached.qml6
-rw-r--r--tests/auto/qml/qmllint/data/badScriptBinding.attachedSignalHandler.qml7
-rw-r--r--tests/auto/qml/qmllint/data/badScriptBinding.group.qml4
-rw-r--r--tests/auto/qml/qmllint/data/cachedDependency.qml23
-rw-r--r--tests/auto/qml/qmllint/data/connectionNoParent.qml5
-rw-r--r--tests/auto/qml/qmllint/data/cycleHead.qml7
-rw-r--r--tests/auto/qml/qmllint/data/goodAttachedPropertyAccess.qml3
-rw-r--r--tests/auto/qml/qmllint/data/goodBindingsOnGroupAndAttached.qml11
-rw-r--r--tests/auto/qml/qmllint/data/inaccessibleId.qml12
-rw-r--r--tests/auto/qml/qmllint/data/inaccessibleId2.qml10
-rw-r--r--tests/auto/qml/qmllint/data/invalidId1.qml5
-rw-r--r--tests/auto/qml/qmllint/data/missingBuiltinsNoCrash.qml3
-rw-r--r--tests/auto/qml/qmllint/data/missingQmltypes.qml4
-rw-r--r--tests/auto/qml/qmllint/data/multiGrouped.qml6
-rw-r--r--tests/auto/qml/qmllint/data/onBindingInGroupedProperty.qml10
-rw-r--r--tests/auto/qml/qmllint/data/prefixedAttachedProperty.qml5
-rw-r--r--tests/auto/qml/qmllint/data/qmodelIndex.qml6
-rw-r--r--tests/auto/qml/qmllint/data/requiredProperty.qml12
-rw-r--r--tests/auto/qml/qmllint/data/requiredPropertyInComponent.qml25
-rw-r--r--tests/auto/qml/qmllint/data/settings/bare/.qmllint.ini2
-rw-r--r--tests/auto/qml/qmllint/data/settings/bare/bare.qml3
-rw-r--r--tests/auto/qml/qmllint/data/settings/qmltypes/.qmllint.ini2
-rw-r--r--tests/auto/qml/qmllint/data/settings/qmltypes/custom.qmltypes11
-rw-r--r--tests/auto/qml/qmllint/data/settings/qmltypes/qmltypes.qml3
-rw-r--r--tests/auto/qml/qmllint/data/stringAsId.qml5
-rw-r--r--tests/auto/qml/qmllint/data/stringIdUsedInWarning.qml9
-rw-r--r--tests/auto/qml/qmllint/tst_qmllint.cpp124
-rw-r--r--tests/auto/qml/qmlplugindump/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp4
-rw-r--r--tests/auto/qml/qmltyperegistrar/CMakeLists.txt30
-rw-r--r--tests/auto/qml/qmltyperegistrar/dummy.cpp2
-rw-r--r--tests/auto/qml/qmltyperegistrar/dummy_p.h2
-rw-r--r--tests/auto/qml/qmltyperegistrar/foreign/CMakeLists.txt2
-rw-r--r--tests/auto/qml/qmltyperegistrar/foreign/foreign_p.h44
-rw-r--r--tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp19
-rw-r--r--tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h30
-rw-r--r--tests/auto/qml/qqmlanybinding/CMakeLists.txt6
-rw-r--r--tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp10
-rw-r--r--tests/auto/qml/qqmlanybinding/withbindable.h1
-rw-r--r--tests/auto/qml/qqmlapplicationengine/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qqmlapplicationengine/androidassets/CMakeLists.txt18
-rw-r--r--tests/auto/qml/qqmlapplicationengine/androidassets/qml/main.qml13
-rw-r--r--tests/auto/qml/qqmlapplicationengine/androidassets/qml/pages/MainPage.qml11
-rw-r--r--tests/auto/qml/qqmlapplicationengine/androidassets/tst_androidassets.cpp82
-rw-r--r--tests/auto/qml/qqmlapplicationengine/tst_qqmlapplicationengine.cpp13
-rw-r--r--tests/auto/qml/qqmlbinding/CMakeLists.txt6
-rw-r--r--tests/auto/qml/qqmlbinding/WithBindableProperties.h1
-rw-r--r--tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp7
-rw-r--r--tests/auto/qml/qqmlchangeset/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlcomponent/CMakeLists.txt5
-rw-r--r--tests/auto/qml/qqmlcomponent/data/RequiredPropertiesInAttached.qml6
-rw-r--r--tests/auto/qml/qqmlcomponent/data/RequiredPropertiesInGroup.qml5
-rw-r--r--tests/auto/qml/qqmlcomponent/data/RequiredSetInSameFile.qml (renamed from tests/auto/qml/qqmlcomponent/data/requiredSetInSameFile.qml)0
-rw-r--r--tests/auto/qml/qqmlcomponent/data/RequiredTwoPropertiesSet.qml6
-rw-r--r--tests/auto/qml/qqmlcomponent/data/RerequiredNotSet.qml3
-rw-r--r--tests/auto/qml/qqmlcomponent/data/jsmodule/module.mjs3
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredChildOfBadBase.qml1
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredChildOfGoodBase.qml1
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredGroup.bad.qml3
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredGroup.good.qml4
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttached.bad.qml7
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttached.bad2.qml5
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttachedIndirect.qml4
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroup.bad.qml2
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroup.bad2.qml5
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroupIndirect.qml5
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponent.bad.qml8
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponent.good.qml9
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithCppBase.bad.qml9
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithCppBase.good.qml9
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithIndirectCppBase.qml6
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredSetLater.rerequired.qml3
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredTwoProperties.qml5
-rw-r--r--tests/auto/qml/qqmlcomponent/data/requiredTwoPropertiesDummy.qml1
-rw-r--r--tests/auto/qml/qqmlcomponent/data/rerequiredSet.qml4
-rw-r--r--tests/auto/qml/qqmlcomponent/data/rerequiredSetLater.qml4
-rw-r--r--tests/auto/qml/qqmlcomponent/data/shadowingFromCpp.qml5
-rw-r--r--tests/auto/qml/qqmlcomponent/data/shadowingFromQmlChild.qml6
-rw-r--r--tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp164
-rw-r--r--tests/auto/qml/qqmlconnections/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlconnections/data/invalidTarget.qml31
-rw-r--r--tests/auto/qml/qqmlconnections/tst_qqmlconnections.cpp23
-rw-r--r--tests/auto/qml/qqmlconsole/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qqmlconsole/data/assert.qml13
-rw-r--r--tests/auto/qml/qqmlconsole/data/categorized_logging.qml9
-rw-r--r--tests/auto/qml/qqmlconsole/data/exception.qml4
-rw-r--r--tests/auto/qml/qqmlconsole/data/logging.qml21
-rw-r--r--tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp31
-rw-r--r--tests/auto/qml/qqmlcontext/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp4
-rw-r--r--tests/auto/qml/qqmldelegatemodel/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml11
-rw-r--r--tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp32
-rw-r--r--tests/auto/qml/qqmldirparser/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp4
-rw-r--r--tests/auto/qml/qqmlecmascript/BLACKLIST2
-rw-r--r--tests/auto/qml/qqmlecmascript/CMakeLists.txt5
-rw-r--r--tests/auto/qml/qqmlecmascript/data/Lib.js3
-rw-r--r--tests/auto/qml/qqmlecmascript/data/PreNamed.qml11
-rw-r--r--tests/auto/qml/qqmlecmascript/data/aliasPropertyToIC.qml11
-rw-r--r--tests/auto/qml/qqmlecmascript/data/checkDateTime-nonstandardFormat2.qml10
-rw-r--r--tests/auto/qml/qqmlecmascript/data/enums.1.qml3
-rw-r--r--tests/auto/qml/qqmlecmascript/data/functionAsDefaultArgument.qml8
-rw-r--r--tests/auto/qml/qqmlecmascript/data/generatorCallsGC.qml13
-rw-r--r--tests/auto/qml/qqmlecmascript/data/icUsingJSLib.qml12
-rw-r--r--tests/auto/qml/qqmlecmascript/data/internalClassParentGc.js29
-rw-r--r--tests/auto/qml/qqmlecmascript/data/internalClassParentGc.qml13
-rw-r--r--tests/auto/qml/qqmlecmascript/data/methodTypeMismatch.qml25
-rw-r--r--tests/auto/qml/qqmlecmascript/data/qpropertyBindingReplacement.qml6
-rw-r--r--tests/auto/qml/qqmlecmascript/data/readOnlyBindable.qml7
-rw-r--r--tests/auto/qml/qqmlecmascript/testtypes.cpp1
-rw-r--r--tests/auto/qml/qqmlecmascript/testtypes.h45
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp273
-rw-r--r--tests/auto/qml/qqmlengine/CMakeLists.txt7
-rw-r--r--tests/auto/qml/qqmlengine/tst_qqmlengine.cpp30
-rw-r--r--tests/auto/qml/qqmlenginecleanup/BLACKLIST3
-rw-r--r--tests/auto/qml/qqmlenginecleanup/CMakeLists.txt11
-rw-r--r--tests/auto/qml/qqmlenginecleanup/tst_qqmlenginecleanup.cpp4
-rw-r--r--tests/auto/qml/qqmlerror/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlerror/tst_qqmlerror.cpp11
-rw-r--r--tests/auto/qml/qqmlexpression/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlexpression/tst_qqmlexpression.cpp4
-rw-r--r--tests/auto/qml/qqmlfile/tst_qqmlfile.cpp132
-rw-r--r--tests/auto/qml/qqmlfileselector/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qqmlfileselector/data/qmldirtest/main.qml13
-rw-r--r--tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/+linux/MyButton.qml7
-rw-r--r--tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/+macos/MyButton.qml7
-rw-r--r--tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/MyButton.qml7
-rw-r--r--tests/auto/qml/qqmlfileselector/data/qmldirtest/qmldir5
-rw-r--r--tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp35
-rw-r--r--tests/auto/qml/qqmlimport/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlimport/data/absoluteImport.qml4
-rw-r--r--tests/auto/qml/qqmlimport/data/absoluteResourceImport.qml4
-rw-r--r--tests/auto/qml/qqmlimport/data/importQtQuickTooling.qml4
-rw-r--r--tests/auto/qml/qqmlimport/data/relativeResourceImport.qml4
-rw-r--r--tests/auto/qml/qqmlimport/tst_qqmlimport.cpp63
-rw-r--r--tests/auto/qml/qqmlincubator/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qqmlincubator/tst_qqmlincubator.cpp4
-rw-r--r--tests/auto/qml/qqmlinfo/CMakeLists.txt10
-rw-r--r--tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp4
-rw-r--r--tests/auto/qml/qqmlinstantiator/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlinstantiator/data/activeModelChangeInteraction.qml39
-rw-r--r--tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp51
-rw-r--r--tests/auto/qml/qqmlitemmodels/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlitemmodels/data/modelindex.qml1
-rw-r--r--tests/auto/qml/qqmlitemmodels/data/persistentmodelindex.qml1
-rw-r--r--tests/auto/qml/qqmlitemmodels/tst_qqmlitemmodels.cpp4
-rw-r--r--tests/auto/qml/qqmljsscope/BLACKLIST3
-rw-r--r--tests/auto/qml/qqmllanguage/CMakeLists.txt7
-rw-r--r--tests/auto/qml/qqmllanguage/data/Broken.qml5
-rw-r--r--tests/auto/qml/qqmllanguage/data/ComponentType.qml8
-rw-r--r--tests/auto/qml/qqmllanguage/data/GroupFailureInner.qml2
-rw-r--r--tests/auto/qml/qqmllanguage/data/GroupFailureOuter.qml5
-rw-r--r--tests/auto/qml/qqmllanguage/data/MyRectangle.qml10
-rw-r--r--tests/auto/qml/qqmllanguage/data/SignalInlineComponentArg.qml21
-rw-r--r--tests/auto/qml/qqmllanguage/data/alias.15.qml21
-rw-r--r--tests/auto/qml/qqmllanguage/data/alias.15a.qml12
-rw-r--r--tests/auto/qml/qqmllanguage/data/alias.19.qml11
-rw-r--r--tests/auto/qml/qqmllanguage/data/ambiguousBinding/TestCase.qml6
-rw-r--r--tests/auto/qml/qqmllanguage/data/ambiguousBinding/ambiguousContainingType.qml3
-rw-r--r--tests/auto/qml/qqmllanguage/data/asBroken.qml6
-rw-r--r--tests/auto/qml/qqmllanguage/data/badGroupedProperty.qml10
-rw-r--r--tests/auto/qml/qqmllanguage/data/bindingAliasToComponentUrl.qml10
-rw-r--r--tests/auto/qml/qqmllanguage/data/bindingAliasToComponentUrl2.qml11
-rw-r--r--tests/auto/qml/qqmllanguage/data/componentMix.qml18
-rw-r--r--tests/auto/qml/qqmllanguage/data/foreignExtended.qml7
-rw-r--r--tests/auto/qml/qqmllanguage/data/fuzzed.1.errors.txt3
-rw-r--r--tests/auto/qml/qqmllanguage/data/groupFailure.qml5
-rw-r--r--tests/auto/qml/qqmllanguage/data/jittedAsCast.qml15
-rw-r--r--tests/auto/qml/qqmllanguage/data/sameNameAliasProperty.qml7
-rw-r--r--tests/auto/qml/qqmllanguage/data/sameNamePropertyAlias.qml7
-rw-r--r--tests/auto/qml/qqmllanguage/data/signalInlineComponentArg1.qml30
-rw-r--r--tests/auto/qml/qqmllanguage/data/thisInArrow.qml39
-rw-r--r--tests/auto/qml/qqmllanguage/data/uncreatableAttached.qml8
-rw-r--r--tests/auto/qml/qqmllanguage/data/variantListConversion.qml3
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.cpp2
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.h95
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp305
-rw-r--r--tests/auto/qml/qqmllistcompositor/tst_qqmllistcompositor.cpp8
-rw-r--r--tests/auto/qml/qqmllistmodel/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmllistmodel/data/destroyObject.qml23
-rw-r--r--tests/auto/qml/qqmllistmodel/data/dummyItem.qml5
-rw-r--r--tests/auto/qml/qqmllistmodel/data/objectOwnership.qml27
-rw-r--r--tests/auto/qml/qqmllistmodel/data/protectQObjectFromGC.qml21
-rw-r--r--tests/auto/qml/qqmllistmodel/data/urls.qml11
-rw-r--r--tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp86
-rw-r--r--tests/auto/qml/qqmllistmodelworkerscript/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmllistmodelworkerscript/tst_qqmllistmodelworkerscript.cpp3
-rw-r--r--tests/auto/qml/qqmllistreference/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp4
-rw-r--r--tests/auto/qml/qqmllocale/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmllocale/data/functions.qml3
-rw-r--r--tests/auto/qml/qqmllocale/tst_qqmllocale.cpp20
-rw-r--r--tests/auto/qml/qqmlmetaobject/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qqmlmetaobject/tst_qqmlmetaobject.cpp11
-rw-r--r--tests/auto/qml/qqmlmetatype/CMakeLists.txt7
-rw-r--r--tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp24
-rw-r--r--tests/auto/qml/qqmlmoduleplugin/CMakeLists.txt5
-rw-r--r--tests/auto/qml/qqmlmoduleplugin/protectedModule/plugin.cpp4
-rw-r--r--tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp10
-rw-r--r--tests/auto/qml/qqmlnotifier/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qqmlnotifier/tst_qqmlnotifier.cpp4
-rw-r--r--tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp4
-rw-r--r--tests/auto/qml/qqmlparser/CMakeLists.txt5
-rw-r--r--tests/auto/qml/qqmlparser/tst_qqmlparser.cpp5
-rw-r--r--tests/auto/qml/qqmlpromise/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qqmlpromise/tst_qqmlpromise.cpp4
-rw-r--r--tests/auto/qml/qqmlproperty/CMakeLists.txt6
-rw-r--r--tests/auto/qml/qqmlproperty/data/bindToNonQObjectTarget.qml20
-rw-r--r--tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp84
-rw-r--r--tests/auto/qml/qqmlpropertycache/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp70
-rw-r--r--tests/auto/qml/qqmlpropertymap/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlpropertymap/data/cached.qml5
-rw-r--r--tests/auto/qml/qqmlpropertymap/dummy_imports.qml7
-rw-r--r--tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp45
-rw-r--r--tests/auto/qml/qqmlqt/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlqt/data/Other/A.qml8
-rw-r--r--tests/auto/qml/qqmlqt/data/Other/qmldir2
-rw-r--r--tests/auto/qml/qqmlqt/data/resolvedUrl.qml16
-rw-r--r--tests/auto/qml/qqmlqt/tst_qqmlqt.cpp39
-rw-r--r--tests/auto/qml/qqmlsettings/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlsettings/tst_qqmlsettings.cpp10
-rw-r--r--tests/auto/qml/qqmlsqldatabase/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlsqldatabase/dummy_imports.qml7
-rw-r--r--tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp3
-rw-r--r--tests/auto/qml/qqmltablemodel/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmltablemodel/data/setDataThroughDelegate.qml6
-rw-r--r--tests/auto/qml/qqmltablemodel/tst_qqmltablemodel.cpp4
-rw-r--r--tests/auto/qml/qqmltimer/dummy_imports.qml9
-rw-r--r--tests/auto/qml/qqmltranslation/CMakeLists.txt12
-rw-r--r--tests/auto/qml/qqmltranslation/data/translatedElements.qml15
-rw-r--r--tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp57
-rw-r--r--tests/auto/qml/qqmltypeloader/CMakeLists.txt7
-rw-r--r--tests/auto/qml/qqmltypeloader/dummy_imports.qml9
-rw-r--r--tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp19
-rw-r--r--tests/auto/qml/qqmlvaluetypeproviders/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp4
-rw-r--r--tests/auto/qml/qqmlvaluetypes/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp34
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/CMakeLists.txt9
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.collection.allprop.expect1
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.file.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/abort.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/getResponseHeader.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/open_network.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/receive_binary_data.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/receive_json_data.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_data.1.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_data.10.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_data.11.expectbin286 -> 258 bytes
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_data.4.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_data.6.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_data.8.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_data.9.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_DELETE.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_GET.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_HEAD.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/send_patch.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/setRequestHeader.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/data/status.expect3
-rw-r--r--tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp29
-rw-r--r--tests/auto/qml/qqmlxmllistmodel/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qqmlxmllistmodel/tst_qqmlxmllistmodel.cpp30
-rw-r--r--tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt11
-rw-r--r--tests/auto/qml/qquickfolderlistmodel/tst_qquickfolderlistmodel.cpp35
-rw-r--r--tests/auto/qml/qquickworkerscript/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp4
-rw-r--r--tests/auto/qml/qtqmlmodules/CMakeLists.txt8
-rw-r--r--tests/auto/qml/qtqmlmodules/tst_qtqmlmodules.cpp4
-rw-r--r--tests/auto/qml/qv4assembler/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qv4assembler/tst_qv4assembler.cpp14
-rw-r--r--tests/auto/qml/qv4mm/CMakeLists.txt4
-rw-r--r--tests/auto/qml/qv4mm/tst_qv4mm.cpp105
-rw-r--r--tests/auto/qml/registrationmacros/CMakeLists.txt2
-rw-r--r--tests/auto/qml/v4misc/tst_v4misc.cpp4
-rw-r--r--tests/auto/qmldom/domitem/tst_qmldomitem.h16
-rw-r--r--tests/auto/qmltest/selftests/tst_grabImage.qml5
-rw-r--r--tests/auto/qmltest/shadersource/tst_SourcedFromOtherWindow.qml2
-rw-r--r--tests/auto/quick/CMakeLists.txt11
-rw-r--r--tests/auto/quick/drawingmodes/BLACKLIST11
-rw-r--r--tests/auto/quick/drawingmodes/CMakeLists.txt4
-rw-r--r--tests/auto/quick/drawingmodes/tst_drawingmodes.cpp7
-rw-r--r--tests/auto/quick/examples/tst_examples.cpp8
-rw-r--r--tests/auto/quick/pointerhandlers/flickableinterop/BLACKLIST11
-rw-r--r--tests/auto/quick/pointerhandlers/flickableinterop/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp11
-rw-r--r--tests/auto/quick/pointerhandlers/mousearea_interop/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp18
-rw-r--r--tests/auto/quick/pointerhandlers/multipointtoucharea_interop/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/multipointtoucharea_interop/tst_multipointtoucharea_interop.cpp9
-rw-r--r--tests/auto/quick/pointerhandlers/qquickdraghandler/BLACKLIST9
-rw-r--r--tests/auto/quick/pointerhandlers/qquickdraghandler/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp11
-rw-r--r--tests/auto/quick/pointerhandlers/qquickhoverhandler/BLACKLIST4
-rw-r--r--tests/auto/quick/pointerhandlers/qquickhoverhandler/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/qquickhoverhandler/data/windowCursorShape.qml13
-rw-r--r--tests/auto/quick/pointerhandlers/qquickhoverhandler/tst_qquickhoverhandler.cpp94
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpinchhandler/BLACKLIST3
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpinchhandler/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpinchhandler/data/nullTarget.qml33
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpinchhandler/data/pinchproperties.qml38
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpinchhandler/tst_qquickpinchhandler.cpp266
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpointerhandler/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp50
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpointhandler/BLACKLIST2
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpointhandler/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/qquickpointhandler/tst_qquickpointhandler.cpp12
-rw-r--r--tests/auto/quick/pointerhandlers/qquicktaphandler/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp13
-rw-r--r--tests/auto/quick/pointerhandlers/qquickwheelhandler/CMakeLists.txt9
-rw-r--r--tests/auto/quick/pointerhandlers/qquickwheelhandler/tst_qquickwheelhandler.cpp6
-rw-r--r--tests/auto/quick/propertyrequirements/tst_propertyrequirements.cpp6
-rw-r--r--tests/auto/quick/qquickaccessible/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp66
-rw-r--r--tests/auto/quick/qquickanchors/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickanchors/tst_qquickanchors.cpp8
-rw-r--r--tests/auto/quick/qquickanimatedimage/BLACKLIST5
-rw-r--r--tests/auto/quick/qquickanimatedimage/CMakeLists.txt5
-rw-r--r--tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp6
-rw-r--r--tests/auto/quick/qquickanimatedsprite/BLACKLIST4
-rw-r--r--tests/auto/quick/qquickanimatedsprite/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp27
-rw-r--r--tests/auto/quick/qquickanimations/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickanimations/data/cleanupWhenRenderThreadStops.qml32
-rw-r--r--tests/auto/quick/qquickanimations/data/infiniteAnimationWithoutFrom.qml (renamed from tests/auto/shared/platformquirks.h)48
-rw-r--r--tests/auto/quick/qquickanimations/tst_qquickanimations.cpp70
-rw-r--r--tests/auto/quick/qquickanimators/CMakeLists.txt7
-rw-r--r--tests/auto/quick/qquickanimators/tst_qquickanimators.cpp14
-rw-r--r--tests/auto/quick/qquickapplication/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickapplication/tst_qquickapplication.cpp3
-rw-r--r--tests/auto/quick/qquickbehaviors/BLACKLIST3
-rw-r--r--tests/auto/quick/qquickbehaviors/CMakeLists.txt6
-rw-r--r--tests/auto/quick/qquickbehaviors/data/defaultQProperty.qml14
-rw-r--r--tests/auto/quick/qquickbehaviors/tst_qquickbehaviors.cpp22
-rw-r--r--tests/auto/quick/qquickborderimage/BLACKLIST7
-rw-r--r--tests/auto/quick/qquickborderimage/CMakeLists.txt10
-rw-r--r--tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp16
-rw-r--r--tests/auto/quick/qquickboundaryrule/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickboundaryrule/tst_qquickboundaryrule.cpp6
-rw-r--r--tests/auto/quick/qquickcanvasitem/BLACKLIST5
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_arc.qml22
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_arcto.qml9
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_composite.qml7
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_fillStyle.qml8
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_fillrect.qml1
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_gradient.qml6
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_image.qml25
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_imagedata.qml1
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_line.qml12
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_path.qml16
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_pattern.qml6
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_pixel.qml5
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_shadow.qml11
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_state.qml16
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_strokeStyle.qml5
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_svgpath.qml1
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_text.qml6
-rw-r--r--tests/auto/quick/qquickcanvasitem/data/tst_transform.qml6
-rw-r--r--tests/auto/quick/qquickdeliveryagent/BLACKLIST8
-rw-r--r--tests/auto/quick/qquickdeliveryagent/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickdeliveryagent/data/listViewDelegate.qml21
-rw-r--r--tests/auto/quick/qquickdeliveryagent/data/pointHandler.qml17
-rw-r--r--tests/auto/quick/qquickdeliveryagent/tst_qquickdeliveryagent.cpp183
-rw-r--r--tests/auto/quick/qquickdesignersupport/CMakeLists.txt10
-rw-r--r--tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp38
-rw-r--r--tests/auto/quick/qquickdrag/BLACKLIST25
-rw-r--r--tests/auto/quick/qquickdroparea/BLACKLIST3
-rw-r--r--tests/auto/quick/qquickdroparea/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickdroparea/data/ignoreRetriggerEvent.qml15
-rw-r--r--tests/auto/quick/qquickdroparea/tst_qquickdroparea.cpp101
-rw-r--r--tests/auto/quick/qquickdynamicpropertyanimation/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickdynamicpropertyanimation/tst_qquickdynamicpropertyanimation.cpp4
-rw-r--r--tests/auto/quick/qquickflickable/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickflickable/data/contentPosWhileDragging.qml24
-rw-r--r--tests/auto/quick/qquickflickable/data/dragon.qml15
-rw-r--r--tests/auto/quick/qquickflickable/data/fractionalExtent.qml14
-rw-r--r--tests/auto/quick/qquickflickable/data/nestedmouseareapce.qml26
-rw-r--r--tests/auto/quick/qquickflickable/data/rotatedFlickable.qml32
-rw-r--r--tests/auto/quick/qquickflickable/tst_qquickflickable.cpp607
-rw-r--r--tests/auto/quick/qquickflipable/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickflipable/data/flip-y-axis-flipable.qml32
-rw-r--r--tests/auto/quick/qquickflipable/tst_qquickflipable.cpp36
-rw-r--r--tests/auto/quick/qquickfocusscope/BLACKLIST3
-rw-r--r--tests/auto/quick/qquickfocusscope/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp8
-rw-r--r--tests/auto/quick/qquickfontloader/CMakeLists.txt5
-rw-r--r--tests/auto/quick/qquickfontloader/tst_qquickfontloader.cpp9
-rw-r--r--tests/auto/quick/qquickfontloader_static/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickfontloader_static/tst_qquickfontloader_static.cpp28
-rw-r--r--tests/auto/quick/qquickframebufferobject/BLACKLIST5
-rw-r--r--tests/auto/quick/qquickframebufferobject/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp18
-rw-r--r--tests/auto/quick/qquickgraphicsinfo/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickgraphicsinfo/tst_qquickgraphicsinfo.cpp12
-rw-r--r--tests/auto/quick/qquickgridview/BLACKLIST1
-rw-r--r--tests/auto/quick/qquickgridview/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickgridview/data/qtbug91461.qml81
-rw-r--r--tests/auto/quick/qquickgridview/tst_qquickgridview.cpp49
-rw-r--r--tests/auto/quick/qquickimage/BLACKLIST14
-rw-r--r--tests/auto/quick/qquickimage/CMakeLists.txt10
-rw-r--r--tests/auto/quick/qquickimage/tst_qquickimage.cpp9
-rw-r--r--tests/auto/quick/qquickimageprovider/BLACKLIST21
-rw-r--r--tests/auto/quick/qquickimageprovider/CMakeLists.txt18
-rw-r--r--tests/auto/quick/qquickimageprovider/data/forImports.qml5
-rw-r--r--tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp27
-rw-r--r--tests/auto/quick/qquickitem/BLACKLIST5
-rw-r--r--tests/auto/quick/qquickitem/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickitem/tst_qquickitem.cpp98
-rw-r--r--tests/auto/quick/qquickitem2/CMakeLists.txt5
-rw-r--r--tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml13
-rw-r--r--tests/auto/quick/qquickitem2/tst_qquickitem.cpp25
-rw-r--r--tests/auto/quick/qquickitemlayer/BLACKLIST23
-rw-r--r--tests/auto/quick/qquickitemlayer/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickitemlayer/tst_qquickitemlayer.cpp4
-rw-r--r--tests/auto/quick/qquickitemrhiintegration/BLACKLIST3
-rw-r--r--tests/auto/quick/qquicklayouts/BLACKLIST11
-rw-r--r--tests/auto/quick/qquicklayouts/data/tst_gridlayout.qml50
-rw-r--r--tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml115
-rw-r--r--tests/auto/quick/qquicklayouts/data/tst_stacklayout.qml462
-rw-r--r--tests/auto/quick/qquicklistview/BLACKLIST12
-rw-r--r--tests/auto/quick/qquicklistview/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquicklistview/data/appendDuringScrollDown.qml3
-rw-r--r--tests/auto/quick/qquicklistview/data/displayMargin.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/headerCrash.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/listview-itematindex.qml3
-rw-r--r--tests/auto/quick/qquicklistview/data/outsideViewportChangeNotAffectingView.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/qtbug48044.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/resizeAfterComponentComplete.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/sectionSnapping.qml3
-rw-r--r--tests/auto/quick/qquicklistview/data/snapOneItemWrongDirection.qml3
-rw-r--r--tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml3
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp122
-rw-r--r--tests/auto/quick/qquicklistview2/BLACKLIST9
-rw-r--r--tests/auto/quick/qquicklistview2/CMakeLists.txt15
-rw-r--r--tests/auto/quick/qquicklistview2/data/buttonDelegate.qml27
-rw-r--r--tests/auto/quick/qquicklistview2/data/delegateChooserEnumRole.qml66
-rw-r--r--tests/auto/quick/qquicklistview2/data/delegateModelRefresh.qml78
-rw-r--r--tests/auto/quick/qquicklistview2/data/delegateWithMouseArea.qml120
-rw-r--r--tests/auto/quick/qquicklistview2/data/footerUpdate.qml86
-rw-r--r--tests/auto/quick/qquicklistview2/data/mouseAreaDelegate.qml30
-rw-r--r--tests/auto/quick/qquicklistview2/data/noCrashOnIndexChange.qml48
-rw-r--r--tests/auto/quick/qquicklistview2/data/qtbug86744.qml25
-rw-r--r--tests/auto/quick/qquicklistview2/data/qtbug98315.qml98
-rw-r--r--tests/auto/quick/qquicklistview2/data/qtbug_92809.qml118
-rw-r--r--tests/auto/quick/qquicklistview2/data/singletonModelLifetime.qml32
-rw-r--r--tests/auto/quick/qquicklistview2/tst_qquicklistview2.cpp403
-rw-r--r--tests/auto/quick/qquicklistview2/typerolemodel.cpp66
-rw-r--r--tests/auto/quick/qquicklistview2/typerolemodel.h55
-rw-r--r--tests/auto/quick/qquickloader/BLACKLIST2
-rw-r--r--tests/auto/quick/qquickloader/CMakeLists.txt10
-rw-r--r--tests/auto/quick/qquickloader/data/loader-async-race-rect.qml10
-rw-r--r--tests/auto/quick/qquickloader/data/loader-async-race.qml14
-rw-r--r--tests/auto/quick/qquickloader/data/noEngine.qml32
-rw-r--r--tests/auto/quick/qquickloader/data/overflow.qml5
-rw-r--r--tests/auto/quick/qquickloader/tst_qquickloader.cpp77
-rw-r--r--tests/auto/quick/qquickmousearea/BLACKLIST8
-rw-r--r--tests/auto/quick/qquickmousearea/CMakeLists.txt10
-rw-r--r--tests/auto/quick/qquickmousearea/data/doubleClickToHide.qml19
-rw-r--r--tests/auto/quick/qquickmousearea/data/preventStealingListViewChild.qml31
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp60
-rw-r--r--tests/auto/quick/qquickmultipointtoucharea/BLACKLIST2
-rw-r--r--tests/auto/quick/qquickmultipointtoucharea/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickmultipointtoucharea/data/nestedMouseArea.qml26
-rw-r--r--tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp25
-rw-r--r--tests/auto/quick/qquickpainteditem/BLACKLIST7
-rw-r--r--tests/auto/quick/qquickpalette/CMakeLists.txt3
-rw-r--r--tests/auto/quick/qquickpalette/tst_qquickpalette.cpp10
-rw-r--r--tests/auto/quick/qquickpath/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickpath/tst_qquickpath.cpp4
-rw-r--r--tests/auto/quick/qquickpathview/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickpathview/tst_qquickpathview.cpp215
-rw-r--r--tests/auto/quick/qquickpincharea/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickpincharea/data/pinchAreaInPathView.qml48
-rw-r--r--tests/auto/quick/qquickpincharea/data/pinchproperties.qml6
-rw-r--r--tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp152
-rw-r--r--tests/auto/quick/qquickpixmapcache/CMakeLists.txt5
-rw-r--r--tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp6
-rw-r--r--tests/auto/quick/qquickpositioners/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp19
-rw-r--r--tests/auto/quick/qquickrectangle/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickrectangle/tst_qquickrectangle.cpp7
-rw-r--r--tests/auto/quick/qquickrendercontrol/BLACKLIST3
-rw-r--r--tests/auto/quick/qquickrendercontrol/CMakeLists.txt11
-rw-r--r--tests/auto/quick/qquickrendercontrol/tst_qquickrendercontrol.cpp19
-rw-r--r--tests/auto/quick/qquickrepeater/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp11
-rw-r--r--tests/auto/quick/qquickscreen/CMakeLists.txt11
-rw-r--r--tests/auto/quick/qquickscreen/tst_qquickscreen.cpp10
-rw-r--r--tests/auto/quick/qquickshadereffect/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp74
-rw-r--r--tests/auto/quick/qquickshape/BLACKLIST19
-rw-r--r--tests/auto/quick/qquickshape/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickshape/tst_qquickshape.cpp47
-rw-r--r--tests/auto/quick/qquickshortcut/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickshortcut/tst_qquickshortcut.cpp10
-rw-r--r--tests/auto/quick/qquicksmoothedanimation/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp3
-rw-r--r--tests/auto/quick/qquickspringanimation/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickspringanimation/tst_qquickspringanimation.cpp3
-rw-r--r--tests/auto/quick/qquickspritesequence/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickspritesequence/tst_qquickspritesequence.cpp4
-rw-r--r--tests/auto/quick/qquickstates/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquickstates/data/anchorRewind.qml31
-rw-r--r--tests/auto/quick/qquickstates/data/noStateOsciallation.qml22
-rw-r--r--tests/auto/quick/qquickstates/data/parentChangeInvolvingBindings.qml43
-rw-r--r--tests/auto/quick/qquickstates/tst_qquickstates.cpp166
-rw-r--r--tests/auto/quick/qquicksystempalette/CMakeLists.txt18
-rw-r--r--tests/auto/quick/qquicksystempalette/data/systemPalette.qml4
-rw-r--r--tests/auto/quick/qquicksystempalette/data/systemPaletteDisabled.qml5
-rw-r--r--tests/auto/quick/qquicksystempalette/data/systemPaletteInactive.qml5
-rw-r--r--tests/auto/quick/qquicksystempalette/tst_qquicksystempalette.cpp23
-rw-r--r--tests/auto/quick/qquicktableview/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquicktableview/data/syncviewsimple.qml26
-rw-r--r--tests/auto/quick/qquicktableview/tst_qquicktableview.cpp333
-rw-r--r--tests/auto/quick/qquicktext/BLACKLIST14
-rw-r--r--tests/auto/quick/qquicktext/CMakeLists.txt5
-rw-r--r--tests/auto/quick/qquicktext/data/padding.qml26
-rw-r--r--tests/auto/quick/qquicktext/data/paddingInLoader.qml14
-rw-r--r--tests/auto/quick/qquicktext/tst_qquicktext.cpp166
-rw-r--r--tests/auto/quick/qquicktextdocument/CMakeLists.txt4
-rw-r--r--tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp10
-rw-r--r--tests/auto/quick/qquicktextedit/BLACKLIST15
-rw-r--r--tests/auto/quick/qquicktextedit/CMakeLists.txt10
-rw-r--r--tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp32
-rw-r--r--tests/auto/quick/qquicktextinput/BLACKLIST20
-rw-r--r--tests/auto/quick/qquicktextinput/CMakeLists.txt5
-rw-r--r--tests/auto/quick/qquicktextinput/data/cursorTest.qml2
-rw-r--r--tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml2
-rw-r--r--tests/auto/quick/qquicktextinput/data/cursorTestInline.qml2
-rw-r--r--tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp21
-rw-r--r--tests/auto/quick/qquickview/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickview/tst_qquickview.cpp5
-rw-r--r--tests/auto/quick/qquickview_extra/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickview_extra/tst_qquickview_extra.cpp4
-rw-r--r--tests/auto/quick/qquickvisualdatamodel/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickvisualdatamodel/data/setDelegateNoDoubleChange.qml43
-rw-r--r--tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp26
-rw-r--r--tests/auto/quick/qquickwindow/BLACKLIST12
-rw-r--r--tests/auto/quick/qquickwindow/CMakeLists.txt9
-rw-r--r--tests/auto/quick/qquickwindow/data/earlyGrab.qml25
-rw-r--r--tests/auto/quick/qquickwindow/tst_qquickwindow.cpp195
-rw-r--r--tests/auto/quick/rendernode/CMakeLists.txt4
-rw-r--r--tests/auto/quick/rendernode/tst_rendernode.cpp3
-rw-r--r--tests/auto/quick/scenegraph/BLACKLIST3
-rw-r--r--tests/auto/quick/scenegraph/CMakeLists.txt16
-rw-r--r--tests/auto/quick/scenegraph/tst_scenegraph.cpp14
-rw-r--r--tests/auto/quick/shared/viewtestutil.cpp531
-rw-r--r--tests/auto/quick/shared/viewtestutil.h203
-rw-r--r--tests/auto/quick/shared/visualtestutil.cpp104
-rw-r--r--tests/auto/quick/shared/visualtestutil.h130
-rw-r--r--tests/auto/quick/sharedimage/tst_sharedimage.cpp8
-rw-r--r--tests/auto/quick/touchmouse/CMakeLists.txt9
-rw-r--r--tests/auto/quick/touchmouse/data/oneMouseArea.qml14
-rw-r--r--tests/auto/quick/touchmouse/tst_touchmouse.cpp139
-rw-r--r--tests/auto/quickcontrols2/CMakeLists.txt42
-rw-r--r--tests/auto/quickcontrols2/accessibility/BLACKLIST2
-rw-r--r--tests/auto/quickcontrols2/accessibility/CMakeLists.txt52
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/abstractbutton.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/busyindicator.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/button.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/checkbox.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/checkdelegate.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/combobox.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/container.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/control.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/dial.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/dialog.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/drawer.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/frame.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/groupbox.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/itemdelegate.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/label.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/menu.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/menuitem.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/page.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/pageindicator.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/pane.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/popup.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/progressbar.qml8
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/radiobutton.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/radiodelegate.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/rangeslider.qml11
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/roundbutton.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/scrollbar.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/scrollindicator.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/slider.qml10
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/spinbox.qml9
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/stackview.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/swipedelegate.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/swipeview.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/switch.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/switchdelegate.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/tabbar.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/tabbutton.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/textarea.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/textfield.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/toolbar.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/toolbutton.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/tooltip.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/defaults/tumbler.qml4
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/ordering/page.qml23
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/abstractbutton.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/busyindicator.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/button.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/checkbox.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/checkdelegate.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/combobox.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/container.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/control.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/dial.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/dialog.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/drawer.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/frame.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/groupbox.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/itemdelegate.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/label.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/menu.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/menuitem.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/page.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/pageindicator.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/pane.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/popup.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/progressbar.qml10
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/radiobutton.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/radiodelegate.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/rangeslider.qml13
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/roundbutton.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/scrollbar.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/scrollindicator.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/slider.qml11
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/spinbox.qml10
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/stackview.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/swipedelegate.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/swipeview.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/switch.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/switchdelegate.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/tabbar.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/tabbutton.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/textarea.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/textfield.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/toolbar.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/toolbutton.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/tooltip.qml7
-rw-r--r--tests/auto/quickcontrols2/accessibility/data/override/tumbler.qml6
-rw-r--r--tests/auto/quickcontrols2/accessibility/tst_accessibility.cpp312
-rw-r--r--tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.10.0.linux-gcc-amd64.txt10983
-rw-r--r--tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.11.0.linux-gcc-amd64.txt10993
-rw-r--r--tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.12.0.linux-gcc-amd64.txt11123
-rw-r--r--tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.13.0.linux-gcc-amd64.txt11498
-rw-r--r--tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.14.0.linux-gcc-amd64.txt11603
-rw-r--r--tests/auto/quickcontrols2/bic/data/QtQuickControls2.6.0.0.linux-gcc-amd64.txt14468
-rw-r--r--tests/auto/quickcontrols2/cmake/CMakeLists.txt13
-rw-r--r--tests/auto/quickcontrols2/controls/CMakeLists.txt10
-rw-r--r--tests/auto/quickcontrols2/controls/basic/BLACKLIST10
-rw-r--r--tests/auto/quickcontrols2/controls/basic/CMakeLists.txt40
-rw-r--r--tests/auto/quickcontrols2/controls/basic/dependencies.qml5
-rw-r--r--tests/auto/quickcontrols2/controls/basic/dummy_imports.qml12
-rw-r--r--tests/auto/quickcontrols2/controls/basic/tst_basic.cpp46
-rw-r--r--tests/auto/quickcontrols2/controls/data/SignalSequenceSpy.qml147
-rw-r--r--tests/auto/quickcontrols2/controls/data/TestItem.qml59
-rw-r--r--tests/auto/quickcontrols2/controls/data/TumblerDatePicker.qml98
-rw-r--r--tests/auto/quickcontrols2/controls/data/TumblerListView.qml70
-rw-r--r--tests/auto/quickcontrols2/controls/data/TumblerPathView.qml82
-rw-r--r--tests/auto/quickcontrols2/controls/data/splitview/fillItemInMiddle.qml77
-rw-r--r--tests/auto/quickcontrols2/controls/data/splitview/fillItemOnLeft.qml77
-rw-r--r--tests/auto/quickcontrols2/controls/data/splitview/fillItemOnTop.qml78
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_abstractbutton.qml976
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_action.qml230
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_actiongroup.qml400
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_busyindicator.qml103
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_button.qml511
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_buttongroup.qml465
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_checkbox.qml544
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_checkdelegate.qml220
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_combobox.qml2324
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_container.qml298
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_control.qml1499
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_delaybutton.qml332
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_dial.qml709
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_dialog.qml494
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_dialogbuttonbox.qml613
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_frame.qml148
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_groupbox.qml148
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_itemdelegate.qml162
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_label.qml294
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_menuitem.qml193
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_page.qml315
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_pageindicator.qml183
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_pane.qml195
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_popup.qml1486
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_progressbar.qml196
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_radiobutton.qml377
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_radiodelegate.qml173
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_rangeslider.qml1129
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_roundbutton.qml166
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_scrollbar.qml993
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_scrollindicator.qml309
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_scrollview.qml668
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_selectionrectangle.qml373
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_slider.qml954
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_spinbox.qml740
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_splitview.qml2600
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_stackview.qml1616
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_swipedelegate.qml1746
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_swipeview.qml719
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_switch.qml636
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_switchdelegate.qml608
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_tabbar.qml775
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_tabbutton.qml178
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_textarea.qml804
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_textfield.qml663
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_toolbar.qml148
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_toolbutton.qml243
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_toolseparator.qml105
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_tooltip.qml509
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_tumbler.qml1281
-rw-r--r--tests/auto/quickcontrols2/controls/fusion/BLACKLIST10
-rw-r--r--tests/auto/quickcontrols2/controls/fusion/CMakeLists.txt40
-rw-r--r--tests/auto/quickcontrols2/controls/fusion/dependencies.qml6
-rw-r--r--tests/auto/quickcontrols2/controls/fusion/dummy_imports.qml12
-rw-r--r--tests/auto/quickcontrols2/controls/fusion/tst_fusion.cpp46
-rw-r--r--tests/auto/quickcontrols2/controls/imagine/BLACKLIST14
-rw-r--r--tests/auto/quickcontrols2/controls/imagine/CMakeLists.txt40
-rw-r--r--tests/auto/quickcontrols2/controls/imagine/dependencies.qml6
-rw-r--r--tests/auto/quickcontrols2/controls/imagine/dummy_imports.qml12
-rw-r--r--tests/auto/quickcontrols2/controls/imagine/tst_imagine.cpp46
-rw-r--r--tests/auto/quickcontrols2/controls/macos/BLACKLIST27
-rw-r--r--tests/auto/quickcontrols2/controls/material/BLACKLIST10
-rw-r--r--tests/auto/quickcontrols2/controls/material/CMakeLists.txt40
-rw-r--r--tests/auto/quickcontrols2/controls/material/dependencies.qml6
-rw-r--r--tests/auto/quickcontrols2/controls/material/dummy_imports.qml12
-rw-r--r--tests/auto/quickcontrols2/controls/material/tst_material.cpp46
-rw-r--r--tests/auto/quickcontrols2/controls/universal/BLACKLIST10
-rw-r--r--tests/auto/quickcontrols2/controls/universal/CMakeLists.txt40
-rw-r--r--tests/auto/quickcontrols2/controls/universal/dependencies.qml6
-rw-r--r--tests/auto/quickcontrols2/controls/universal/dummy_imports.qml12
-rw-r--r--tests/auto/quickcontrols2/controls/universal/tst_universal.cpp46
-rw-r--r--tests/auto/quickcontrols2/controls/windows/BLACKLIST5
-rw-r--r--tests/auto/quickcontrols2/controls/windows/CMakeLists.txt29
-rw-r--r--tests/auto/quickcontrols2/controls/windows/dependencies.qml5
-rw-r--r--tests/auto/quickcontrols2/controls/windows/tst_windows.cpp46
-rw-r--r--tests/auto/quickcontrols2/cursor/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/cursor/data/buttons.qml104
-rw-r--r--tests/auto/quickcontrols2/cursor/data/containers.qml77
-rw-r--r--tests/auto/quickcontrols2/cursor/data/editable.qml72
-rw-r--r--tests/auto/quickcontrols2/cursor/data/pageindicator.qml62
-rw-r--r--tests/auto/quickcontrols2/cursor/data/scrollbar.qml74
-rw-r--r--tests/auto/quickcontrols2/cursor/data/sliders.qml71
-rw-r--r--tests/auto/quickcontrols2/cursor/tst_cursor.cpp226
-rw-r--r--tests/auto/quickcontrols2/customization/CMakeLists.txt45
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/AbstractButton.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ApplicationWindow.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/BusyIndicator.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Button.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/CheckBox.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/CheckDelegate.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ComboBox.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Container.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Control.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/DelayButton.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Dial.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Dialog.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/DialogButtonBox.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Drawer.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Frame.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/GroupBox.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ItemDelegate.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Label.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Menu.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/MenuBar.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/MenuBarItem.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/MenuItem.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/MenuSeparator.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Page.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/PageIndicator.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Pane.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Popup.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ProgressBar.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/RadioButton.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/RadioDelegate.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/RangeSlider.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/RoundButton.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ScrollBar.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ScrollIndicator.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ScrollView.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Slider.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/SpinBox.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/StackView.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/SwipeDelegate.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/SwipeView.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Switch.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/SwitchDelegate.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/TabBar.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/TabButton.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/TextArea.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/TextField.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ToolBar.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ToolButton.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ToolSeparator.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/ToolTip.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/Tumbler.qml57
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/empty/qmldir59
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/AbstractButton.qml75
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ApplicationWindow.qml62
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/BusyIndicator.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Button.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/CheckBox.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/CheckDelegate.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ComboBox.qml78
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Container.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Control.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/DelayButton.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Dial.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Dialog.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/DialogButtonBox.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Drawer.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Frame.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/GroupBox.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ItemDelegate.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Label.qml62
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Menu.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/MenuBar.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/MenuBarItem.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/MenuItem.qml77
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/MenuSeparator.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Page.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/PageIndicator.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Pane.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Popup.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ProgressBar.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/RadioButton.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/RadioDelegate.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/RangeSlider.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/RoundButton.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ScrollBar.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ScrollIndicator.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ScrollView.qml62
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Slider.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/SpinBox.qml77
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/StackView.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/SwipeDelegate.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/SwipeView.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Switch.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/SwitchDelegate.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/TabBar.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/TabButton.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/TextArea.qml62
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/TextField.qml62
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ToolBar.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ToolButton.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ToolSeparator.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/ToolTip.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/Tumbler.qml67
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/identified/qmldir59
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/AbstractButton.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ApplicationWindow.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/BusyIndicator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Button.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/CheckBox.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/CheckDelegate.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ComboBox.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Container.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Control.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/DelayButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Dial.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Dialog.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/DialogButtonBox.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Drawer.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Frame.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/GroupBox.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ItemDelegate.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Label.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Menu.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuBarItem.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuItem.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuSeparator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Page.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/PageIndicator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Pane.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Popup.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ProgressBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/RadioButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/RadioDelegate.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/RangeSlider.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/RoundButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollIndicator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollView.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Slider.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/SpinBox.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/StackView.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/SwipeDelegate.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/SwipeView.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Switch.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/SwitchDelegate.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/TabBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/TabButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/TextArea.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/TextField.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolSeparator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolTip.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/Tumbler.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/incomplete/qmldir59
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/AbstractButton.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ApplicationWindow.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/BusyIndicator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Button.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/CheckBox.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/CheckDelegate.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ComboBox.qml74
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Container.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Control.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/DelayButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Dial.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Dialog.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/DialogButtonBox.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Drawer.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Frame.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/GroupBox.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ItemDelegate.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Label.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Menu.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/MenuBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/MenuBarItem.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/MenuItem.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/MenuSeparator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Page.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/PageIndicator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Pane.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Popup.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ProgressBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/RadioButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/RadioDelegate.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/RangeSlider.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/RoundButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ScrollBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ScrollIndicator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ScrollView.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Slider.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/SpinBox.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/StackView.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/SwipeDelegate.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/SwipeView.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Switch.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/SwitchDelegate.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/TabBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/TabButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/TextArea.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/TextField.qml61
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ToolBar.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ToolButton.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ToolSeparator.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/ToolTip.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/Tumbler.qml65
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/override/qmldir59
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/AbstractButton.qml77
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ApplicationWindow.qml66
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/BusyIndicator.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Button.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/CheckBox.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/CheckDelegate.qml77
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ComboBox.qml81
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Container.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Control.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/DelayButton.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Dial.qml71
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Dialog.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/DialogButtonBox.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Drawer.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Frame.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/GroupBox.qml78
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ItemDelegate.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Label.qml63
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Menu.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/MenuBar.qml71
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/MenuBarItem.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/MenuItem.qml82
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/MenuSeparator.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Page.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/PageIndicator.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Pane.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Popup.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ProgressBar.qml69
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/RadioButton.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/RadioDelegate.qml77
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/RangeSlider.qml76
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/RoundButton.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ScrollBar.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ScrollIndicator.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ScrollView.qml64
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Slider.qml71
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/SpinBox.qml80
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/StackView.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/SwipeDelegate.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/SwipeView.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Switch.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/SwitchDelegate.qml77
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/TabBar.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/TabButton.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/TextArea.qml66
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/TextField.qml66
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ToolBar.qml73
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ToolButton.qml72
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ToolSeparator.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/ToolTip.qml70
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/Tumbler.qml68
-rw-r--r--tests/auto/quickcontrols2/customization/data/styles/simple/qmldir59
-rw-r--r--tests/auto/quickcontrols2/customization/dummy_imports.qml9
-rw-r--r--tests/auto/quickcontrols2/customization/tst_customization.cpp543
-rw-r--r--tests/auto/quickcontrols2/designer/CMakeLists.txt22
-rw-r--r--tests/auto/quickcontrols2/designer/dummy_imports.qml8
-rw-r--r--tests/auto/quickcontrols2/designer/tst_designer.cpp162
-rw-r--r--tests/auto/quickcontrols2/focus/BLACKLIST3
-rw-r--r--tests/auto/quickcontrols2/focus/CMakeLists.txt45
-rw-r--r--tests/auto/quickcontrols2/focus/data/activeFocusOnTab.qml203
-rw-r--r--tests/auto/quickcontrols2/focus/data/focusReason.qml99
-rw-r--r--tests/auto/quickcontrols2/focus/data/keyNavigation.qml260
-rw-r--r--tests/auto/quickcontrols2/focus/data/visualFocus.qml64
-rw-r--r--tests/auto/quickcontrols2/focus/tst_focus.cpp549
-rw-r--r--tests/auto/quickcontrols2/font/CMakeLists.txt47
-rw-r--r--tests/auto/quickcontrols2/font/data/font-appwindow-custom.qml62
-rw-r--r--tests/auto/quickcontrols2/font/data/font-appwindow-default.qml55
-rw-r--r--tests/auto/quickcontrols2/font/data/font-control-custom.qml62
-rw-r--r--tests/auto/quickcontrols2/font/data/font-control-default.qml55
-rw-r--r--tests/auto/quickcontrols2/font/data/font-popup-custom.qml62
-rw-r--r--tests/auto/quickcontrols2/font/data/font-popup-default.qml55
-rw-r--r--tests/auto/quickcontrols2/font/data/inheritance-childcontrol.qml76
-rw-r--r--tests/auto/quickcontrols2/font/data/inheritance-childpopup.qml76
-rw-r--r--tests/auto/quickcontrols2/font/data/inheritance-control.qml74
-rw-r--r--tests/auto/quickcontrols2/font/data/inheritance-dynamicchildcontrol.qml75
-rw-r--r--tests/auto/quickcontrols2/font/data/inheritance-dynamicchildpopup.qml80
-rw-r--r--tests/auto/quickcontrols2/font/data/inheritance-dynamiccontrol.qml71
-rw-r--r--tests/auto/quickcontrols2/font/data/inheritance-dynamicpopup.qml76
-rw-r--r--tests/auto/quickcontrols2/font/data/inheritance-popup.qml74
-rw-r--r--tests/auto/quickcontrols2/font/data/listview.qml79
-rw-r--r--tests/auto/quickcontrols2/font/tst_font.cpp369
-rw-r--r--tests/auto/quickcontrols2/palette/CMakeLists.txt61
-rw-r--r--tests/auto/quickcontrols2/palette/data/bindings.qml100
-rw-r--r--tests/auto/quickcontrols2/palette/data/inheritance-childcontrol.qml76
-rw-r--r--tests/auto/quickcontrols2/palette/data/inheritance-childpopup.qml76
-rw-r--r--tests/auto/quickcontrols2/palette/data/inheritance-control.qml74
-rw-r--r--tests/auto/quickcontrols2/palette/data/inheritance-dynamicchildcontrol.qml75
-rw-r--r--tests/auto/quickcontrols2/palette/data/inheritance-dynamicchildpopup.qml80
-rw-r--r--tests/auto/quickcontrols2/palette/data/inheritance-dynamiccontrol.qml71
-rw-r--r--tests/auto/quickcontrols2/palette/data/inheritance-dynamicpopup.qml76
-rw-r--r--tests/auto/quickcontrols2/palette/data/inheritance-popup.qml74
-rw-r--r--tests/auto/quickcontrols2/palette/data/listview.qml79
-rw-r--r--tests/auto/quickcontrols2/palette/data/palette-appwindow-custom.qml75
-rw-r--r--tests/auto/quickcontrols2/palette/data/palette-appwindow-default.qml55
-rw-r--r--tests/auto/quickcontrols2/palette/data/palette-control-custom.qml75
-rw-r--r--tests/auto/quickcontrols2/palette/data/palette-control-default.qml55
-rw-r--r--tests/auto/quickcontrols2/palette/data/palette-popup-custom.qml75
-rw-r--r--tests/auto/quickcontrols2/palette/data/palette-popup-default.qml55
-rw-r--r--tests/auto/quickcontrols2/palette/data/set-palette.qml66
-rw-r--r--tests/auto/quickcontrols2/palette/qtquickcontrols2.conf5
-rw-r--r--tests/auto/quickcontrols2/palette/tst_palette.cpp440
-rw-r--r--tests/auto/quickcontrols2/platform/CMakeLists.txt26
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_colordialog.qml71
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_filedialog.qml71
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_folderdialog.qml71
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_fontdialog.qml71
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_menu.qml335
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_menubar.qml239
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_menuitem.qml123
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_menuitemgroup.qml390
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_menuseparator.qml74
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_messagedialog.qml113
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_standardpaths.qml87
-rw-r--r--tests/auto/quickcontrols2/platform/data/tst_systemtrayicon.qml139
-rw-r--r--tests/auto/quickcontrols2/platform/tst_platform.cpp64
-rw-r--r--tests/auto/quickcontrols2/pointerhandlers/CMakeLists.txt37
-rw-r--r--tests/auto/quickcontrols2/pointerhandlers/data/controlandmousearea.qml49
-rw-r--r--tests/auto/quickcontrols2/pointerhandlers/data/controlinsidecontrol.qml31
-rw-r--r--tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp195
-rw-r--r--tests/auto/quickcontrols2/pressandhold/CMakeLists.txt21
-rw-r--r--tests/auto/quickcontrols2/pressandhold/data/dependencies.qml4
-rw-r--r--tests/auto/quickcontrols2/pressandhold/tst_pressandhold.cpp222
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/activeFocusControl.qml115
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/activefocusontab.qml94
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/attachedProperties.qml179
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/basicapplicationwindow.qml56
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/clearfocusondestruction.qml84
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/defaultFocus.qml69
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/fill.qml79
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/focusAfterPopupClosed.qml111
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/font.qml97
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/layout.qml62
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/layoutLayout.qml66
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/locale.qml77
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/data/opacity.qml61
-rw-r--r--tests/auto/quickcontrols2/qquickapplicationwindow/tst_qquickapplicationwindow.cpp968
-rw-r--r--tests/auto/quickcontrols2/qquickcolor/CMakeLists.txt25
-rw-r--r--tests/auto/quickcontrols2/qquickcolor/data/tst_color.qml65
-rw-r--r--tests/auto/quickcontrols2/qquickcolor/tst_qquickcolor.cpp38
-rw-r--r--tests/auto/quickcontrols2/qquickcontrol/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/qquickcontrol/data/flickable.qml71
-rw-r--r--tests/auto/quickcontrols2/qquickcontrol/data/fractionalFontSize.qml18
-rw-r--r--tests/auto/quickcontrols2/qquickcontrol/data/resizeBackgroundKeepsBindings.qml42
-rw-r--r--tests/auto/quickcontrols2/qquickcontrol/tst_qquickcontrol.cpp144
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/BLACKLIST8
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-button.qml70
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-hover.qml83
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-wheel.qml80
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow.qml65
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/dragHandlerInteraction.qml23
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/dragOverModalShadow.qml87
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/flickable.qml75
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/grabber.qml73
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/header.qml73
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/itemPartialOverlayModal.qml13
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/multiTouch.qml82
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/multiple.qml95
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/reposition.qml76
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/slider.qml74
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/topEdgeScreenEdge.qml78
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/window-button.qml71
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/window-hover.qml84
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/window-wheel.qml81
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/data/window.qml66
-rw-r--r--tests/auto/quickcontrols2/qquickdrawer/tst_qquickdrawer.cpp1437
-rw-r--r--tests/auto/quickcontrols2/qquickheaderview/CMakeLists.txt49
-rw-r--r--tests/auto/quickcontrols2/qquickheaderview/data/ListModel.qml107
-rw-r--r--tests/auto/quickcontrols2/qquickheaderview/data/Window.qml121
-rw-r--r--tests/auto/quickcontrols2/qquickheaderview/tst_qquickheaderview.cpp411
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/BLACKLIST15
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/CMakeLists.txt84
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/alignment.qml16
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/color.qml18
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/fileSelectors.qml16
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/imageProvider.qml9
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/nameBindingNoSizes.qml7
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/nameBindingSourceSize.qml16
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/nameBindingSourceSizeWidthHeight.qml10
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/root.qml6
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingNoSizes.qml15
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceSize.qml16
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceSizeWidthHeight.qml10
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceTooLarge.qml8
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/svgNoSizes.qml15
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/svgSourceBindingSourceSize.qml17
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/data/translucentColors.qml67
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/16x16/actions/appointment-new.pngbin0 -> 839 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/+testselector/appointment-new.pngbin0 -> 1040 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/+testselector/appointment-new@2x.pngbin0 -> 107 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/appointment-new.pngbin0 -> 1268 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/appointment-new@2x.pngbin0 -> 4017 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-original.pngbin0 -> 1047 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-original@2x.pngbin0 -> 107 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-tinted.pngbin0 -> 1053 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-tinted@2x.pngbin0 -> 107 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22@2/actions/+testselector/appointment-new.pngbin0 -> 107 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22@2/actions/appointment-new.pngbin0 -> 4017 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/appointment-new.svg425
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/index.theme21
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/resources.qrc17
-rw-r--r--tests/auto/quickcontrols2/qquickiconimage/tst_qquickiconimage.cpp573
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/CMakeLists.txt50
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/data/a.pngbin0 -> 98 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/data/colorChanges.qml66
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/data/iconSourceContext.qml18
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/data/iconlabel.qml66
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/data/spacingWithOnlyIcon.qml66
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/data/spacingWithOnlyText.qml63
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/data/sub/Actions.qml6
-rw-r--r--tests/auto/quickcontrols2/qquickiconlabel/tst_qquickiconlabel.cpp372
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/BLACKLIST3
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/CMakeLists.txt42
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/control-assets/button-background.9.pngbin0 -> 138 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/data/tst_imagine.qml196
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/qtquickcontrols2.conf5
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/test-assets/button-background-1.pngbin0 -> 101 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/test-assets/button-background-2.pngbin0 -> 101 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/test-assets/wobble.frag.qsbbin0 -> 1709 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickimaginestyle/tst_qquickimaginestyle.cpp38
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyle/CMakeLists.txt39
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyle/data/tst_material.qml791
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyle/qtquickcontrols2.conf2
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyle/tst_qquickmaterialstyle.cpp75
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyleconf/CMakeLists.txt63
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyleconf/data/applicationwindow.qml69
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyleconf/qquickmaterialstyleconf.qrc7
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyleconf/qtquickcontrols2.conf10
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyleconf/tst_qquickmaterialstyleconf.cpp129
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyleconf/variant-dense.conf6
-rw-r--r--tests/auto/quickcontrols2/qquickmaterialstyleconf/variant-normal.conf6
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/BLACKLIST3
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/actionShortcuts.qml97
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/actions.qml67
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/addItem.qml71
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/applicationWindowScrollable.qml73
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/applicationwindow.qml93
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/delegateFromSeparateComponent.qml107
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/disableWhenTriggered.qml121
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/disabledMenuItemKeyNavigation.qml74
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/giveMenuItemFocusOnButtonPress.qml97
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/menuItemWidths.qml103
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/menuSeparator.qml84
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/mnemonics.qml87
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/order.qml81
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/popup.qml124
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/pressAndHold.qml73
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/removeTakeItem.qml87
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/repeater.qml69
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/scrollableWithPadding.qml79
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/subMenuDisabled.qml79
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/subMenus.qml137
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/data/windowScrollable.qml74
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp2064
-rw-r--r--tests/auto/quickcontrols2/qquickmenubar/BLACKLIST7
-rw-r--r--tests/auto/quickcontrols2/qquickmenubar/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/qquickmenubar/data/checkHighlightWhenDismissed.qml93
-rw-r--r--tests/auto/quickcontrols2/qquickmenubar/data/delegateFromSeparateComponent.qml79
-rw-r--r--tests/auto/quickcontrols2/qquickmenubar/data/empty.qml54
-rw-r--r--tests/auto/quickcontrols2/qquickmenubar/data/menubar.qml113
-rw-r--r--tests/auto/quickcontrols2/qquickmenubar/tst_qquickmenubar.cpp691
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/CMakeLists.txt51
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/foo.9.pngbin0 -> 139 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/foo@2x.9.pngbin0 -> 153 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/foo@3x.9.pngbin0 -> 174 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/foo@4x.9.pngbin0 -> 185 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all.9.pngbin0 -> 169 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@2x.9.pngbin0 -> 209 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@3x.9.pngbin0 -> 236 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@4x.9.pngbin0 -> 265 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright.9.pngbin0 -> 185 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@2x.9.pngbin0 -> 222 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@3x.9.pngbin0 -> 249 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@4x.9.pngbin0 -> 281 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft.9.pngbin0 -> 155 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@2x.9.pngbin0 -> 183 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@3x.9.pngbin0 -> 205 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@4x.9.pngbin0 -> 225 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/ninepatchimage.qml7
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/padding.9.pngbin0 -> 162 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/padding@2x.9.pngbin0 -> 153 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/padding@3x.9.pngbin0 -> 176 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/data/padding@4x.9.pngbin0 -> 187 bytes
-rw-r--r--tests/auto/quickcontrols2/qquickninepatchimage/tst_qquickninepatchimage.cpp260
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/BLACKLIST17
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/activeFocusAfterExit.qml79
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose1.qml69
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose2.qml79
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose3.qml78
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClosingSeveralPopups.qml80
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnDelayedEnter.qml73
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/applicationwindow-hover.qml84
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/applicationwindow-wheel.qml90
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/applicationwindow.qml104
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/centerInOverlayWithinStackViewItem.qml80
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/closeOnEscapeWithNestedPopups.qml112
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/closeOnEscapeWithVisiblePopup.qml16
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/countChanged.qml80
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/cursor.qml71
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/destroyDuringExitTransition.qml114
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/dialog.qml75
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/dimmerContainmentMask.qml76
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/disabledPalette.qml72
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/grabber.qml80
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/invisibleToolTipOpen.qml28
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/mirroredCombobox.qml26
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/modelessOnModalOnModeless.qml98
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/nested.qml74
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/orientation.qml76
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/releaseAfterExitTransition.qml78
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/rotatedCombobox.qml26
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/shrinkPopupThatWasLargerThanWindowHeight.qml75
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/shrinkPopupThatWasLargerThanWindowWidth.qml76
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/tabFence.qml97
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/toolTipCrashOnClose.qml94
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/window-hover.qml84
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/window-wheel.qml90
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/data/window.qml105
-rw-r--r--tests/auto/quickcontrols2/qquickpopup/tst_qquickpopup.cpp2034
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/CMakeLists.txt62
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/CmdLineArgStyle/Control.qml2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/CmdLineArgStyle/qmldir2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/Custom/Label.qml2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/Custom/qmldir2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/EnvVarFallbackStyle/Control.qml2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/EnvVarFallbackStyle/qmldir2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/EnvVarStyle/Control.qml2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/EnvVarStyle/qmldir2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/basic.conf6
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/custom.conf6
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/dependencies.qml4
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/designer/ButtonSpecifics.qml3
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/dummy.dSYM/empty (renamed from tests/auto/cmake/qtquickcompiler/empty.qrc)0
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/dummyStyles/DummyStyle/Button.qml2
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/fusion.conf6
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/imagine.conf6
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/material.conf6
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/data/universal.conf6
-rw-r--r--tests/auto/quickcontrols2/qquickstyle/tst_qquickstyle.cpp181
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyle/CMakeLists.txt38
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyle/data/tst_universal.qml441
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyle/qtquickcontrols2.conf2
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyle/tst_qquickuniversalstyle.cpp38
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyleconf/CMakeLists.txt61
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyleconf/data/applicationwindow.qml64
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyleconf/qquickuniversalstyleconf.qrc (renamed from tests/auto/cmake/qmlimportscanner/qis_test.qrc)3
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyleconf/qtquickcontrols2.conf10
-rw-r--r--tests/auto/quickcontrols2/qquickuniversalstyleconf/tst_qquickuniversalstyleconf.cpp87
-rw-r--r--tests/auto/quickcontrols2/revisions/CMakeLists.txt18
-rw-r--r--tests/auto/quickcontrols2/revisions/data/dependencies.qml6
-rw-r--r--tests/auto/quickcontrols2/revisions/tst_revisions.cpp124
-rw-r--r--tests/auto/quickcontrols2/sanity/BLACKLIST24
-rw-r--r--tests/auto/quickcontrols2/sanity/CMakeLists.txt43
-rw-r--r--tests/auto/quickcontrols2/sanity/data/dependencies.qml4
-rw-r--r--tests/auto/quickcontrols2/sanity/tst_sanity.cpp695
-rw-r--r--tests/auto/quickcontrols2/snippets/CMakeLists.txt45
-rw-r--r--tests/auto/quickcontrols2/snippets/data/dependencies.qml7
-rw-r--r--tests/auto/quickcontrols2/snippets/qtquickcontrols2.conf3
-rw-r--r--tests/auto/quickcontrols2/snippets/tst_snippets.cpp169
-rw-r--r--tests/auto/quickcontrols2/styleimports/CMakeLists.txt65
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/+FileSystemStyle/CustomComponent.qml5
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/CustomComponent.qml5
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/applicationWindowWithButton.qml64
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/customStyleSelector.qml64
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Action.qml4
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Button.qml4
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Label.qml4
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/qmldir4
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+linux/Button.qml4
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+macos/Button.qml4
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+windows/Button.qml4
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/Button.qml4
-rw-r--r--tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/qmldir2
-rw-r--r--tests/auto/quickcontrols2/styleimports/resources/ResourceStyle/Button.qml9
-rw-r--r--tests/auto/quickcontrols2/styleimports/resources/ResourceStyle/qmldir2
-rw-r--r--tests/auto/quickcontrols2/styleimports/tst_styleimports.cpp273
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimematerial/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimematerial/data/importMaterialStyleWithoutControls.qml64
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimematerial/tst_styleimportscompiletimematerial.cpp86
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/CMakeLists.txt48
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/QmlOnly/Button.qml83
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/QmlOnly/qmldir3
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/importQmlOnlyStyleWithoutControls.qml64
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/dummy_imports.qml8
-rw-r--r--tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/tst_styleimportscompiletimeqmlonly.cpp81
-rw-r--r--tests/auto/quickcontrols2/translation/CMakeLists.txt62
-rw-r--r--tests/auto/quickcontrols2/translation/data/comboBox.qml65
-rw-r--r--tests/auto/quickcontrols2/translation/data/dialogButtonBox.qml61
-rw-r--r--tests/auto/quickcontrols2/translation/data/dialogButtonBoxWithCustomButtons.qml75
-rw-r--r--tests/auto/quickcontrols2/translation/data/stackView.qml147
-rw-r--r--tests/auto/quickcontrols2/translation/qml_jp.qmbin0 -> 135 bytes
-rw-r--r--tests/auto/quickcontrols2/translation/qml_jp.ts28
-rw-r--r--tests/auto/quickcontrols2/translation/qtbase_fr.qmbin0 -> 259 bytes
-rw-r--r--tests/auto/quickcontrols2/translation/qtbase_fr.ts23
-rw-r--r--tests/auto/quickcontrols2/translation/tst_translation.cpp198
-rw-r--r--tests/auto/quickdialogs/CMakeLists.txt4
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/BLACKLIST11
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/CMakeLists.txt39
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/data/acceptRejectLabel.qml67
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/data/bindAllTxtHtmlNameFilters.qml66
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/data/bindCurrentFolder.qml68
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/data/bindTitle.qml65
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/data/bindTxtHtmlNameFilters.qml66
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/data/fileDialog.qml73
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/dummy_imports.qml9
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/qquickfiledialogimpl.pro14
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp1358
-rw-r--r--tests/auto/quickdialogs/qquickfolderdialogimpl/dummy_imports.qml10
-rw-r--r--tests/auto/quickdialogs/qquickfontdialogimpl/BLACKLIST4
-rw-r--r--tests/auto/quickdialogs/qquickfontdialogimpl/CMakeLists.txt39
-rw-r--r--tests/auto/quickdialogs/qquickfontdialogimpl/data/fontDialog.qml65
-rw-r--r--tests/auto/quickdialogs/qquickfontdialogimpl/dummy_imports.qml8
-rw-r--r--tests/auto/quickdialogs/qquickfontdialogimpl/tst_qquickfontdialogimpl.cpp641
-rw-r--r--tests/auto/quickdialogs/qquickmessagedialogimpl/dummy_imports.qml8
-rw-r--r--tests/auto/quicktest/CMakeLists.txt4
-rw-r--r--tests/auto/quicktest/polish-qml/CMakeLists.txt4
-rw-r--r--tests/auto/quicktest/polish-qml/tst_polish-qml.cpp2
-rw-r--r--tests/auto/quicktest/polish/CMakeLists.txt4
-rw-r--r--tests/auto/quicktest/polish/tst_polish.cpp3
-rw-r--r--tests/auto/quicktest/quicktestmainwithsetup/CMakeLists.txt9
-rw-r--r--tests/auto/quicktest/quicktestmainwithsetup/tst_quicktestmainwithsetup.cpp2
-rw-r--r--tests/auto/quicktest/signalspy/CMakeLists.txt10
-rw-r--r--tests/auto/quicktest/signalspy/data/signalspy2.qml60
-rw-r--r--tests/auto/quicktest/signalspy/tst_signalspy.cpp48
-rw-r--r--tests/auto/quickwidgets/qquickwidget/BLACKLIST2
-rw-r--r--tests/auto/quickwidgets/qquickwidget/CMakeLists.txt6
-rw-r--r--tests/auto/quickwidgets/qquickwidget/data/FocusOnClick.qml33
-rw-r--r--tests/auto/quickwidgets/qquickwidget/data/button.qml27
-rw-r--r--tests/auto/quickwidgets/qquickwidget/data/controls.qml23
-rw-r--r--tests/auto/quickwidgets/qquickwidget/data/mouse.qml2
-rw-r--r--tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp250
-rw-r--r--tests/auto/shared/platforminputcontext.h103
-rw-r--r--tests/auto/shared/qqmljsastdumper.cpp1089
-rw-r--r--tests/auto/shared/qqmljsastdumper.h449
-rw-r--r--tests/auto/shared/testhttpserver.cpp451
-rw-r--r--tests/auto/shared/testhttpserver.h128
-rw-r--r--tests/auto/shared/util.cpp103
-rw-r--r--tests/auto/shared/util.h100
1608 files changed, 217373 insertions, 6122 deletions
diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt
index 3d89d8b396..fd4a6748c1 100644
--- a/tests/auto/CMakeLists.txt
+++ b/tests/auto/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from auto.pro.
+add_subdirectory(cmake)
if(TARGET Qt::Quick)
add_subdirectory(qml)
add_subdirectory(quick)
+endif()
+
+# Limit set of tests to run for static Qt builds.
+if(QT_BUILD_MINIMAL_STATIC_TESTS)
+ return()
+endif()
+
+if(TARGET Qt::Quick)
add_subdirectory(quicktest)
endif()
add_subdirectory(core)
add_subdirectory(qmldevtools)
-add_subdirectory(cmake)
add_subdirectory(toolsupport)
-if(NOT UIKIT)
+if(NOT UIKIT AND NOT ANDROID AND NOT QNX) # FIXME: QTBUG-92591 QTBUG-100202
add_subdirectory(qmltest)
endif()
if(TARGET Qt::Quick)
@@ -18,6 +25,10 @@ endif()
if(TARGET Qt::QuickWidgets)
add_subdirectory(quickwidgets)
endif()
-if(TARGET Qt::QmlDomPrivate)
+if(TARGET Qt::QmlDomPrivate AND NOT CMAKE_CROSSCOMPILING)
add_subdirectory(qmldom)
endif()
+if(TARGET Qt::QuickTemplates2)
+ add_subdirectory(quickcontrols2)
+ add_subdirectory(quickdialogs)
+endif()
diff --git a/tests/auto/bic/data/QtQml.6.2.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtQml.6.2.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..e6971a0cea
--- /dev/null
+++ b/tests/auto/bic/data/QtQml.6.2.0.linux-gcc-amd64.txt
@@ -0,0 +1,6952 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f6f4598f300) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f6f459dcae0) 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 (0x0x7f6f459dcd20) 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 (0x0x7f6f45a0be40) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f6f43467660) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f6f434e2480) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f6f434e2540) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f6f434e2a20) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f6f434e2a80) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f6f434e2ae0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f6f434e2b40) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f6f434e2ba0) 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 (0x0x7f6f434e2c60) 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 (0x0x7f6f434e2d20) 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 (0x0x7f6f434e2de0) 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 (0x0x7f6f434e2ea0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f6f43519240) 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 (0x0x7f6f435195a0) 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 (0x0x7f6f43519600) 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 (0x0x7f6f435198a0) 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 (0x0x7f6f43519900) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f6f43568180) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f6f435ae720) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f6f43546d00) 0 empty
+ std::__nonesuch (0x0x7f6f435aec00) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f6f43633960) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f6f43633c60) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f6f43633cc0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f6f4329ca20) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f6f4329ca80) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f6f43655270) 0 empty
+ std::input_iterator_tag (0x0x7f6f4329cae0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f6f436552d8) 0 empty
+ std::forward_iterator_tag (0x0x7f6f43655340) 0 empty
+ std::input_iterator_tag (0x0x7f6f4329cb40) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f6f436553a8) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f6f43655410) 0 empty
+ std::forward_iterator_tag (0x0x7f6f43655478) 0 empty
+ std::input_iterator_tag (0x0x7f6f4329cba0) 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 (0x0x7f6f4334e8a0) 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 (0x0x7f6f4334e9c0) 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 (0x0x7f6f4334ecc0) 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 (0x0x7f6f4337d000) 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 (0x0x7f6f4337d120) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f6f4340c900) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f6f4340cc00) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f6f4340cc60) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f6f4340cd20) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f6f4340cd80) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f6f4340cde0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f6f4340ce40) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f6f4340cea0) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f6f43449180) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f6f43449420) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f6f43449480) 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 (0x0x7f6f430fe240) 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 (0x0x7f6f43655820) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f6f430fe420) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f6f43655820)
+
+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 (0x0x7f6f430fe600) 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 (0x0x7f6f43655888) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f6f430fe9c0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f6f43655888)
+
+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 (0x0x7f6f436558f0) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f6f430feba0) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f6f436558f0)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f6f430fed80) 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 (0x0x7f6f4313b300) 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 (0x0x7f6f43655958) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f6f4313b9c0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f6f43655958)
+
+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 (0x0x7f6f436559c0) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f6f43655a28) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f6f436559c0)
+ std::exception (0x0x7f6f4313bba0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f6f43655a28)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f6f4313bd80) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f6f43173000) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f6f431ee780) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f6f42dcbb40) 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 (0x0x7f6f42dcbc00) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f6f42e3dae0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f6f42e3dba0) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f6f42e3dc00) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f6f42e3dc60) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f6f42e3dcc0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f6f42e3dde0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f6f42e3de40) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f6f42aff4e0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f6f42aff660) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f6f457204e0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f6f45720540) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f6f457205a0) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f6f45720600) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f6f42339d80) 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 (0x0x7f6f422f29c0) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f6f42339e40) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f6f422f29c0)
+
+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 (0x0x7f6f422f2a28) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f6f422f2a90) 0
+ primary-for std::domain_error (0x0x7f6f422f2a28)
+ std::exception (0x0x7f6f42339ea0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f6f422f2a90)
+
+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 (0x0x7f6f422f2af8) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f6f422f2b60) 0
+ primary-for std::invalid_argument (0x0x7f6f422f2af8)
+ std::exception (0x0x7f6f42339f00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f6f422f2b60)
+
+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 (0x0x7f6f422f2bc8) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f6f422f2c30) 0
+ primary-for std::length_error (0x0x7f6f422f2bc8)
+ std::exception (0x0x7f6f42339f60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f6f422f2c30)
+
+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 (0x0x7f6f422f2c98) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f6f422f2d00) 0
+ primary-for std::out_of_range (0x0x7f6f422f2c98)
+ std::exception (0x0x7f6f42397000) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f6f422f2d00)
+
+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 (0x0x7f6f422f2d68) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f6f42397060) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f6f422f2d68)
+
+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 (0x0x7f6f422f2dd0) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f6f422f2e38) 0
+ primary-for std::range_error (0x0x7f6f422f2dd0)
+ std::exception (0x0x7f6f423970c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f6f422f2e38)
+
+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 (0x0x7f6f422f2ea0) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f6f422f2f08) 0
+ primary-for std::overflow_error (0x0x7f6f422f2ea0)
+ std::exception (0x0x7f6f42397120) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f6f422f2f08)
+
+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 (0x0x7f6f422f2f70) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f6f423b3000) 0
+ primary-for std::underflow_error (0x0x7f6f422f2f70)
+ std::exception (0x0x7f6f42397180) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f6f423b3000)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f6f423de480) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f6f423de4e0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f6f423de660) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f6f423de720) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f6f423b3270) 0
+ std::__uses_alloc_base (0x0x7f6f423de6c0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f6f4214cd20) 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 (0x0x7f6f42200680) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f6f4221e420) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f6f42200680)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f6f4221e4e0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f6f4221e540) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f6f4221e840) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f6f41ef86c0) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f6f41ef8780) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f6f41ef8c60) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f6f41f1fae0) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f6f41f1fba0) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f6f41f1fc00) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f6f41f48000) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f6f41f48120) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f6f41d351e0) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f6f41d35a80) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f6f41d72480) 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 (0x0x7f6f41d465b0) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f6f41d726c0) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f6f41d465b0)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f6f41842060) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f6f417d20d0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f6f418427e0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f6f417d21a0) 0
+ std::_Bit_iterator_base (0x0x7f6f417d2208) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f6f41842d80) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f6f417d22d8) 0
+ std::_Bit_iterator_base (0x0x7f6f417d2340) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f6f414775a0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f6f41653a80) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f6f41653c00) 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 (0x0x7f6f41653d80) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f6f41653f00) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f6f4138ba80) 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 (0x0x7f6f4138bae0) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f6f410635a0) 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 (0x0x7f6f413dc6e8) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f6f4108fae0) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f6f413dc6e8)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f6f41149540) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f6f411495a0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f6f41149840) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f6f4118a060) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f6f411c6180) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f6f40e5a420) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f6f411ed9c0) 0
+ std::__atomic_flag_base (0x0x7f6f40e5a480) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f6f40dc8c98) 0
+ QAtomicInteger<int> (0x0x7f6f40dc8d00) 0
+ QBasicAtomicInteger<int> (0x0x7f6f40de13c0) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f6f40266660) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f6f402666c0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f6f4031c9c0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f6f4035f120) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f6f4035f180) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f6f4035e138) 0
+ QGenericArgument (0x0x7f6f4035f420) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f6f4035f900) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f6f4035f960) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f6f4035f8a0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f6f403ac300) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f6f403d6d20) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f6f40400720) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f6f400d8240) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f6f400d85a0) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f6f4019b060) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f6f4019b180) 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 (0x0x7f6f4019b540) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f6f4019b7e0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f6f4019b9c0) 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 (0x0x7f6f401e5ae0) 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 (0x0x7f6f401e5e40) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f6f4023e660) 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 (0x0x7f6f401f8618) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f6f401f8680) 0
+ primary-for std::system_error (0x0x7f6f401f8618)
+ std::exception (0x0x7f6f3fe66240) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f6f401f8680)
+
+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 (0x0x7f6f401f89c0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f6f401f8a28) 0
+ primary-for std::ios_base::failure (0x0x7f6f401f89c0)
+ std::runtime_error (0x0x7f6f401f8a90) 0
+ primary-for std::system_error (0x0x7f6f401f8a28)
+ std::exception (0x0x7f6f3fe9d9c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f6f401f8a90)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f6f3fe9da20) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f6f3fe9da80) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f6f3fe9dae0) 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 (0x0x7f6f3fe9d960) 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 (0x0x7f6f3ff56720) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f6f4000fa20) 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> (0x0x7f6f3fb95618 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> (0x0x7f6f3fb956e8 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> (0x0x7f6f3fb95c30 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> (0x0x7f6f3fb95d00 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 (0x0x7f6f3fc06068) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f6f3fc04420) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f6f3fc06068)
+
+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 (0x0x7f6f3fc060d0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f6f3fc04540) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f6f3fc060d0)
+
+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 (0x0x7f6f3fc06138) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f6f3fc04660) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f6f3fc06138)
+
+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 (0x0x7f6f3fc06208) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f6f3fc04780) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f6f3fc06208)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f6f3fc2c060) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f6f3fc2c3c0) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f6f3fc2c6c0) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f6f3fc2ca20) 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 (0x0x7f6f3fc06340) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f6f3f8df1e0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f6f3fc06340)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f6f3f91bf60) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f6f3f9474e0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f6f3f68d300) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f6f3f7e8660) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f6f3f4e9780) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f6f3f330b40) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f6f3f3bcae0) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f6f3f142a20) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f6f3f142e40) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f6f3f142ea0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f6f3f1c4c00) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f6f3eeb5de0) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f6f3eeb5d80) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f6f3eef8cc0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f6f3ec63f60) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f6f3e8882a0) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f6f3e876208) 0
+ QtPrivate::ArgBase (0x0x7f6f3e888300) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f6f3e8762d8) 0
+ QtPrivate::ArgBase (0x0x7f6f3e888540) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f6f3e8cbd80) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f6f3e904d20) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f6f3e904de0) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f6f3e740300) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f6f3e7df480) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f6f3e8011e0) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f6f3e801420) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f6f3e482f00) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f6f3e998ea0) 0
+ QIODeviceBase (0x0x7f6f3e482f60) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f6f3e4d2120) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f6f3e57d6c0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f6f3e579680) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f6f3e57d780) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f6f3e579750) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f6f3e57d840) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f6f3e278360) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f6f3e579af8) 0
+ QMetaContainer (0x0x7f6f3e278540) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f6f3e579b60) 0
+ QMetaContainer (0x0x7f6f3e278900) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f6f3e36eae0) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f6f3e320bc8) 0
+ std::__detail::_List_node_base (0x0x7f6f3e36eb40) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f6f3e060c00) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f6f3e060f60) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f6f3dedd420) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f6f3dedd600) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f6f3df97660) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f6f3da84f00) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f6f3d6a8240) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f6f3d6a85a0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f6f3d707600) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f6f3d707720) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f6f3d754d80) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f6f3d754d20) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f6f3d754de0) 0
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f6f3d754e40) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f6f3d7773c0) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f6f3d777420) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f6f3d777b40) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f6f3d7a52a0) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f6f3d7a55a0) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f6f3d7a56c0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f6f3d7a5900) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f6f3d768618) 0
+ QPropertyObserverBase (0x0x7f6f3d7a5a80) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f6f3d768958) 0
+ QPropertyObserver (0x0x7f6f3d7689c0) 0
+ QPropertyObserverBase (0x0x7f6f3d7a5f60) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f6f3d80ce40) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f6f3d46b000) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f6f3d566f00) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f6f3d566f60) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f6f3d25ed20) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f6f3d2fba80) 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 (0x0x7f6f3d3d9420) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f6f3d3d9d80) 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 (0x0x7f6f3d3d9d20) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f6f3d0b1cc0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f6f3d0f75a0) 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 (0x0x7f6f3d3b1ea0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f6f3d0f7540) 0
+ primary-for QAbstractAnimation (0x0x7f6f3d3b1ea0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f6f3d0f7900) 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 (0x0x7f6f3d3b1f08) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f6f3d0f78a0) 0
+ primary-for QAnimationDriver (0x0x7f6f3d3b1f08)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f6f3d0f7ae0) 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 (0x0x7f6f3d3b1f70) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f6f3d0f7a80) 0
+ primary-for QEventLoop (0x0x7f6f3d3b1f70)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f6f3d163060) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f6f3d163120) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f6f3d163180) 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 (0x0x7f6f3d1370d0) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f6f3d1630c0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f6f3d1370d0)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f6f3d19a900) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f6f3cc89540) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f6f3cc894e0) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f6f3cccd180) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f6f3cc9a270) 0
+ QStringConverterBase (0x0x7f6f3cccd120) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f6f3cc9a2d8) 0
+ QStringConverter (0x0x7f6f3cc9a340) 0
+ QStringConverterBase (0x0x7f6f3cccdb40) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f6f3cc9a3a8) 0
+ QStringConverter (0x0x7f6f3cc9a410) 0
+ QStringConverterBase (0x0x7f6f3cd079c0) 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 (0x0x7f6f3cc9a478) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f6f3cd2b6c0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f6f3cd2be40) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f6f3ce2c060) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f6f3ca5a6c0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f6f3ca5a840) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f6f3cb18a80) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f6f3cb339c0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f6f3caf2f08) 0
+ QIODeviceBase (0x0x7f6f3cb33960) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f6f3c85a360) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f6f3c85a420) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f6f3ca09060) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f6f3ca090c0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f6f3ca09000) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f6f3c7cf7e0) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f6f3c7cfa20) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f6f3c7cfc00) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f6f3c812b40) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f6f3c45ab40) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f6f3c4aad20) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f6f3c53b600) 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 (0x0x7f6f3c535d00) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f6f3c53b5a0) 0
+ primary-for QAbstractItemModel (0x0x7f6f3c535d00)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f6f3c2843c0) 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 (0x0x7f6f3c5a05b0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f6f3c5a0618) 0
+ primary-for QAbstractTableModel (0x0x7f6f3c5a05b0)
+ QObject (0x0x7f6f3c284360) 0
+ primary-for QAbstractItemModel (0x0x7f6f3c5a0618)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f6f3c2844e0) 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 (0x0x7f6f3c5a0680) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f6f3c5a06e8) 0
+ primary-for QAbstractListModel (0x0x7f6f3c5a0680)
+ QObject (0x0x7f6f3c284480) 0
+ primary-for QAbstractItemModel (0x0x7f6f3c5a06e8)
+
+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 (0x0x7f6f3c2ccd20) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f6f3c2ccde0) 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 (0x0x7f6f3c2d8af8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f6f3c2d8b60) 0
+ primary-for QAbstractProxyModel (0x0x7f6f3c2d8af8)
+ QObject (0x0x7f6f3c2ccd80) 0
+ primary-for QAbstractItemModel (0x0x7f6f3c2d8b60)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f6f3c31f000) 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 (0x0x7f6f3c2d8bc8) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f6f3c2d8c30) 0
+ primary-for QAnimationGroup (0x0x7f6f3c2d8bc8)
+ QObject (0x0x7f6f3c2ccf60) 0
+ primary-for QAbstractAnimation (0x0x7f6f3c2d8c30)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f6f3c2d8d68) 0
+ QIterator<QMetaAssociation> (0x0x7f6f3c2d8dd0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f6f3c31f420) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f6f3c2d8f08) 0
+ QConstIterator<QMetaAssociation> (0x0x7f6f3c2d8f70) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f6f3c31f9c0) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f6f3c371000) 0
+ QIterable<QMetaAssociation> (0x0x7f6f3c31ff00) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f6f3c4539c0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f6f3c0b4720) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f6f3c0e3660) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f6f3c1291e0) 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 (0x0x7f6f3c12c0e0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f6f3c129120) 0
+ primary-for QIODevice (0x0x7f6f3c12c0e0)
+ QIODeviceBase (0x0x7f6f3c129180) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f6f3c129600) 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 (0x0x7f6f3c112f70) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f6f3c12c150) 0
+ primary-for QBuffer (0x0x7f6f3c112f70)
+ QObject (0x0x7f6f3c129540) 0
+ primary-for QIODevice (0x0x7f6f3c12c150)
+ QIODeviceBase (0x0x7f6f3c1295a0) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f6f3c129840) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f6f3c1297e0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f6f3c1299c0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f6f3c129960) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f6f3c1d31e0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f6f3bf20060) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f6f3bf200c0) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f6f3bf20000) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f6f3bf20ae0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f6f3bfa2120) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f6f3bfeb360) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f6f3bfeb3c0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f6f3bfeb300) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f6f3bc71600) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f6f3bc9f9c0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f6f3bd61c00) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f6f3bdf53c0) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f6f3bdf5480) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f6f3bdf5600) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f6f3ba86840) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f6f3bb87480) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f6f3bbf4600) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f6f3bbf46c0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f6f3b917f60) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f6f3b9704e0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f6f3b970540) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f6f3b970480) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f6f3b65bae0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f6f3b65bb40) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f6f3b65ba80) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f6f3b471ba0) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f6f3b471b40) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f6f3b556f60) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f6f3b5d4420) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f6f3b5d4e40) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f6f3b622060) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f6f3b2b0a80) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f6f3b337420) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f6f3b337480) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f6f3b3374e0) 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 (0x0x7f6f3b3373c0) 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 (0x0x7f6f3b331410) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f6f3b337e40) 0
+ primary-for QTimerEvent (0x0x7f6f3b331410)
+
+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 (0x0x7f6f3b331478) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f6f3b3a6360) 0
+ primary-for QChildEvent (0x0x7f6f3b331478)
+
+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 (0x0x7f6f3b3314e0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f6f3b3a6780) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f6f3b3314e0)
+
+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 (0x0x7f6f3b331548) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f6f3b3a6a20) 0
+ primary-for QDeferredDeleteEvent (0x0x7f6f3b331548)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f6f3b3a6de0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f6f3b331618) 0
+ QBasicMutex (0x0x7f6f3b426b40) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f6f3b426f60) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f6f3b4405a0) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f6f3b440ba0) 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 (0x0x7f6f3b0f0840) 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 (0x0x7f6f3b215240) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f6f3ae67420) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f6f3ae67720) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f6f3afa0ae0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f6f3afb98f0) 0
+ std::__mutex_base (0x0x7f6f3afa0b40) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f6f3afa0d20) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f6f3afa0d80) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f6f3afa0de0) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f6f3afda840) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f6f3afb9958) 0
+ std::__recursive_mutex_base (0x0x7f6f3afda8a0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f6f3aec3e70) 0
+ std::__mutex_base (0x0x7f6f3afdac60) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f6f3afdacc0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f6f3aec3ee0) 0
+ std::__recursive_mutex_base (0x0x7f6f3b0170c0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f6f3b017120) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f6f3b017f00) 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 (0x0x7f6f3b04d1e0) 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 (0x0x7f6f3b04d240) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f6f3b04d180) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f6f3ae2b480) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f6f3ae2b840) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f6f3ae2b8a0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f6f3aadde40) 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 (0x0x7f6f3aad8750) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f6f3aad87b8) 0
+ primary-for std::future_error (0x0x7f6f3aad8750)
+ std::exception (0x0x7f6f3ab1d540) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f6f3aad87b8)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f6f3ab1dc60) 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 (0x0x7f6f3ab1dc00) 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 (0x0x7f6f3a88c6c0) 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 (0x0x7f6f3a867410) 0
+ std::__at_thread_exit_elt (0x0x7f6f3a88c780) 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 (0x0x7f6f3ab1dde0) 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 (0x0x7f6f3ab1dba0) 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 (0x0x7f6f3a565340) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f6f3a58b480) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f6f3a565340)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f6f3a58bd20) 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 (0x0x7f6f3a565680) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f6f3a58bcc0) 0
+ primary-for QThread (0x0x7f6f3a565680)
+
+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 (0x0x7f6f3a5cb0c0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f6f3a5cb240) 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 (0x0x7f6f3a5656e8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f6f3a5cb1e0) 0
+ primary-for QThreadPool (0x0x7f6f3a5656e8)
+
+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 (0x0x7f6f3a565750) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f6f3a5cb3c0) 0 nearly-empty
+ primary-for QException (0x0x7f6f3a565750)
+
+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 (0x0x7f6f3a5657b8) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f6f3a565820) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f6f3a5657b8)
+ std::exception (0x0x7f6f3a5cb420) 0 nearly-empty
+ primary-for QException (0x0x7f6f3a565820)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f6f3a61f2a0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f6f3a40f960) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f6f3a40f900) 0
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f6f3a44fba0) 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 (0x0x7f6f3a05a478) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f6f3a44fb40) 0
+ primary-for QCoreApplication (0x0x7f6f3a05a478)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f6f3a44fde0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f6f3a44ff00) 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 (0x0x7f6f3a05a4e0) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f6f3a05a548) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f6f3a05a4e0)
+ QObject (0x0x7f6f3a44fea0) 0
+ primary-for QAbstractItemModel (0x0x7f6f3a05a548)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f6f3a0cf0c0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f6f3a0cf2a0) 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 (0x0x7f6f3a05a5b0) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f6f3a0aed90) 0
+ primary-for QFileDevice (0x0x7f6f3a05a5b0)
+ QObject (0x0x7f6f3a0cf1e0) 0
+ primary-for QIODevice (0x0x7f6f3a0aed90)
+ QIODeviceBase (0x0x7f6f3a0cf240) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f6f3a0cff60) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f6f3a1b2540) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f6f3a1b29c0) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f6f3a1fbcc0) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f6f3a1fbc60) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f6f39e8b2a0) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f6f39e8bde0) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7f6f39cfe820 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> (0x0x7f6f39cfea90 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> (0x0x7f6f39fe8e70 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> (0x0x7f6f39cfed00 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> (0x0x7f6f39cfedd0 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> (0x0x7f6f39cfef70 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> (0x0x7f6f39da9208 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> (0x0x7f6f39da3230 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> (0x0x7f6f39da9478 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> (0x0x7f6f39da9548 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 (0x0x7f6f39da4660) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f6f39da47e0) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f6f39da4960) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f6f39da4c60) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f6f39da4de0) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7f6f39a8cea0) 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 (0x0x7f6f39a8cf60) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f6f39a8cf00) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f6f39a8cd80) 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 (0x0x7f6f39915340) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7f6f399153a8) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f6f39915340)
+ std::runtime_error (0x0x7f6f39915410) 0
+ primary-for std::system_error (0x0x7f6f399153a8)
+ std::exception (0x0x7f6f39903e40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f6f39915410)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f6f39915d68) 0
+ std::filesystem::__cxx11::path (0x0x7f6f39936960) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f6f39990ba0) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f6f396773c0) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f6f396778a0) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f6f396c7f60) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f6f396ff720) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f6f39778840) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f6f398469c0) 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 (0x0x7f6f39854820) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f6f39854888) 0
+ primary-for QFile (0x0x7f6f39854820)
+ QIODevice (0x0x7f6f39a44540) 0
+ primary-for QFileDevice (0x0x7f6f39854888)
+ QObject (0x0x7f6f39846900) 0
+ primary-for QIODevice (0x0x7f6f39a44540)
+ QIODeviceBase (0x0x7f6f39846960) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f6f39487000) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f6f3951a960) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f6f3963b0c0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f6f3963b540) 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 (0x0x7f6f3931ecc0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f6f3931ef00) 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 (0x0x7f6f392f3a28) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f6f3931eea0) 0
+ primary-for QFileSelector (0x0x7f6f392f3a28)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f6f3934f120) 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 (0x0x7f6f392f3a90) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f6f3934f0c0) 0
+ primary-for QFileSystemWatcher (0x0x7f6f392f3a90)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f6f3934f8a0) 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 (0x0x7f6f392f3af8) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f6f3934f840) 0
+ primary-for QFutureWatcherBase (0x0x7f6f392f3af8)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f6f3934fde0) 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 (0x0x7f6f392f3d00) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f6f392f3d68) 0
+ primary-for QIdentityProxyModel (0x0x7f6f392f3d00)
+ QAbstractItemModel (0x0x7f6f392f3dd0) 0
+ primary-for QAbstractProxyModel (0x0x7f6f392f3d68)
+ QObject (0x0x7f6f3934fd80) 0
+ primary-for QAbstractItemModel (0x0x7f6f392f3dd0)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f6f3934ff60) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f6f393e5ba0) 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 (0x0x7f6f393efbc8) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f6f393e5b40) 0
+ primary-for QItemSelectionModel (0x0x7f6f393efbc8)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f6f390740d0) 0
+ QList<QItemSelectionRange> (0x0x7f6f39074138) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f6f390741a0) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f6f39430660) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f6f39125780) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f6f39125c60) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f6f391bf000) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f6f391bf060) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f6f39196f60) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f6f39245a20) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f6f39245a80) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f6f39005000) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f6f39005060) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f6f38fd9f60) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f6f38c90b40) 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 (0x0x7f6f38c99a28) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f6f38c90ae0) 0
+ primary-for QLibrary (0x0x7f6f38c99a28)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f6f38cea240) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f6f38cea1e0) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f6f38dbb9c0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f6f38a73240) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f6f38a73300) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f6f38acc9c0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f6f38b49360) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f6f38b8d960) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f6f38c10180) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f6f38c10900) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f6f388ad240) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f6f38902f60) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f6f3893a060) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f6f3893a000) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f6f3899e2a0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f6f3899e240) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f6f389e6000) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f6f389c4f60) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f6f389e66c0) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f6f389e6660) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f6f38a294e0) 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 (0x0x7f6f38a28548) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f6f38a29480) 0
+ primary-for QMimeData (0x0x7f6f38a28548)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f6f38a29660) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f6f386bc180) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f6f386bc240) 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 (0x0x7f6f386b6410) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f6f386bc1e0) 0
+ primary-for QObjectCleanupHandler (0x0x7f6f386b6410)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f6f386bc300) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f6f3871c120) 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 (0x0x7f6f38708e38) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f6f38708ea0) 0
+ primary-for QParallelAnimationGroup (0x0x7f6f38708e38)
+ QAbstractAnimation (0x0x7f6f38708f08) 0
+ primary-for QAnimationGroup (0x0x7f6f38708ea0)
+ QObject (0x0x7f6f3871c0c0) 0
+ primary-for QAbstractAnimation (0x0x7f6f38708f08)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f6f3871c300) 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 (0x0x7f6f38708f70) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f6f3872a000) 0
+ primary-for QPauseAnimation (0x0x7f6f38708f70)
+ QObject (0x0x7f6f3871c2a0) 0
+ primary-for QAbstractAnimation (0x0x7f6f3872a000)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f6f3871c4e0) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f6f3871c540) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f6f3874ef60) 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 (0x0x7f6f3875fbc8) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f6f3874ef00) 0
+ primary-for QPluginLoader (0x0x7f6f3875fbc8)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f6f38776060) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f6f387dd8a0) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f6f387dd900) 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 (0x0x7f6f387dec98) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f6f38713bd0) 0
+ primary-for QProcess (0x0x7f6f387dec98)
+ QObject (0x0x7f6f387dd7e0) 0
+ primary-for QIODevice (0x0x7f6f38713bd0)
+ QIODeviceBase (0x0x7f6f387dd840) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f6f388266c0) 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 (0x0x7f6f387ded00) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f6f387ded68) 0
+ primary-for QVariantAnimation (0x0x7f6f387ded00)
+ QObject (0x0x7f6f38826660) 0
+ primary-for QAbstractAnimation (0x0x7f6f387ded68)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f6f38826900) 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 (0x0x7f6f387dee38) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f6f387deea0) 0
+ primary-for QPropertyAnimation (0x0x7f6f387dee38)
+ QAbstractAnimation (0x0x7f6f387def08) 0
+ primary-for QVariantAnimation (0x0x7f6f387deea0)
+ QObject (0x0x7f6f388268a0) 0
+ primary-for QAbstractAnimation (0x0x7f6f387def08)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f6f384e4060) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f6f385d04e0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f6f385d0480) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f6f38383c60) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f6f381a6ba0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f6f381a6c00) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f6f381a6b40) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f6f3820bbc8) 0
+ QRandomGenerator (0x0x7f6f38221ea0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f6f38249ae0) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f6f38249d20) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f6f37eb61e0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f6f37eb6660) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f6f37f35120) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f6f37f8dba0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f6f380589c0) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f6f37d33540) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f6f37d33840) 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 (0x0x7f6f37ccbf08) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f6f37ccbf70) 0
+ primary-for QSaveFile (0x0x7f6f37ccbf08)
+ QIODevice (0x0x7f6f381d2f50) 0
+ primary-for QFileDevice (0x0x7f6f37ccbf70)
+ QObject (0x0x7f6f37d33780) 0
+ primary-for QIODevice (0x0x7f6f381d2f50)
+ QIODeviceBase (0x0x7f6f37d337e0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f6f37d33ba0) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f6f37dc73c0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f6f37e30120) 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 (0x0x7f6f37e24b60) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f6f37e24bc8) 0
+ primary-for QSequentialAnimationGroup (0x0x7f6f37e24b60)
+ QAbstractAnimation (0x0x7f6f37e24c30) 0
+ primary-for QAnimationGroup (0x0x7f6f37e24bc8)
+ QObject (0x0x7f6f37e300c0) 0
+ primary-for QAbstractAnimation (0x0x7f6f37e24c30)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f6f37e24d68) 0
+ QIterator<QMetaSequence> (0x0x7f6f37e24dd0) 0
+ QBaseIterator<QMetaSequence> (0x0x7f6f37e30480) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f6f37e24ea0) 0
+ QConstIterator<QMetaSequence> (0x0x7f6f37e24f08) 0
+ QBaseIterator<QMetaSequence> (0x0x7f6f37e30a20) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f6f37e24f70) 0
+ QIterable<QMetaSequence> (0x0x7f6f37e30f60) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f6f37b62540) 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 (0x0x7f6f37b653a8) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f6f37b624e0) 0
+ primary-for QSettings (0x0x7f6f37b653a8)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f6f37b62960) 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 (0x0x7f6f37b65410) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f6f37b62900) 0
+ primary-for QSharedMemory (0x0x7f6f37b65410)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f6f37b62b40) 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 (0x0x7f6f37b65478) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f6f37b62ae0) 0
+ primary-for QSignalMapper (0x0x7f6f37b65478)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f6f3cbdc780) 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 (0x0x7f6f4188e340) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f6f3cbdc720) 0
+ primary-for QSocketNotifier (0x0x7f6f4188e340)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f6f3cbdc900) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f6f3c0c42a0) 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 (0x0x7f6f41ec4410) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f6f41ec4680) 0
+ primary-for QSortFilterProxyModel (0x0x7f6f41ec4410)
+ QAbstractItemModel (0x0x7f6f41f944e0) 0
+ primary-for QAbstractProxyModel (0x0x7f6f41ec4680)
+ QObject (0x0x7f6f3c0c4240) 0
+ primary-for QAbstractItemModel (0x0x7f6f41f944e0)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f6f3c0c4660) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f6f3bf33060) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f6f3baf28a0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f6f3b67a120) 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 (0x0x7f6f41b00548) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f6f41b005b0) 0
+ primary-for QStringListModel (0x0x7f6f41b00548)
+ QAbstractItemModel (0x0x7f6f41b00680) 0
+ primary-for QAbstractListModel (0x0x7f6f41b005b0)
+ QObject (0x0x7f6f3b67a0c0) 0
+ primary-for QAbstractItemModel (0x0x7f6f41b00680)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f6f3b67a1e0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f6f3b67a300) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f6f3b67a480) 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 (0x0x7f6f41b006e8) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f6f41b00820) 0
+ primary-for QTemporaryFile (0x0x7f6f41b006e8)
+ QFileDevice (0x0x7f6f41b009c0) 0
+ primary-for QFile (0x0x7f6f41b00820)
+ QIODevice (0x0x7f6f41cb1460) 0
+ primary-for QFileDevice (0x0x7f6f41b009c0)
+ QObject (0x0x7f6f3b67a3c0) 0
+ primary-for QIODevice (0x0x7f6f41cb1460)
+ QIODeviceBase (0x0x7f6f3b67a420) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f6f3b67a6c0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f6f3b67ad20) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f6f3b5d3420) 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 (0x0x7f6f41b00c98) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f6f3b5d33c0) 0
+ primary-for QTimeLine (0x0x7f6f41b00c98)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f6f3b5d3600) 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 (0x0x7f6f41b00d00) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f6f3b5d35a0) 0
+ primary-for QTimer (0x0x7f6f41b00d00)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f6f3b5d3f60) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f6f3b5d3f00) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f6f396bd000) 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 (0x0x7f6f41b6e820) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f6f39b1ff60) 0
+ primary-for QTranslator (0x0x7f6f41b6e820)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f6f396bd1e0) 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 (0x0x7f6f41b6e888) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f6f41b6e958) 0
+ primary-for QTransposeProxyModel (0x0x7f6f41b6e888)
+ QAbstractItemModel (0x0x7f6f41b6e9c0) 0
+ primary-for QAbstractProxyModel (0x0x7f6f41b6e958)
+ QObject (0x0x7f6f396bd180) 0
+ primary-for QAbstractItemModel (0x0x7f6f41b6e9c0)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f6f396bd360) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f6f39226ba0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f6f39226cc0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f6f38c68b40) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f6f4194d618) 0
+ QList<QXmlStreamAttribute> (0x0x7f6f4194d5b0) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f6f4194d6e8) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f6f38a83c00) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f6f38922480) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f6f37eb2b40) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f6f37f081e0) 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 (0x0x7f6f37f45960) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f6f37f459c0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f6f37f45f60) 0
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f6f3804e180) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f6f38448300) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f6f3c9ddb40) 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 (0x0x7f6f4197bf70) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7f6f3c9ddae0) 0
+ primary-for QAbstractNetworkCache (0x0x7f6f4197bf70)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f6f3c9ddd80) 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 (0x0x7f6f4197e000) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7f6f3eeae690) 0
+ primary-for QAbstractSocket (0x0x7f6f4197e000)
+ QObject (0x0x7f6f3c9ddcc0) 0
+ primary-for QIODevice (0x0x7f6f3eeae690)
+ QIODeviceBase (0x0x7f6f3c9ddd20) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f6f3fb58060) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f6f3fb58120) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f6f3eb9e8a0) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f6f3c458060) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f6f3b51c720) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f6f39ce10c0) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f6f391f1b40) 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 (0x0x7f6f41684d68) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7f6f391f1ae0) 0
+ primary-for QDnsLookup (0x0x7f6f41684d68)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f6f391f1e40) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f6f391f1f60) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f6f3d9c1ea0) 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 (0x0x7f6f4168e3a8) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7f6f4168e410) 0
+ primary-for QTcpSocket (0x0x7f6f4168e3a8)
+ QIODevice (0x0x7f6f3c7d3e70) 0
+ primary-for QAbstractSocket (0x0x7f6f4168e410)
+ QObject (0x0x7f6f3d9c1de0) 0
+ primary-for QIODevice (0x0x7f6f3c7d3e70)
+ QIODeviceBase (0x0x7f6f3d9c1e40) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f6f3913e480) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f6f3dc10780) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f6f37427840) 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 (0x0x7f6f416b5208) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7f6f416b5270) 0
+ primary-for QSslSocket (0x0x7f6f416b5208)
+ QAbstractSocket (0x0x7f6f416b52d8) 0
+ primary-for QTcpSocket (0x0x7f6f416b5270)
+ QIODevice (0x0x7f6f39fe8b60) 0
+ primary-for QAbstractSocket (0x0x7f6f416b52d8)
+ QObject (0x0x7f6f37427780) 0
+ primary-for QIODevice (0x0x7f6f39fe8b60)
+ QIODeviceBase (0x0x7f6f374277e0) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f6f37427a20) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f6f37427a80) 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 (0x0x7f6f416b5340) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7f6f374279c0) 0
+ primary-for QDtlsClientVerifier (0x0x7f6f416b5340)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f6f37427c60) 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 (0x0x7f6f416b53a8) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7f6f37427c00) 0
+ primary-for QDtls (0x0x7f6f416b53a8)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f6f37427de0) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f6f3da4e300) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f6f3bba5e40) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f6f3720d780) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f6f3722df00) 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 (0x0x7f6f416d7820) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7f6f3722dea0) 0
+ primary-for QHttpMultiPart (0x0x7f6f416d7820)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f6f3723a120) 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 (0x0x7f6f416d7888) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7f6f3723a0c0) 0
+ primary-for QLocalServer (0x0x7f6f416d7888)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f6f3723a8a0) 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 (0x0x7f6f416d7a28) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7f6f39300e00) 0
+ primary-for QLocalSocket (0x0x7f6f416d7a28)
+ QObject (0x0x7f6f3723a7e0) 0
+ primary-for QIODevice (0x0x7f6f39300e00)
+ QIODeviceBase (0x0x7f6f3723a840) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f6f3723aea0) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f6f36daa420) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f6f36de4d20) 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 (0x0x7f6f3c089138) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7f6f36de4cc0) 0
+ primary-for QNetworkAccessManager (0x0x7f6f3c089138)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f6f36de4ea0) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f6f36e1af60) 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 (0x0x7f6f3b288c98) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7f6f36e1af00) 0
+ primary-for QNetworkCookieJar (0x0x7f6f3b288c98)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f6f36e25120) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f6f36e47900) 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 (0x0x7f6f394c8e38) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7f6f394e7340) 0
+ primary-for QNetworkDiskCache (0x0x7f6f394c8e38)
+ QObject (0x0x7f6f36e478a0) 0
+ primary-for QAbstractNetworkCache (0x0x7f6f394e7340)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7f6f36e47ae0) 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 (0x0x7f6f394e73a8) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+ QObject (0x0x7f6f36e47a80) 0
+ primary-for QNetworkInformation (0x0x7f6f394e73a8)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f6f36e631e0) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f6f36f05c60) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f6f36b5e1e0) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f6f36b83960) 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 (0x0x7f6f36bb3420) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f6f36bb3a20) 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 (0x0x7f6f36bb0340) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7f6f36b8be70) 0
+ primary-for QNetworkReply (0x0x7f6f36bb0340)
+ QObject (0x0x7f6f36bb3960) 0
+ primary-for QIODevice (0x0x7f6f36b8be70)
+ QIODeviceBase (0x0x7f6f36bb39c0) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f6f36bdcd80) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f6f36bfdc60) 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 (0x0x7f6f36bff750) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7f6f36bfdc00) 0
+ primary-for QTcpServer (0x0x7f6f36bff750)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f6f36bfdde0) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f6f36c305a0) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f6f36cd7f00) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f6f36cfdc60) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f6f36d16ea0) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f6f36d42720) 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 (0x0x7f6f36d3ff08) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7f6f36d3ff70) 0
+ primary-for QUdpSocket (0x0x7f6f36d3ff08)
+ QIODevice (0x0x7f6f36d46000) 0
+ primary-for QAbstractSocket (0x0x7f6f36d3ff70)
+ QObject (0x0x7f6f36d42660) 0
+ primary-for QIODevice (0x0x7f6f36d46000)
+ QIODeviceBase (0x0x7f6f36d426c0) 0 empty
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f6f36d42960) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7f6f36963ea0) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7f6f36993480) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7f6f369934e0) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7f6f36993600) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7f6f3695d820) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7f6f369936c0) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7f6f3695d888) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7f6f36993780) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7f6f3695d8f0) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7f6f36993840) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7f6f369938a0) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7f6f36993540) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7f6f369f9ae0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f6f369f9de0) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f6f36a130c0) 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 (0x0x7f6f369e2680) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7f6f36a13060) 0
+ primary-for QJSEngine (0x0x7f6f369e2680)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f6f36a13a20) 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 (0x0x7f6f36a13c00) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f6f36a45720) 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 (0x0x7f6f36a45d20) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=170 base align=8
+QQmlPrivate::RegisterType (0x0x7f6f36a68540) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=152 align=8
+ base size=152 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f6f36a685a0) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f6f36a68600) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f6f36a68660) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f6f36a686c0) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f6f36a68a20) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f6f36a68ae0) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f6f36a68b40) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f6f36a68ba0) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f6f36a68c00) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7f6f36a68c60) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7f6f36a68cc0) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f6f36a8d6c0) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f6f36a8d720) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f6f36a8d780) 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 (0x0x7f6f3677d120) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f6f3677d180) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f6f3679a9c0) 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 (0x0x7f6f3679bb60) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+ QObject (0x0x7f6f3679a960) 0
+ primary-for QQmlImageProviderBase (0x0x7f6f3679bb60)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f6f3679aea0) 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 (0x0x7f6f3679bd00) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7f6f3679bd68) 0
+ primary-for QQmlEngine (0x0x7f6f3679bd00)
+ QObject (0x0x7f6f3679ae40) 0
+ primary-for QJSEngine (0x0x7f6f3679bd68)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f6f367d01e0) 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 (0x0x7f6f3679bdd0) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7f6f3679be38) 0
+ primary-for QQmlApplicationEngine (0x0x7f6f3679bdd0)
+ QJSEngine (0x0x7f6f3679bea0) 0
+ primary-for QQmlEngine (0x0x7f6f3679be38)
+ QObject (0x0x7f6f367d0180) 0
+ primary-for QJSEngine (0x0x7f6f3679bea0)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f6f367d03c0) 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 (0x0x7f6f3679bf08) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7f6f367d0360) 0
+ primary-for QQmlComponent (0x0x7f6f3679bf08)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f6f367f9180) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f6f367f91e0) 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 (0x0x7f6f367f7068) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7f6f367f9120) 0
+ primary-for QQmlContext (0x0x7f6f367f7068)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f6f367f9840) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f6f367f9e40) 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 (0x0x7f6f367f71a0) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7f6f367f9de0) 0
+ primary-for QQmlExpression (0x0x7f6f367f71a0)
+
+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 (0x0x7f6f36827000) 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 (0x0x7f6f367f7208) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7f6f36827060) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f6f367f7208)
+
+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 (0x0x7f6f368270c0) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f6f36827660) 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 (0x0x7f6f36783c40) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7f6f368275a0) 0
+ primary-for QQmlExtensionPlugin (0x0x7f6f36783c40)
+ QQmlExtensionInterface (0x0x7f6f367f7270) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+ QQmlTypesExtensionInterface (0x0x7f6f36827600) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f6f367f7270)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f6f368278a0) 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 (0x0x7f6f36783d20) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+ QObject (0x0x7f6f368277e0) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f6f36783d20)
+ QQmlEngineExtensionInterface (0x0x7f6f36827840) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f6f36827960) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f6f36827a20) 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 (0x0x7f6f367f7340) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7f6f368279c0) 0
+ primary-for QQmlFileSelector (0x0x7f6f367f7340)
+
+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 (0x0x7f6f36827ba0) 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 (0x0x7f6f36827c00) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f6f367f73a8) 0
+ QDebug (0x0x7f6f367f7410) 0
+ QIODeviceBase (0x0x7f6f36827c60) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f6f368a26c0) 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 (0x0x7f6f368a2720) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f6f368a2780) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f6f368d99c0) 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 (0x0x7f6f368dcd00) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7f6f368d9960) 0
+ primary-for QQmlPropertyMap (0x0x7f6f368dcd00)
+
+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 (0x0x7f6f368f3a80) 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 (0x0x7f6f368f3de0) 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 (0x0x7f6f36907000) 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 (0x0x7f6f36907360) 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 (0x0x7f6f36907540) 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 (0x0x7f6f369078a0) 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 (0x0x7f6f36907a20) 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 (0x0x7f6f36907d80) 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 (0x0x7f6f36907f60) 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 (0x0x7f6f36927300) 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 (0x0x7f6f369274e0) 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 (0x0x7f6f36927840) 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 (0x0x7f6f36927a20) 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 (0x0x7f6f36927d80) 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 (0x0x7f6f36927f60) 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 (0x0x7f6f36946300) 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 (0x0x7f6f3655cba0) 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 (0x0x7f6f3655cf00) 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 (0x0x7f6f365730c0) 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 (0x0x7f6f36573420) 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 (0x0x7f6f365735a0) 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 (0x0x7f6f36573900) 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 (0x0x7f6f36573a80) 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 (0x0x7f6f36573de0) 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 (0x0x7f6f36573f60) 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 (0x0x7f6f36591300) 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 (0x0x7f6f36591480) 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 (0x0x7f6f365917e0) 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 (0x0x7f6f36591960) 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 (0x0x7f6f36591cc0) 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 (0x0x7f6f36591e40) 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 (0x0x7f6f365aa1e0) 0 empty
+
diff --git a/tests/auto/bic/data/QtQuick.6.2.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtQuick.6.2.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..221f5b50f5
--- /dev/null
+++ b/tests/auto/bic/data/QtQuick.6.2.0.linux-gcc-amd64.txt
@@ -0,0 +1,12616 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f65ce87df60) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f65cc5b4780) 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 (0x0x7f65cc5b49c0) 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 (0x0x7f65cc5e2ae0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f65cc642300) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f65cc2bb120) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f65cc2bb1e0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f65cc2bb6c0) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f65cc2bb720) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f65cc2bb780) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f65cc2bb7e0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f65cc2bb840) 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 (0x0x7f65cc2bb900) 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 (0x0x7f65cc2bb9c0) 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 (0x0x7f65cc2bba80) 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 (0x0x7f65cc2bbb40) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f65cc2bbea0) 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 (0x0x7f65cc2f6240) 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 (0x0x7f65cc2f62a0) 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 (0x0x7f65cc2f6540) 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 (0x0x7f65cc2f65a0) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f65cc2f6de0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f65cc3853c0) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f65cc314d00) 0 empty
+ std::__nonesuch (0x0x7f65cc3858a0) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f65cc407600) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f65cc407900) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f65cc407960) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f65cc46e6c0) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f65cc46e720) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f65cc421270) 0 empty
+ std::input_iterator_tag (0x0x7f65cc46e780) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f65cc4212d8) 0 empty
+ std::forward_iterator_tag (0x0x7f65cc421340) 0 empty
+ std::input_iterator_tag (0x0x7f65cc46e7e0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f65cc4213a8) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f65cc421410) 0 empty
+ std::forward_iterator_tag (0x0x7f65cc421478) 0 empty
+ std::input_iterator_tag (0x0x7f65cc46e840) 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 (0x0x7f65cb924540) 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 (0x0x7f65cb924660) 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 (0x0x7f65cb924960) 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 (0x0x7f65cb924c60) 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 (0x0x7f65cb924d80) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f65cb9e45a0) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f65cb9e48a0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f65cb9e4900) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f65cb9e49c0) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f65cb9e4a20) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f65cb9e4a80) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f65cb9e4ae0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f65cb9e4b40) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f65cb9e4de0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f65cba190c0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f65cba19120) 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 (0x0x7f65cba19ea0) 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 (0x0x7f65cc421820) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f65cb6d80c0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f65cc421820)
+
+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 (0x0x7f65cb6d82a0) 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 (0x0x7f65cc421888) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f65cb6d8660) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f65cc421888)
+
+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 (0x0x7f65cc4218f0) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f65cb6d8840) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f65cc4218f0)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f65cb6d8a20) 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 (0x0x7f65cb6d8f60) 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 (0x0x7f65cc421958) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f65cb715660) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f65cc421958)
+
+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 (0x0x7f65cc4219c0) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f65cc421a28) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f65cc4219c0)
+ std::exception (0x0x7f65cb715840) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f65cc421a28)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f65cb715a20) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f65cb715c60) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f65cb7c4420) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f65cb39d7e0) 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 (0x0x7f65cb39d8a0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f65cb415780) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f65cb415840) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f65cb4158a0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f65cb415900) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f65cb415960) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f65cb415a80) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f65cb415ae0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f65cb0d0180) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f65cb0d0300) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f65caefa180) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f65caefa1e0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f65caefa240) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f65caefa2a0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f65cab14a20) 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 (0x0x7f65caabd9c0) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f65cab14ae0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f65caabd9c0)
+
+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 (0x0x7f65caabda28) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f65caabda90) 0
+ primary-for std::domain_error (0x0x7f65caabda28)
+ std::exception (0x0x7f65cab14b40) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f65caabda90)
+
+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 (0x0x7f65caabdaf8) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f65caabdb60) 0
+ primary-for std::invalid_argument (0x0x7f65caabdaf8)
+ std::exception (0x0x7f65cab14ba0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f65caabdb60)
+
+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 (0x0x7f65caabdbc8) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f65caabdc30) 0
+ primary-for std::length_error (0x0x7f65caabdbc8)
+ std::exception (0x0x7f65cab14c00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f65caabdc30)
+
+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 (0x0x7f65caabdc98) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f65caabdd00) 0
+ primary-for std::out_of_range (0x0x7f65caabdc98)
+ std::exception (0x0x7f65cab14c60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f65caabdd00)
+
+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 (0x0x7f65caabdd68) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f65cab14cc0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f65caabdd68)
+
+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 (0x0x7f65caabddd0) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f65caabde38) 0
+ primary-for std::range_error (0x0x7f65caabddd0)
+ std::exception (0x0x7f65cab14d20) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f65caabde38)
+
+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 (0x0x7f65caabdea0) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f65caabdf08) 0
+ primary-for std::overflow_error (0x0x7f65caabdea0)
+ std::exception (0x0x7f65cab14d80) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f65caabdf08)
+
+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 (0x0x7f65caabdf70) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f65cab7f000) 0
+ primary-for std::underflow_error (0x0x7f65caabdf70)
+ std::exception (0x0x7f65cab14de0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f65cab7f000)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f65cabb4120) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f65cabb4180) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f65cabb4300) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f65cabb43c0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f65cab7f270) 0
+ std::__uses_alloc_base (0x0x7f65cabb4360) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f65ca9249c0) 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 (0x0x7f65ca9ce680) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f65ca9f90c0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f65ca9ce680)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f65ca9f9180) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f65ca9f91e0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f65ca9f94e0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f65ca6cd360) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f65ca6cd420) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f65ca6cd900) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f65ca6f2780) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f65ca6f2840) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f65ca6f28a0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f65ca6f2c60) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f65ca6f2d80) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f65ca4d1e40) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f65ca50a720) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f65ca559120) 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 (0x0x7f65ca5115b0) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f65ca559360) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f65ca5115b0)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f65c9ffacc0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f65c9fa00d0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f65ca01a480) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f65c9fa01a0) 0
+ std::_Bit_iterator_base (0x0x7f65c9fa0208) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f65ca01aa20) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f65c9fa02d8) 0
+ std::_Bit_iterator_base (0x0x7f65c9fa0340) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f65ca0501e0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f65c9e31720) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f65c9e318a0) 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 (0x0x7f65c9e31a20) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f65c9e31ba0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f65c9b63720) 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 (0x0x7f65c9b63780) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f65c9c3f240) 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 (0x0x7f65c9baa6e8) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f65c9c63780) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f65c9baa6e8)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f65c99231e0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f65c9923240) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f65c99234e0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f65c9923d20) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f65c997ede0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f65c9a300c0) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f65c99bd9c0) 0
+ std::__atomic_flag_base (0x0x7f65c9a30120) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f65c9597c98) 0
+ QAtomicInteger<int> (0x0x7f65c9597d00) 0
+ QBasicAtomicInteger<int> (0x0x7f65c95df060) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f65c8e39300) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f65c8e39360) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f65c8af8660) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f65c8af8d80) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f65c8af8de0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f65c8b2b138) 0
+ QGenericArgument (0x0x7f65c8b350c0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f65c8b355a0) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f65c8b35600) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f65c8b35540) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f65c8b35f60) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f65c8ba99c0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f65c8bd43c0) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f65c8892ea0) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f65c88b1240) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f65c8945cc0) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f65c8945de0) 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 (0x0x7f65c89841e0) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f65c8984480) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f65c8984660) 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 (0x0x7f65c89d2780) 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 (0x0x7f65c89d2ae0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f65c8a10300) 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 (0x0x7f65c89c5618) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f65c89c5680) 0
+ primary-for std::system_error (0x0x7f65c89c5618)
+ std::exception (0x0x7f65c8a10ea0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f65c89c5680)
+
+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 (0x0x7f65c89c59c0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f65c89c5a28) 0
+ primary-for std::ios_base::failure (0x0x7f65c89c59c0)
+ std::runtime_error (0x0x7f65c89c5a90) 0
+ primary-for std::system_error (0x0x7f65c89c5a28)
+ std::exception (0x0x7f65c8a75660) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f65c89c5a90)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f65c8a756c0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f65c8a75720) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f65c8a75780) 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 (0x0x7f65c8a75600) 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 (0x0x7f65c872e3c0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f65c87e96c0) 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> (0x0x7f65c8361618 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> (0x0x7f65c83616e8 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> (0x0x7f65c8361c30 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> (0x0x7f65c8361d00 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 (0x0x7f65c83d1068) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f65c83d70c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f65c83d1068)
+
+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 (0x0x7f65c83d10d0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f65c83d71e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f65c83d10d0)
+
+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 (0x0x7f65c83d1138) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f65c83d7300) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f65c83d1138)
+
+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 (0x0x7f65c83d1208) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f65c83d7420) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f65c83d1208)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f65c83d7cc0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f65c8405000) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f65c8405300) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f65c8405660) 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 (0x0x7f65c83d1340) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f65c8084e40) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f65c83d1340)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f65c80f3c00) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f65c811c180) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f65c8233f60) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f65c7fc3300) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f65c7cb9420) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f65c7b087e0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f65c7b97780) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f65c79166c0) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f65c7916ae0) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f65c7916b40) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f65c799b8a0) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f65c7689a80) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f65c7689a20) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f65c76d1960) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f65c783cc00) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f65c7435f00) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f65c7446208) 0
+ QtPrivate::ArgBase (0x0x7f65c7435f60) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f65c74462d8) 0
+ QtPrivate::ArgBase (0x0x7f65c746c1e0) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f65c70a2a20) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f65c70db9c0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f65c70dba80) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f65c6eeef60) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f65c6fb4120) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f65c6fb4e40) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f65c6fd70c0) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f65c7057ba0) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f65c7166ea0) 0
+ QIODeviceBase (0x0x7f65c7057c00) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f65c7057d80) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f65c6d76360) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f65c6d46680) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f65c6d76420) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f65c6d46750) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f65c6d764e0) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f65c6e49000) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f65c6d46af8) 0
+ QMetaContainer (0x0x7f65c6e491e0) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f65c6d46b60) 0
+ QMetaContainer (0x0x7f65c6e495a0) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f65c6b41780) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f65c6aecbc8) 0
+ std::__detail::_List_node_base (0x0x7f65c6b417e0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f65c6c328a0) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f65c6c32c00) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f65c66bc0c0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f65c66bc2a0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f65c6772300) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f65c665dba0) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f65c624aea0) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f65c627e240) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f65c5ed72a0) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f65c5ed73c0) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f65c5f26a20) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f65c5f269c0) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f65c5f26a80) 0
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f65c5f26ae0) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f65c5f4a060) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f65c5f4a0c0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f65c5f4a7e0) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f65c5f4af00) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f65c5f81240) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f65c5f81360) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f65c5f815a0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f65c5f37618) 0
+ QPropertyObserverBase (0x0x7f65c5f81720) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f65c5f37958) 0
+ QPropertyObserver (0x0x7f65c5f379c0) 0
+ QPropertyObserverBase (0x0x7f65c5f81c00) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f65c5ff3ae0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f65c6020c60) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f65c5d37ba0) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f65c5d37c00) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f65c5e3d9c0) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f65c5aee720) 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 (0x0x7f65c5bd80c0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f65c5bd8a20) 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 (0x0x7f65c5bd89c0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f65c5897960) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f65c58c9240) 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 (0x0x7f65c5b81ea0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f65c58c91e0) 0
+ primary-for QAbstractAnimation (0x0x7f65c5b81ea0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f65c58c95a0) 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 (0x0x7f65c5b81f08) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f65c58c9540) 0
+ primary-for QAnimationDriver (0x0x7f65c5b81f08)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f65c58c9780) 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 (0x0x7f65c5b81f70) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f65c58c9720) 0
+ primary-for QEventLoop (0x0x7f65c5b81f70)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f65c58c9cc0) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f65c58c9d80) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f65c58c9de0) 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 (0x0x7f65c59020d0) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f65c58c9d20) 0
+ primary-for QAbstractEventDispatcher (0x0x7f65c59020d0)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f65c596d5a0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f65c585a1e0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f65c585a180) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f65c585ade0) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f65c5863270) 0
+ QStringConverterBase (0x0x7f65c585ad80) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f65c58632d8) 0
+ QStringConverter (0x0x7f65c5863340) 0
+ QStringConverterBase (0x0x7f65c54b67e0) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f65c58633a8) 0
+ QStringConverter (0x0x7f65c5863410) 0
+ QStringConverterBase (0x0x7f65c54d7660) 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 (0x0x7f65c5863478) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f65c54f8360) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f65c54f8ae0) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f65c55e0cc0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f65c5633360) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f65c56334e0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f65c52e7720) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f65c5308660) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f65c52bff08) 0
+ QIODeviceBase (0x0x7f65c5308600) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f65c5430000) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f65c54300c0) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f65c51afcc0) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f65c51afd20) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f65c51afc60) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f65c4fa5480) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f65c4fa56c0) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f65c4fa58a0) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f65c4fe77e0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f65c502d7e0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f65c50789c0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f65c4d0f2a0) 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 (0x0x7f65c4d04d00) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f65c4d0f240) 0
+ primary-for QAbstractItemModel (0x0x7f65c4d04d00)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f65c4e57060) 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 (0x0x7f65c4d6f5b0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f65c4d6f618) 0
+ primary-for QAbstractTableModel (0x0x7f65c4d6f5b0)
+ QObject (0x0x7f65c4e57000) 0
+ primary-for QAbstractItemModel (0x0x7f65c4d6f618)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f65c4e57180) 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 (0x0x7f65c4d6f680) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f65c4d6f6e8) 0
+ primary-for QAbstractListModel (0x0x7f65c4d6f680)
+ QObject (0x0x7f65c4e57120) 0
+ primary-for QAbstractItemModel (0x0x7f65c4d6f6e8)
+
+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 (0x0x7f65c4aa09c0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f65c4aa0a80) 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 (0x0x7f65c4aa3af8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f65c4aa3b60) 0
+ primary-for QAbstractProxyModel (0x0x7f65c4aa3af8)
+ QObject (0x0x7f65c4aa0a20) 0
+ primary-for QAbstractItemModel (0x0x7f65c4aa3b60)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f65c4aa0c60) 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 (0x0x7f65c4aa3bc8) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f65c4aa3c30) 0
+ primary-for QAnimationGroup (0x0x7f65c4aa3bc8)
+ QObject (0x0x7f65c4aa0c00) 0
+ primary-for QAbstractAnimation (0x0x7f65c4aa3c30)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f65c4aa3d68) 0
+ QIterator<QMetaAssociation> (0x0x7f65c4aa3dd0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f65c4b150c0) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f65c4aa3f08) 0
+ QConstIterator<QMetaAssociation> (0x0x7f65c4aa3f70) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f65c4b15660) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f65c4b3f000) 0
+ QIterable<QMetaAssociation> (0x0x7f65c4b15ba0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f65c4c29660) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f65c48873c0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f65c48b7300) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f65c48e3e40) 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 (0x0x7f65c48f01c0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f65c48e3d80) 0
+ primary-for QIODevice (0x0x7f65c48f01c0)
+ QIODeviceBase (0x0x7f65c48e3de0) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f65c49182a0) 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 (0x0x7f65c48dcf70) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f65c48f0230) 0
+ primary-for QBuffer (0x0x7f65c48dcf70)
+ QObject (0x0x7f65c49181e0) 0
+ primary-for QIODevice (0x0x7f65c48f0230)
+ QIODeviceBase (0x0x7f65c4918240) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f65c49184e0) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f65c4918480) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f65c4918660) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f65c4918600) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f65c4990e40) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f65c46accc0) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f65c46acd20) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f65c46acc60) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f65c4705780) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f65c4759d80) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f65c47be000) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f65c47be060) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f65c47a2f60) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f65c48442a0) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f65c4880660) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f65c45328a0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f65c45cc060) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f65c45cc120) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f65c45cc2a0) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f65c46564e0) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f65c436e120) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f65c43c62a0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f65c43c6360) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f65c40ebc00) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f65c4143180) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f65c41431e0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f65c4143120) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f65c422e780) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f65c422e7e0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f65c422e720) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f65c4045840) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f65c40457e0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f65c3d31c00) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f65c3dae0c0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f65c3daeae0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f65c3daecc0) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f65c3e80720) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f65c3b350c0) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f65c3b35120) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f65c3b35180) 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 (0x0x7f65c3b35060) 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 (0x0x7f65c3b00410) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f65c3b35ae0) 0
+ primary-for QTimerEvent (0x0x7f65c3b00410)
+
+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 (0x0x7f65c3b00478) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f65c3b7a000) 0
+ primary-for QChildEvent (0x0x7f65c3b00478)
+
+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 (0x0x7f65c3b004e0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f65c3b7a420) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f65c3b004e0)
+
+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 (0x0x7f65c3b00548) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f65c3b7a6c0) 0
+ primary-for QDeferredDeleteEvent (0x0x7f65c3b00548)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f65c3b7aa80) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f65c3b00618) 0
+ QBasicMutex (0x0x7f65c3bf27e0) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f65c3bf2c00) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f65c3c5e240) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f65c3c5e840) 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 (0x0x7f65c38e34e0) 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 (0x0x7f65c39c6f00) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f65c3a3c0c0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f65c3a3c3c0) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f65c3776780) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f65c37848f0) 0
+ std::__mutex_base (0x0x7f65c37767e0) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f65c37769c0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f65c3776a20) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f65c3776a80) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f65c37b64e0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f65c3784958) 0
+ std::__recursive_mutex_base (0x0x7f65c37b6540) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f65c3a7cf50) 0
+ std::__mutex_base (0x0x7f65c37b6900) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f65c37b6960) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f65c3a7c700) 0
+ std::__recursive_mutex_base (0x0x7f65c37b6d20) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f65c37b6d80) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f65c37f2ba0) 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 (0x0x7f65c37f2e40) 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 (0x0x7f65c37f2ea0) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f65c37f2de0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f65c3605120) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f65c36054e0) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f65c3605540) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f65c32c6ae0) 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 (0x0x7f65c32a8750) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f65c32a87b8) 0
+ primary-for std::future_error (0x0x7f65c32a8750)
+ std::exception (0x0x7f65c32f31e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f65c32a87b8)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f65c32f3900) 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 (0x0x7f65c32f38a0) 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 (0x0x7f65c345d360) 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 (0x0x7f65c3433410) 0
+ std::__at_thread_exit_elt (0x0x7f65c345d420) 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 (0x0x7f65c32f3a80) 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 (0x0x7f65c32f3840) 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 (0x0x7f65c2d33340) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f65c2d64120) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f65c2d33340)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f65c2d649c0) 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 (0x0x7f65c2d33680) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f65c2d64960) 0
+ primary-for QThread (0x0x7f65c2d33680)
+
+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 (0x0x7f65c2d64d20) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f65c2d64ea0) 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 (0x0x7f65c2d336e8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f65c2d64e40) 0
+ primary-for QThreadPool (0x0x7f65c2d336e8)
+
+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 (0x0x7f65c2d33750) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f65c2dab060) 0 nearly-empty
+ primary-for QException (0x0x7f65c2d33750)
+
+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 (0x0x7f65c2d337b8) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f65c2d33820) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f65c2d337b8)
+ std::exception (0x0x7f65c2dab0c0) 0 nearly-empty
+ primary-for QException (0x0x7f65c2d33820)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f65c2dabf00) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f65c2c04600) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f65c2c045a0) 0
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f65c2c29840) 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 (0x0x7f65c2c26478) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f65c2c297e0) 0
+ primary-for QCoreApplication (0x0x7f65c2c26478)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f65c2c29a80) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f65c2c29ba0) 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 (0x0x7f65c2c264e0) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f65c2c26548) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f65c2c264e0)
+ QObject (0x0x7f65c2c29b40) 0
+ primary-for QAbstractItemModel (0x0x7f65c2c26548)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f65c2c29d20) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f65c2c29f00) 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 (0x0x7f65c2c265b0) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f65c2c5fe70) 0
+ primary-for QFileDevice (0x0x7f65c2c265b0)
+ QObject (0x0x7f65c2c29e40) 0
+ primary-for QIODevice (0x0x7f65c2c5fe70)
+ QIODeviceBase (0x0x7f65c2c29ea0) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f65c28c1c00) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f65c29871e0) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f65c2987660) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f65c29e2960) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f65c29e2900) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f65c2a16f00) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f65c2a61a80) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7f65c04cc820 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> (0x0x7f65c04cca90 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> (0x0x7f65c2791f50 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> (0x0x7f65c04ccd00 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> (0x0x7f65c04ccdd0 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> (0x0x7f65c04ccf70 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> (0x0x7f65c0574208 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> (0x0x7f65c055e310 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> (0x0x7f65c0574478 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> (0x0x7f65c0574548 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 (0x0x7f65c05a2300) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f65c05a2480) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f65c05a2600) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f65c05a2900) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f65c05a2a80) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7f65c065cb40) 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 (0x0x7f65c065cc00) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f65c065cba0) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f65c065ca20) 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 (0x0x7f65c00e3340) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7f65c00e33a8) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f65c00e3340)
+ std::runtime_error (0x0x7f65c00e3410) 0
+ primary-for std::system_error (0x0x7f65c00e33a8)
+ std::exception (0x0x7f65c00ddae0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f65c00e3410)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f65c00e3d68) 0
+ std::filesystem::__cxx11::path (0x0x7f65c013c5a0) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f65c0163840) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f65c025d060) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f65c025d540) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f65bfea0c00) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f65bfed43c0) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f65bff4d4e0) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f65c001e660) 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 (0x0x7f65c0023820) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f65c0023888) 0
+ primary-for QFile (0x0x7f65c0023820)
+ QIODevice (0x0x7f65c020f620) 0
+ primary-for QFileDevice (0x0x7f65c0023888)
+ QObject (0x0x7f65c001e5a0) 0
+ primary-for QIODevice (0x0x7f65c020f620)
+ QIODeviceBase (0x0x7f65c001e600) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f65c001ec60) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f65bfcfc600) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f65bfdcbd20) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f65bfe431e0) 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 (0x0x7f65bfaf7960) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f65bfaf7ba0) 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 (0x0x7f65bfac3a28) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f65bfaf7b40) 0
+ primary-for QFileSelector (0x0x7f65bfac3a28)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f65bfaf7d80) 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 (0x0x7f65bfac3a90) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f65bfaf7d20) 0
+ primary-for QFileSystemWatcher (0x0x7f65bfac3a90)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f65bfb30540) 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 (0x0x7f65bfac3af8) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f65bfb304e0) 0
+ primary-for QFutureWatcherBase (0x0x7f65bfac3af8)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f65bfb30a80) 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 (0x0x7f65bfac3d00) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f65bfac3d68) 0
+ primary-for QIdentityProxyModel (0x0x7f65bfac3d00)
+ QAbstractItemModel (0x0x7f65bfac3dd0) 0
+ primary-for QAbstractProxyModel (0x0x7f65bfac3d68)
+ QObject (0x0x7f65bfb30a20) 0
+ primary-for QAbstractItemModel (0x0x7f65bfac3dd0)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f65bfb30c00) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f65bfbb9840) 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 (0x0x7f65bfbbcbc8) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f65bfbb97e0) 0
+ primary-for QItemSelectionModel (0x0x7f65bfbbcbc8)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f65bfc410d0) 0
+ QList<QItemSelectionRange> (0x0x7f65bfc41138) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f65bfc411a0) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f65bfc20300) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f65bf903420) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f65bf903900) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f65bf96bc60) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f65bf96bcc0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f65bf96bc00) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f65bfa1a6c0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f65bfa1a720) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f65bf7afc60) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f65bf7afcc0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f65bf7afc00) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f65bf8677e0) 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 (0x0x7f65bf86aa28) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f65bf867780) 0
+ primary-for QLibrary (0x0x7f65bf86aa28)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f65bf867ea0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f65bf867e40) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f65bf58e660) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f65bf612ea0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f65bf612f60) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f65bf2a1660) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f65bf322000) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f65bf363600) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f65bf3b9de0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f65bf3fb5a0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f65bf449ea0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f65bf0d4c00) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f65bf0d4cc0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f65bf0d4c60) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f65bf151f00) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f65bf151ea0) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f65bf198c60) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f65bf198c00) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f65bf1c5300) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f65bf1c52a0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f65bf1fe120) 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 (0x0x7f65bf1f6548) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f65bf1fe0c0) 0
+ primary-for QMimeData (0x0x7f65bf1f6548)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f65bf1fe2a0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f65bf278de0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f65bf278ea0) 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 (0x0x7f65bee84410) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f65bf278e40) 0
+ primary-for QObjectCleanupHandler (0x0x7f65bee84410)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f65bf278f60) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f65beeced80) 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 (0x0x7f65beed6e38) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f65beed6ea0) 0
+ primary-for QParallelAnimationGroup (0x0x7f65beed6e38)
+ QAbstractAnimation (0x0x7f65beed6f08) 0
+ primary-for QAnimationGroup (0x0x7f65beed6ea0)
+ QObject (0x0x7f65beeced20) 0
+ primary-for QAbstractAnimation (0x0x7f65beed6f08)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f65beecef60) 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 (0x0x7f65beed6f70) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f65beef8000) 0
+ primary-for QPauseAnimation (0x0x7f65beed6f70)
+ QObject (0x0x7f65beecef00) 0
+ primary-for QAbstractAnimation (0x0x7f65beef8000)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f65bef02180) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f65bef021e0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f65bef20c00) 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 (0x0x7f65bef2abc8) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f65bef20ba0) 0
+ primary-for QPluginLoader (0x0x7f65bef2abc8)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f65bef20cc0) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f65befaf540) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f65befaf5a0) 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 (0x0x7f65befaac98) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f65beed0cb0) 0
+ primary-for QProcess (0x0x7f65befaac98)
+ QObject (0x0x7f65befaf480) 0
+ primary-for QIODevice (0x0x7f65beed0cb0)
+ QIODeviceBase (0x0x7f65befaf4e0) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f65beff8360) 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 (0x0x7f65befaad00) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f65befaad68) 0
+ primary-for QVariantAnimation (0x0x7f65befaad00)
+ QObject (0x0x7f65beff8300) 0
+ primary-for QAbstractAnimation (0x0x7f65befaad68)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f65beff85a0) 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 (0x0x7f65befaae38) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f65befaaea0) 0
+ primary-for QPropertyAnimation (0x0x7f65befaae38)
+ QAbstractAnimation (0x0x7f65befaaf08) 0
+ primary-for QVariantAnimation (0x0x7f65befaaea0)
+ QObject (0x0x7f65beff8540) 0
+ primary-for QAbstractAnimation (0x0x7f65befaaf08)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f65c302e0c0) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f65c8892cc0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f65c8892c60) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f65c4c50960) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f65c271c1e0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f65c271c8a0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f65c26a6ba0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f65caa7c618) 0
+ QRandomGenerator (0x0x7f65bfdcb7e0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f65bfc20ba0) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f65bf896720) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f65bf9fc300) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f65bf7881e0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f65bf1c5f00) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f65c02ae300) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f65c45ee120) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f65cb347c60) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f65cb347f60) 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 (0x0x7f65ca312270) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f65ca312340) 0
+ primary-for QSaveFile (0x0x7f65ca312270)
+ QIODevice (0x0x7f65c5cd51c0) 0
+ primary-for QFileDevice (0x0x7f65ca312340)
+ QObject (0x0x7f65cb347ea0) 0
+ primary-for QIODevice (0x0x7f65c5cd51c0)
+ QIODeviceBase (0x0x7f65cb347f00) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f65ca033300) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f65c9942ae0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f65c87fa840) 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 (0x0x7f65ca3fb7b8) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f65ca3fb820) 0
+ primary-for QSequentialAnimationGroup (0x0x7f65ca3fb7b8)
+ QAbstractAnimation (0x0x7f65ca3fb888) 0
+ primary-for QAnimationGroup (0x0x7f65ca3fb820)
+ QObject (0x0x7f65c87fa7e0) 0
+ primary-for QAbstractAnimation (0x0x7f65ca3fb888)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f65ca3fbaf8) 0
+ QIterator<QMetaSequence> (0x0x7f65ca3fbb60) 0
+ QBaseIterator<QMetaSequence> (0x0x7f65c87faba0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f65ca3fbc98) 0
+ QConstIterator<QMetaSequence> (0x0x7f65ca3fbd00) 0
+ QBaseIterator<QMetaSequence> (0x0x7f65c7d09120) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f65ca3fbd68) 0
+ QIterable<QMetaSequence> (0x0x7f65c7d09660) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f65c749bc60) 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 (0x0x7f65ca112478) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f65c749bc00) 0
+ primary-for QSettings (0x0x7f65ca112478)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f65c74e30c0) 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 (0x0x7f65ca1124e0) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f65c74e3060) 0
+ primary-for QSharedMemory (0x0x7f65ca1124e0)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f65c74e32a0) 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 (0x0x7f65ca112548) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f65c74e3240) 0
+ primary-for QSignalMapper (0x0x7f65ca112548)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f65be6f9cc0) 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 (0x0x7f65ca11dd00) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f65be6f9c60) 0
+ primary-for QSocketNotifier (0x0x7f65ca11dd00)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f65be6f9e40) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f65be7257e0) 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 (0x0x7f65ca122820) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f65ca122888) 0
+ primary-for QSortFilterProxyModel (0x0x7f65ca122820)
+ QAbstractItemModel (0x0x7f65ca122958) 0
+ primary-for QAbstractProxyModel (0x0x7f65ca122888)
+ QObject (0x0x7f65be725780) 0
+ primary-for QAbstractItemModel (0x0x7f65ca122958)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f65be725ba0) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f65be74d5a0) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f65be780de0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f65be7be660) 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 (0x0x7f65ca13f5b0) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f65ca13f618) 0
+ primary-for QStringListModel (0x0x7f65ca13f5b0)
+ QAbstractItemModel (0x0x7f65ca13f680) 0
+ primary-for QAbstractListModel (0x0x7f65ca13f618)
+ QObject (0x0x7f65be7be600) 0
+ primary-for QAbstractItemModel (0x0x7f65ca13f680)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f65be7be720) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f65be7be840) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f65be7be9c0) 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 (0x0x7f65ca13f6e8) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f65ca13f750) 0
+ primary-for QTemporaryFile (0x0x7f65ca13f6e8)
+ QFileDevice (0x0x7f65ca13f7b8) 0
+ primary-for QFile (0x0x7f65ca13f750)
+ QIODevice (0x0x7f65bf06cc40) 0
+ primary-for QFileDevice (0x0x7f65ca13f7b8)
+ QObject (0x0x7f65be7be900) 0
+ primary-for QIODevice (0x0x7f65bf06cc40)
+ QIODeviceBase (0x0x7f65be7be960) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f65be7bec00) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f65be7ec2a0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f65be7ec960) 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 (0x0x7f65ca13f9c0) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f65be7ec900) 0
+ primary-for QTimeLine (0x0x7f65ca13f9c0)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f65be7ecb40) 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 (0x0x7f65ca13fa28) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f65be7ecae0) 0
+ primary-for QTimer (0x0x7f65ca13fa28)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f65be81c4e0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f65be81c480) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f65be84b540) 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 (0x0x7f65ca1489c0) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f65be84b4e0) 0
+ primary-for QTranslator (0x0x7f65ca1489c0)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f65be84b720) 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 (0x0x7f65ca148a28) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f65ca148a90) 0
+ primary-for QTransposeProxyModel (0x0x7f65ca148a28)
+ QAbstractItemModel (0x0x7f65ca148af8) 0
+ primary-for QAbstractProxyModel (0x0x7f65ca148a90)
+ QObject (0x0x7f65be84b6c0) 0
+ primary-for QAbstractItemModel (0x0x7f65ca148af8)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f65be84b8a0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f65be4a6120) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f65be4a6240) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f65be4c0060) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f65ca166750) 0
+ QList<QXmlStreamAttribute> (0x0x7f65ca1667b8) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f65ca166820) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f65be4e5180) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f65be4e5a20) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f65be51a060) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f65be526720) 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 (0x0x7f65be533ea0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f65be533f00) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f65be5524e0) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7f65be5526c0) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f65be570180) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f65be59ae40) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f65be59ade0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f65be5dbea0) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f65ca267888) 0
+ QList<QPoint> (0x0x7f65ca2678f0) 0
+ QListSpecialMethods<QPoint> (0x0x7f65ca267958) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f65be60eba0) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f65ca26fc30) 0
+ QList<QPointF> (0x0x7f65ca26fc98) 0
+ QListSpecialMethods<QPointF> (0x0x7f65ca26fd00) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f65be6627e0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f65be2bf000) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f65be2abf60) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f65be2e9540) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f65be2e94e0) 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 (0x0x7f65c9e86f08) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f65be31c120) 0
+ primary-for QImage (0x0x7f65c9e86f08)
+
+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 (0x0x7f65c9e91340) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f65be35d900) 0
+ primary-for QPixmap (0x0x7f65c9e91340)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f65be395540) 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 (0x0x7f65be3c08a0) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f65be3c0e40) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f65be3f5c00) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f65be418ba0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f65be0816c0) 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 (0x0x7f65c742c958) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f65be081660) 0
+ primary-for QScreen (0x0x7f65c742c958)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f65be081900) 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 (0x0x7f65c742cb60) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f65be0818a0) 0
+ primary-for QInputDevice (0x0x7f65c742cb60)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f65be0b13c0) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f65be0c8d20) 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 (0x0x7f65c4feadd0) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f65c4feae38) 0
+ primary-for QPointingDevice (0x0x7f65c4feadd0)
+ QObject (0x0x7f65be0c8cc0) 0
+ primary-for QInputDevice (0x0x7f65c4feae38)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f65be0db480) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f65be1243c0) 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 (0x0x7f65c27c8618) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f65be1533c0) 0
+ primary-for QInputEvent (0x0x7f65c27c8618)
+
+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 (0x0x7f65c27c86e8) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f65c27c8888) 0
+ primary-for QPointerEvent (0x0x7f65c27c86e8)
+ QEvent (0x0x7f65be1538a0) 0
+ primary-for QInputEvent (0x0x7f65c27c8888)
+
+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 (0x0x7f65c0093dd0) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f65c0093e38) 0
+ primary-for QSinglePointEvent (0x0x7f65c0093dd0)
+ QInputEvent (0x0x7f65c00e3c30) 0
+ primary-for QPointerEvent (0x0x7f65c0093e38)
+ QEvent (0x0x7f65be193780) 0
+ primary-for QInputEvent (0x0x7f65c00e3c30)
+
+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 (0x0x7f65c00e3c98) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f65c00e3d00) 0
+ primary-for QEnterEvent (0x0x7f65c00e3c98)
+ QPointerEvent (0x0x7f65c015b8f0) 0
+ primary-for QSinglePointEvent (0x0x7f65c00e3d00)
+ QInputEvent (0x0x7f65c015b958) 0
+ primary-for QPointerEvent (0x0x7f65c015b8f0)
+ QEvent (0x0x7f65be193c60) 0
+ primary-for QInputEvent (0x0x7f65c015b958)
+
+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 (0x0x7f65c015bbc8) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f65c015bc30) 0
+ primary-for QMouseEvent (0x0x7f65c015bbc8)
+ QPointerEvent (0x0x7f65c015bd68) 0
+ primary-for QSinglePointEvent (0x0x7f65c015bc30)
+ QInputEvent (0x0x7f65c015bf08) 0
+ primary-for QPointerEvent (0x0x7f65c015bd68)
+ QEvent (0x0x7f65be1aa420) 0
+ primary-for QInputEvent (0x0x7f65c015bf08)
+
+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 (0x0x7f65c0196208) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f65c0196270) 0
+ primary-for QHoverEvent (0x0x7f65c0196208)
+ QPointerEvent (0x0x7f65c0196340) 0
+ primary-for QSinglePointEvent (0x0x7f65c0196270)
+ QInputEvent (0x0x7f65c02226e8) 0
+ primary-for QPointerEvent (0x0x7f65c0196340)
+ QEvent (0x0x7f65be1aa9c0) 0
+ primary-for QInputEvent (0x0x7f65c02226e8)
+
+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 (0x0x7f65c0222750) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f65c0222888) 0
+ primary-for QWheelEvent (0x0x7f65c0222750)
+ QPointerEvent (0x0x7f65c0222a28) 0
+ primary-for QSinglePointEvent (0x0x7f65c0222888)
+ QInputEvent (0x0x7f65bff18410) 0
+ primary-for QPointerEvent (0x0x7f65c0222a28)
+ QEvent (0x0x7f65be1aade0) 0
+ primary-for QInputEvent (0x0x7f65bff18410)
+
+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 (0x0x7f65bff18478) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f65bfc98270) 0
+ primary-for QTabletEvent (0x0x7f65bff18478)
+ QPointerEvent (0x0x7f65bfc982d8) 0
+ primary-for QSinglePointEvent (0x0x7f65bfc98270)
+ QInputEvent (0x0x7f65bfc98410) 0
+ primary-for QPointerEvent (0x0x7f65bfc982d8)
+ QEvent (0x0x7f65be1c8300) 0
+ primary-for QInputEvent (0x0x7f65bfc98410)
+
+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 (0x0x7f65bfc985b0) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f65bfc98680) 0
+ primary-for QNativeGestureEvent (0x0x7f65bfc985b0)
+ QPointerEvent (0x0x7f65bfc986e8) 0
+ primary-for QSinglePointEvent (0x0x7f65bfc98680)
+ QInputEvent (0x0x7f65bfc98820) 0
+ primary-for QPointerEvent (0x0x7f65bfc986e8)
+ QEvent (0x0x7f65be1c8ba0) 0
+ primary-for QInputEvent (0x0x7f65bfc98820)
+
+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 (0x0x7f65bfc989c0) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f65bfc98bc8) 0
+ primary-for QKeyEvent (0x0x7f65bfc989c0)
+ QEvent (0x0x7f65be1e7180) 0
+ primary-for QInputEvent (0x0x7f65bfc98bc8)
+
+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 (0x0x7f65bfc98e38) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f65be1e7780) 0
+ primary-for QFocusEvent (0x0x7f65bfc98e38)
+
+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 (0x0x7f65bfcb7340) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f65be1e7ae0) 0
+ primary-for QPaintEvent (0x0x7f65bfcb7340)
+
+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 (0x0x7f65bfcb73a8) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f65be1e7de0) 0
+ primary-for QMoveEvent (0x0x7f65bfcb73a8)
+
+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 (0x0x7f65bfcb76e8) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f65be204180) 0
+ primary-for QExposeEvent (0x0x7f65bfcb76e8)
+
+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 (0x0x7f65bfcb7750) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f65be204420) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f65bfcb7750)
+
+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 (0x0x7f65bfa84000) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f65be204720) 0
+ primary-for QResizeEvent (0x0x7f65bfa84000)
+
+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 (0x0x7f65bfa84068) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f65be204a80) 0
+ primary-for QCloseEvent (0x0x7f65bfa84068)
+
+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 (0x0x7f65bfa84478) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f65be204ae0) 0
+ primary-for QIconDragEvent (0x0x7f65bfa84478)
+
+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 (0x0x7f65bfa844e0) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f65be204b40) 0
+ primary-for QShowEvent (0x0x7f65bfa844e0)
+
+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 (0x0x7f65bfaaa068) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f65be204ba0) 0
+ primary-for QHideEvent (0x0x7f65bfaaa068)
+
+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 (0x0x7f65bfaaa0d0) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f65bfaaa340) 0
+ primary-for QContextMenuEvent (0x0x7f65bfaaa0d0)
+ QEvent (0x0x7f65be204c00) 0
+ primary-for QInputEvent (0x0x7f65bfaaa340)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f65be2261e0) 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 (0x0x7f65bfaaa3a8) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f65be226180) 0
+ primary-for QInputMethodEvent (0x0x7f65bfaaa3a8)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f65be26f9c0) 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 (0x0x7f65bf28e410) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f65be26f960) 0
+ primary-for QInputMethodQueryEvent (0x0x7f65bf28e410)
+
+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 (0x0x7f65bec95208) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f65bdeb1ae0) 0
+ primary-for QDropEvent (0x0x7f65bec95208)
+
+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 (0x0x7f65bec95270) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f65bec952d8) 0
+ primary-for QDragMoveEvent (0x0x7f65bec95270)
+ QEvent (0x0x7f65bdec3240) 0
+ primary-for QDropEvent (0x0x7f65bec952d8)
+
+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 (0x0x7f65bec95340) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f65bec953a8) 0
+ primary-for QDragEnterEvent (0x0x7f65bec95340)
+ QDropEvent (0x0x7f65bec95410) 0
+ primary-for QDragMoveEvent (0x0x7f65bec953a8)
+ QEvent (0x0x7f65bdec36c0) 0
+ primary-for QDropEvent (0x0x7f65bec95410)
+
+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 (0x0x7f65bec95478) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f65bdec3720) 0
+ primary-for QDragLeaveEvent (0x0x7f65bec95478)
+
+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 (0x0x7f65bec954e0) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f65bdec3780) 0
+ primary-for QHelpEvent (0x0x7f65bec954e0)
+
+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 (0x0x7f65bec95548) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f65bdec3c60) 0
+ primary-for QStatusTipEvent (0x0x7f65bec95548)
+
+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 (0x0x7f65bec955b0) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f65bdec3f00) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f65bec955b0)
+
+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 (0x0x7f65bec95618) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f65bdee41e0) 0
+ primary-for QActionEvent (0x0x7f65bec95618)
+
+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 (0x0x7f65bec95680) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f65bdee4540) 0
+ primary-for QFileOpenEvent (0x0x7f65bec95680)
+
+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 (0x0x7f65bec956e8) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f65bdee4840) 0
+ primary-for QToolBarChangeEvent (0x0x7f65bec956e8)
+
+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 (0x0x7f65bec95750) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f65bdee4b40) 0
+ primary-for QShortcutEvent (0x0x7f65bec95750)
+
+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 (0x0x7f65bec957b8) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f65bdee4ea0) 0
+ primary-for QWindowStateChangeEvent (0x0x7f65bec957b8)
+
+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 (0x0x7f65bec95820) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f65bec95888) 0
+ primary-for QTouchEvent (0x0x7f65bec95820)
+ QInputEvent (0x0x7f65bec958f0) 0
+ primary-for QPointerEvent (0x0x7f65bec95888)
+ QEvent (0x0x7f65bdefe1e0) 0
+ primary-for QInputEvent (0x0x7f65bec958f0)
+
+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 (0x0x7f65bec95958) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f65bdefe540) 0
+ primary-for QScrollPrepareEvent (0x0x7f65bec95958)
+
+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 (0x0x7f65bec959c0) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f65bdefe960) 0
+ primary-for QScrollEvent (0x0x7f65bec959c0)
+
+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 (0x0x7f65bec95a28) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f65bdefed20) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f65bec95a28)
+
+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 (0x0x7f65bec95a90) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f65bdf1c0c0) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f65bec95a90)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f65bdf1c3c0) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f65bdf66540) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f65bdf66720) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f65bdfa37e0) 0
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7f65bdfe3000) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f65bdfe3060) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f65bdccfa80) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f65bdccfcc0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f65bdccfc60) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f65bdcd8a90) 0
+ QGradient (0x0x7f65bdcf9ba0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f65bdcd8af8) 0
+ QGradient (0x0x7f65bdcf9cc0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f65bdcd8b60) 0
+ QGradient (0x0x7f65bdcf9de0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f65bdcf9ea0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f65bdd7ff60) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f65bdd7ff00) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f65bddcb360) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f65bddf4060) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f65bde80618) 0
+ QTextFormat (0x0x7f65bda827e0) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f65bdae23a8) 0
+ QTextFormat (0x0x7f65bdadccc0) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f65bdb19000) 0
+ QTextFormat (0x0x7f65bdb16240) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f65bdb30bc8) 0
+ QTextCharFormat (0x0x7f65bdb30c30) 0
+ QTextFormat (0x0x7f65bdb3c120) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f65bdb58888) 0
+ QTextFormat (0x0x7f65bdb51f60) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f65bdb844e0) 0
+ QTextFrameFormat (0x0x7f65bdb84548) 0
+ QTextFormat (0x0x7f65bdb8b3c0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f65bdbb61a0) 0
+ QTextCharFormat (0x0x7f65bdbb6208) 0
+ QTextFormat (0x0x7f65bdbb3660) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f65bdbdfba0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f65bdc432a0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f65bdc436c0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f65bdc43660) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f65bd8b2780) 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 (0x0x7f65bd8b2c00) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f65bd8b2ea0) 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 (0x0x7f65bd8aee38) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f65bd8b2e40) 0
+ primary-for QTextDocument (0x0x7f65bd8aee38)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f65bd8ec780) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f65bd983ba0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f65bd983c00) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f65bd983c60) 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 (0x0x7f65bd98d270) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f65bd983b40) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f65bd98d270)
+
+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 (0x0x7f65bda27240) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f65bda27480) 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 (0x0x7f65bda274e0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f65bda27420) 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 (0x0x7f65bda27de0) 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 (0x0x7f65bda691e0) 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 (0x0x7f65bda69240) 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 (0x0x7f65bda692a0) 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 (0x0x7f65bda69300) 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 (0x0x7f65bda69360) 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 (0x0x7f65bda693c0) 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 (0x0x7f65bda69480) 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 (0x0x7f65bda694e0) 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 (0x0x7f65bda69540) 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 (0x0x7f65bda22750) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f65bda69a80) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f65bda22750)
+
+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 (0x0x7f65bda227b8) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f65bda69e40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f65bda227b8)
+
+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 (0x0x7f65bda22820) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f65bda22888) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f65bda22820)
+ QAccessibleEvent (0x0x7f65bd6992a0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f65bda22888)
+
+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 (0x0x7f65bda228f0) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f65bda22958) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f65bda228f0)
+ QAccessibleEvent (0x0x7f65bd699720) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f65bda22958)
+
+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 (0x0x7f65bda229c0) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f65bda22a28) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f65bda229c0)
+ QAccessibleEvent (0x0x7f65bd699b40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f65bda22a28)
+
+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 (0x0x7f65bda22a90) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f65bda22af8) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f65bda22a90)
+ QAccessibleEvent (0x0x7f65bd699f60) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f65bda22af8)
+
+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 (0x0x7f65bda22b60) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f65bd6b3420) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f65bda22b60)
+
+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 (0x0x7f65bda22bc8) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f65bd6b3840) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f65bda22bc8)
+
+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 (0x0x7f65bd6c7120) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f65bd6c73c0) 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 (0x0x7f65bda22c30) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f65bd6c7360) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f65bda22c30)
+
+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 (0x0x7f65bda22c98) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f65bd6c7480) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f65bda22c98)
+
+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 (0x0x7f65bda22d00) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f65bda22d68) 0
+ primary-for QAccessibleApplication (0x0x7f65bda22d00)
+ QAccessibleInterface (0x0x7f65bd6c74e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f65bda22d68)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f65bd6c75a0) 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 (0x0x7f65bda22dd0) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f65bd6c7540) 0
+ primary-for QAccessiblePlugin (0x0x7f65bda22dd0)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f65bd6c76c0) 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 (0x0x7f65bda22e38) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f65bd6c7660) 0
+ primary-for QAction (0x0x7f65bda22e38)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f65bd702000) 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 (0x0x7f65bda22ea0) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f65bd6c7f60) 0
+ primary-for QActionGroup (0x0x7f65bda22ea0)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f65bd7022a0) 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 (0x0x7f65bd702ba0) 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 (0x0x7f65bd7260d0) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f65bd726138) 0
+ primary-for QBitmap (0x0x7f65bd7260d0)
+ QPaintDevice (0x0x7f65bd746240) 0
+ primary-for QPixmap (0x0x7f65bd726138)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f65bd75db40) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f65bd7a3d80) 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 (0x0x7f65bd710e70) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f65bd7a3cc0) 0
+ primary-for QWindow (0x0x7f65bd710e70)
+ QSurface (0x0x7f65bd7a3d20) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f65bd7dc660) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f65bd7dc780) 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 (0x0x7f65bd7ab820) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f65bd7dc720) 0
+ primary-for QClipboard (0x0x7f65bd7ab820)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f65bd7dc8a0) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f65bd83a8a0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f65bd491660) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f65bd491720) 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 (0x0x7f65bd4953a8) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f65bd4916c0) 0
+ primary-for QDrag (0x0x7f65bd4953a8)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f65bd491900) 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 (0x0x7f65bd495410) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f65bd495478) 0
+ primary-for QFileSystemModel (0x0x7f65bd495410)
+ QObject (0x0x7f65bd4918a0) 0
+ primary-for QAbstractItemModel (0x0x7f65bd495478)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f65bd4da000) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f65bd4f2900) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f65bd520360) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f65bd5ad060) 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 (0x0x7f65bd5915b0) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f65bd5ad000) 0
+ primary-for QGenericPlugin (0x0x7f65bd5915b0)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f65bd5ad120) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f65bd5ad1e0) 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 (0x0x7f65bd591618) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f65bd5ad180) 0
+ primary-for QInputMethod (0x0x7f65bd591618)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f65bd5ad480) 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 (0x0x7f65bd591680) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f65bd5916e8) 0
+ primary-for QGuiApplication (0x0x7f65bd591680)
+ QObject (0x0x7f65bd5ad420) 0
+ primary-for QCoreApplication (0x0x7f65bd5916e8)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7f65bd5ad780) 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 (0x0x7f65bd5ad720) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f65bd5ad840) 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 (0x0x7f65bd5ad7e0) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f65bd5ad900) 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 (0x0x7f65bd591750) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f65bd5ad8a0) 0
+ primary-for QIconEnginePlugin (0x0x7f65bd591750)
+
+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 (0x0x7f65bd5ad9c0) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f65bd5adc00) 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 (0x0x7f65bd5917b8) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f65bd5adba0) 0
+ primary-for QImageIOPlugin (0x0x7f65bd5917b8)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f65bd60e0c0) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f65bd60e180) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f65bd60e240) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f65bd65af60) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f65bd2cc4e0) 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 (0x0x7f65bd2d5000) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f65bd2cc480) 0
+ primary-for QMovie (0x0x7f65bd2d5000)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f65bd2cc8a0) 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 (0x0x7f65bd2b2700) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f65bd2cc7e0) 0
+ primary-for QOffscreenSurface (0x0x7f65bd2b2700)
+ QSurface (0x0x7f65bd2cc840) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f65bd2ccb40) 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 (0x0x7f65bd2d5068) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f65bd2ccae0) 0
+ primary-for QOpenGLContextGroup (0x0x7f65bd2d5068)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f65bd2ccd20) 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 (0x0x7f65bd2d50d0) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f65bd2cccc0) 0
+ primary-for QOpenGLContext (0x0x7f65bd2d50d0)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7f65bd2ccf60) 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 (0x0x7f65bd2ccf00) 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 (0x0x7f65bd1eb060) 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 (0x0x7f65bd1eb000) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f65bd1eb0c0) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f65bd1eb720) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f65bd1eb6c0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f65bd2d54e0) 0
+ QOpenGLFunctions (0x0x7f65bce83ea0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f65bceda240) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f65bd2d5548) 0
+ QOpenGLFunctionsPrivate (0x0x7f65bceda1e0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f65bcfa5f00) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f65bd02d540) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f65bcce5540) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f65bcce54e0) 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 (0x0x7f65bcd613a8) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f65bcd5dae0) 0
+ primary-for QPagedPaintDevice (0x0x7f65bcd613a8)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f65bcd5dc60) 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 (0x0x7f65bcca7f50) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f65bcd74000) 0
+ primary-for QPaintDeviceWindow (0x0x7f65bcca7f50)
+ QObject (0x0x7f65bcd5db40) 0
+ primary-for QWindow (0x0x7f65bcd74000)
+ QSurface (0x0x7f65bcd5dba0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f65bcd5dc00) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f65bcd5de40) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f65bcd5dde0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f65bcb72a20) 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 (0x0x7f65bcbb4240) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f65bcbb4840) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f65bcc3f540) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f65bcc3f4e0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f65bc8f4840) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f65bc921000) 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 (0x0x7f65bcc7ea80) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f65bc8f4f60) 0
+ primary-for QPdfWriter (0x0x7f65bcc7ea80)
+ QPagedPaintDevice (0x0x7f65bc8ff1a0) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f65bc8f44e0) 16
+ primary-for QPagedPaintDevice (0x0x7f65bc8ff1a0)
+
+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 (0x0x7f65bc8ff208) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f65bc9211e0) 0
+ primary-for QPicture (0x0x7f65bc8ff208)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f65bc960cc0) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f65bc960c60) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f65bc9b7f60) 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 (0x0x7f65bc9bf820) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f65bc98d690) 0
+ primary-for QRasterWindow (0x0x7f65bc9bf820)
+ QWindow (0x0x7f65bc98d700) 0
+ primary-for QPaintDeviceWindow (0x0x7f65bc98d690)
+ QObject (0x0x7f65bc9b7e40) 0
+ primary-for QWindow (0x0x7f65bc98d700)
+ QSurface (0x0x7f65bc9b7ea0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f65bc9b7f00) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f65bc9d4c60) 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 (0x0x7f65bc9bf8f0) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f65bc9d4c00) 0
+ primary-for QSessionManager (0x0x7f65bc9bf8f0)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f65bc9d4e40) 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 (0x0x7f65bc9bf958) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f65bc9d4de0) 0
+ primary-for QShortcut (0x0x7f65bc9bf958)
+
+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 (0x0x7f65bca0d360) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f65bc6da360) 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 (0x0x7f65bca7b2d8) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f65bca7b340) 0
+ primary-for QStandardItemModel (0x0x7f65bca7b2d8)
+ QObject (0x0x7f65bc6da300) 0
+ primary-for QAbstractItemModel (0x0x7f65bca7b340)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f65bc6da6c0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f65bc78b480) 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 (0x0x7f65bc78d068) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f65bc78b420) 0
+ primary-for QStyleHints (0x0x7f65bc78d068)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f65bc78b660) 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 (0x0x7f65bc78d0d0) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f65bc78b600) 0
+ primary-for QTextObject (0x0x7f65bc78d0d0)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f65bc78b840) 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 (0x0x7f65bc78d138) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f65bc78d1a0) 0
+ primary-for QTextBlockGroup (0x0x7f65bc78d138)
+ QObject (0x0x7f65bc78b7e0) 0
+ primary-for QTextObject (0x0x7f65bc78d1a0)
+
+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 (0x0x7f65bc78b9c0) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f65bc78ba80) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f65bc78bae0) 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 (0x0x7f65bc78d208) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f65bc78d270) 0
+ primary-for QTextFrame (0x0x7f65bc78d208)
+ QObject (0x0x7f65bc78ba20) 0
+ primary-for QTextObject (0x0x7f65bc78d270)
+
+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 (0x0x7f65bc804960) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f65bc804a20) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f65bc8049c0) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f65bc48e2a0) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f65bc4cd120) 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 (0x0x7f65bc4c4410) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f65bc4cd0c0) 0
+ primary-for QSyntaxHighlighter (0x0x7f65bc4c4410)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f65bc4cd2a0) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f65bc4cd300) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f65bc4cd3c0) 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 (0x0x7f65bc4c4478) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f65bc4c44e0) 0
+ primary-for QTextList (0x0x7f65bc4c4478)
+ QTextObject (0x0x7f65bc4c4548) 0
+ primary-for QTextBlockGroup (0x0x7f65bc4c44e0)
+ QObject (0x0x7f65bc4cd360) 0
+ primary-for QTextObject (0x0x7f65bc4c4548)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f65bc4cd780) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f65bc509000) 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 (0x0x7f65bc4c45b0) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f65bc4c4618) 0
+ primary-for QTextTable (0x0x7f65bc4c45b0)
+ QTextObject (0x0x7f65bc4c4680) 0
+ primary-for QTextFrame (0x0x7f65bc4c4618)
+ QObject (0x0x7f65bc4cdf60) 0
+ primary-for QTextObject (0x0x7f65bc4c4680)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f65bc5093c0) 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 (0x0x7f65bc4c46e8) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f65bc509360) 0
+ primary-for QUndoGroup (0x0x7f65bc4c46e8)
+
+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 (0x0x7f65bc509540) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f65bc509600) 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 (0x0x7f65bc4c4750) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f65bc5095a0) 0
+ primary-for QUndoStack (0x0x7f65bc4c4750)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f65bc5097e0) 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 (0x0x7f65bc4c47b8) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f65bc509780) 0
+ primary-for QValidator (0x0x7f65bc4c47b8)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f65bc509a80) 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 (0x0x7f65bc4c4820) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f65bc4c4888) 0
+ primary-for QIntValidator (0x0x7f65bc4c4820)
+ QObject (0x0x7f65bc509a20) 0
+ primary-for QValidator (0x0x7f65bc4c4888)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f65bc509c60) 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 (0x0x7f65bc4c48f0) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f65bc4c4958) 0
+ primary-for QDoubleValidator (0x0x7f65bc4c48f0)
+ QObject (0x0x7f65bc509c00) 0
+ primary-for QValidator (0x0x7f65bc4c4958)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f65bc56f060) 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 (0x0x7f65bc4c49c0) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f65bc4c4a28) 0
+ primary-for QRegularExpressionValidator (0x0x7f65bc4c49c0)
+ QObject (0x0x7f65bc56f000) 0
+ primary-for QValidator (0x0x7f65bc4c4a28)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f65bc56f1e0) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f65bc665300) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f65bc2d4b40) 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 (0x0x7f65bc2d3e38) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7f65bc2d4ae0) 0
+ primary-for QAbstractNetworkCache (0x0x7f65bc2d3e38)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f65bc2d4d80) 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 (0x0x7f65bc2d3ea0) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7f65bc5ddee0) 0
+ primary-for QAbstractSocket (0x0x7f65bc2d3ea0)
+ QObject (0x0x7f65bc2d4cc0) 0
+ primary-for QIODevice (0x0x7f65bc5ddee0)
+ QIODeviceBase (0x0x7f65bc2d4d20) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f65bc421060) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f65bc421120) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f65bc08b8a0) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f65bc10d060) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f65bc176720) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f65bc1f70c0) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f65bc25ab40) 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 (0x0x7f65bc257f08) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7f65bc25aae0) 0
+ primary-for QDnsLookup (0x0x7f65bc257f08)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f65bc25ae40) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f65bc25af60) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f65bbf0cea0) 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 (0x0x7f65bbf1ac30) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7f65bbf1ac98) 0
+ primary-for QTcpSocket (0x0x7f65bbf1ac30)
+ QIODevice (0x0x7f65bc272bd0) 0
+ primary-for QAbstractSocket (0x0x7f65bbf1ac98)
+ QObject (0x0x7f65bbf0cde0) 0
+ primary-for QIODevice (0x0x7f65bc272bd0)
+ QIODeviceBase (0x0x7f65bbf0ce40) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f65bbf36480) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f65bbffc780) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f65bbdfe660) 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 (0x0x7f65bbde9f08) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7f65bbde9f70) 0
+ primary-for QSslSocket (0x0x7f65bbde9f08)
+ QAbstractSocket (0x0x7f65bbe1d000) 0
+ primary-for QTcpSocket (0x0x7f65bbde9f70)
+ QIODevice (0x0x7f65bbd9fa80) 0
+ primary-for QAbstractSocket (0x0x7f65bbe1d000)
+ QObject (0x0x7f65bbdfe5a0) 0
+ primary-for QIODevice (0x0x7f65bbd9fa80)
+ QIODeviceBase (0x0x7f65bbdfe600) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f65bbdfe840) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f65bbdfe8a0) 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 (0x0x7f65bbe1d068) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7f65bbdfe7e0) 0
+ primary-for QDtlsClientVerifier (0x0x7f65bbe1d068)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f65bbdfea80) 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 (0x0x7f65bbe1d0d0) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7f65bbdfea20) 0
+ primary-for QDtls (0x0x7f65bbe1d0d0)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f65bbdfec00) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f65bbaf0120) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f65bbb5bc60) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f65bbbed5a0) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f65bbc58d20) 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 (0x0x7f65bbc6c068) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7f65bbc58cc0) 0
+ primary-for QHttpMultiPart (0x0x7f65bbc6c068)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f65bbc58f00) 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 (0x0x7f65bbc6c0d0) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7f65bbc58ea0) 0
+ primary-for QLocalServer (0x0x7f65bbc6c0d0)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f65bb88b6c0) 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 (0x0x7f65bbc6c270) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7f65bbbf6a10) 0
+ primary-for QLocalSocket (0x0x7f65bbc6c270)
+ QObject (0x0x7f65bb88b600) 0
+ primary-for QIODevice (0x0x7f65bbbf6a10)
+ QIODeviceBase (0x0x7f65bb88b660) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f65bb88bcc0) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f65bb9f2240) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f65bb6ecb40) 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 (0x0x7f65bb703e38) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7f65bb6ecae0) 0
+ primary-for QNetworkAccessManager (0x0x7f65bb703e38)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f65bb6eccc0) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f65bb794d80) 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 (0x0x7f65bb792c98) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7f65bb794d20) 0
+ primary-for QNetworkCookieJar (0x0x7f65bb792c98)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f65bb794f00) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f65bb831720) 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 (0x0x7f65bb825c30) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7f65bb825c98) 0
+ primary-for QNetworkDiskCache (0x0x7f65bb825c30)
+ QObject (0x0x7f65bb8316c0) 0
+ primary-for QAbstractNetworkCache (0x0x7f65bb825c98)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7f65bb831900) 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 (0x0x7f65bb825d00) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+ QObject (0x0x7f65bb8318a0) 0
+ primary-for QNetworkInformation (0x0x7f65bb825d00)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f65bb4ad000) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f65bb282a80) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f65bb3bc000) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f65bb432780) 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 (0x0x7f65bb0d1240) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f65bb0d1840) 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 (0x0x7f65bb0b7a90) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7f65bb08e930) 0
+ primary-for QNetworkReply (0x0x7f65bb0b7a90)
+ QObject (0x0x7f65bb0d1780) 0
+ primary-for QIODevice (0x0x7f65bb08e930)
+ QIODeviceBase (0x0x7f65bb0d17e0) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f65bb16aba0) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f65bb1caa80) 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 (0x0x7f65bb1c1ea0) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7f65bb1caa20) 0
+ primary-for QTcpServer (0x0x7f65bb1c1ea0)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f65bb1cac00) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f65bb2733c0) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f65bb04cd20) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f65bacb2a80) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f65bacf5cc0) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f65bad8d540) 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 (0x0x7f65bad8b680) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7f65bad8b6e8) 0
+ primary-for QUdpSocket (0x0x7f65bad8b680)
+ QIODevice (0x0x7f65bacb3af0) 0
+ primary-for QAbstractSocket (0x0x7f65bad8b6e8)
+ QObject (0x0x7f65bad8d480) 0
+ primary-for QIODevice (0x0x7f65bacb3af0)
+ QIODeviceBase (0x0x7f65bad8d4e0) 0 empty
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f65bad8d780) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7f65bae23cc0) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7f65bae522a0) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7f65bae52300) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7f65bae52420) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7f65bad8bf70) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7f65bae524e0) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7f65bad8bea0) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7f65bae525a0) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7f65bae6b000) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7f65bae52660) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7f65bae526c0) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7f65bae52360) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7f65bab87900) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f65bab87c00) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f65bab87ea0) 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 (0x0x7f65bab1add0) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7f65bab87e40) 0
+ primary-for QJSEngine (0x0x7f65bab1add0)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f65babe1840) 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 (0x0x7f65babe1a20) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f65bac4f540) 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 (0x0x7f65bac4fb40) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=170 base align=8
+QQmlPrivate::RegisterType (0x0x7f65ba8b6360) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=152 align=8
+ base size=152 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f65ba8b63c0) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f65ba8b6420) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f65ba8b6480) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f65ba8b64e0) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f65ba8b6840) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f65ba8b6900) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f65ba8b6960) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f65ba8b69c0) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f65ba8b6a20) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7f65ba8b6a80) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7f65ba8b6ae0) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f65ba90d4e0) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f65ba90d540) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f65ba90d5a0) 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 (0x0x7f65ba6daf00) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f65ba6daf60) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f65ba73c7e0) 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 (0x0x7f65ba7432d8) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+ QObject (0x0x7f65ba73c780) 0
+ primary-for QQmlImageProviderBase (0x0x7f65ba7432d8)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f65ba73ccc0) 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 (0x0x7f65ba743478) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7f65ba7434e0) 0
+ primary-for QQmlEngine (0x0x7f65ba743478)
+ QObject (0x0x7f65ba73cc60) 0
+ primary-for QJSEngine (0x0x7f65ba7434e0)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f65ba7ae000) 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 (0x0x7f65ba743548) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7f65ba7435b0) 0
+ primary-for QQmlApplicationEngine (0x0x7f65ba743548)
+ QJSEngine (0x0x7f65ba743618) 0
+ primary-for QQmlEngine (0x0x7f65ba7435b0)
+ QObject (0x0x7f65ba73cf60) 0
+ primary-for QJSEngine (0x0x7f65ba743618)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f65ba7ae1e0) 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 (0x0x7f65ba743680) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7f65ba7ae180) 0
+ primary-for QQmlComponent (0x0x7f65ba743680)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f65ba7aef60) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f65ba81f000) 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 (0x0x7f65ba7437b8) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7f65ba7aef00) 0
+ primary-for QQmlContext (0x0x7f65ba7437b8)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f65ba81f660) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f65ba81fc60) 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 (0x0x7f65ba7438f0) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7f65ba81fc00) 0
+ primary-for QQmlExpression (0x0x7f65ba7438f0)
+
+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 (0x0x7f65ba81fde0) 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 (0x0x7f65ba743958) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7f65ba81fe40) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f65ba743958)
+
+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 (0x0x7f65ba81fea0) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f65ba49b480) 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 (0x0x7f65ba74abd0) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7f65ba49b3c0) 0
+ primary-for QQmlExtensionPlugin (0x0x7f65ba74abd0)
+ QQmlExtensionInterface (0x0x7f65ba7439c0) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+ QQmlTypesExtensionInterface (0x0x7f65ba49b420) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f65ba7439c0)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f65ba49b6c0) 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 (0x0x7f65ba74ac40) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+ QObject (0x0x7f65ba49b600) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f65ba74ac40)
+ QQmlEngineExtensionInterface (0x0x7f65ba49b660) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f65ba49b780) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f65ba49b840) 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 (0x0x7f65ba743a90) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7f65ba49b7e0) 0
+ primary-for QQmlFileSelector (0x0x7f65ba743a90)
+
+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 (0x0x7f65ba49b9c0) 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 (0x0x7f65ba49ba20) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f65ba743af8) 0
+ QDebug (0x0x7f65ba743b60) 0
+ QIODeviceBase (0x0x7f65ba49ba80) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f65ba5871e0) 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 (0x0x7f65ba587240) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f65ba5872a0) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f65ba5e54e0) 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 (0x0x7f65ba5ee0d0) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7f65ba5e5480) 0
+ primary-for QQmlPropertyMap (0x0x7f65ba5ee0d0)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f65ba5e56c0) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f65ba5e5c00) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f65ba2d3f60) 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 (0x0x7f65ba2d8680) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f65ba2d3f00) 0
+ primary-for QOpenGLDebugLogger (0x0x7f65ba2d8680)
+
+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 (0x0x7f65ba3b66c0) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f65ba3b6960) 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 (0x0x7f65ba2d8750) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f65ba3b69c0) 0
+ primary-for QOpenGLPaintDevice (0x0x7f65ba2d8750)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f65ba3b6c00) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f65ba45c300) 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 (0x0x7f65ba462138) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f65ba45c2a0) 0
+ primary-for QOpenGLShader (0x0x7f65ba462138)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f65ba45c8a0) 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 (0x0x7f65ba4622d8) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f65ba45c840) 0
+ primary-for QOpenGLShaderProgram (0x0x7f65ba4622d8)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f65ba45ca20) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f65ba167c00) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f65ba167e40) 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 (0x0x7f65ba462478) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f65ba167de0) 0
+ primary-for QOpenGLTimerQuery (0x0x7f65ba462478)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f65ba1dc060) 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 (0x0x7f65ba4624e0) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f65ba1dc000) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f65ba4624e0)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f65ba1dc1e0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f65b9ebf240) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f65b9ebf420) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f65b9ebf480) 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 (0x0x7f65b9ebf660) 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 (0x0x7f65b9ebf840) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f65b9e8dd68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9ebf7e0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f65b9ebfba0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f65b9e8ddd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9ebfb40) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f65b9ebff00) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f65b9e8de38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9ebfea0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f65b9efc2a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f65b9e8dea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9efc240) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f65b9efc600) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f65b9e8df08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9efc5a0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f65b9efc960) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f65b9e8df70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9efc900) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f65b9efccc0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f65b9f19000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9efcc60) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f65b9f36060) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f65b9f19068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f36000) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f65b9f363c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f65b9f190d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f36360) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f65b9f36720) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f65b9f19138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f366c0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f65b9f36a80) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f65b9f191a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f36a20) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f65b9f36de0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f65b9f19208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f36d80) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f65b9f7c180) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f65b9f19270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f7c120) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f65b9f7c4e0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f65b9f192d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f7c480) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f65b9f7c840) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f65b9f19340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f7c7e0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f65b9f7cba0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f65b9f193a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f7cb40) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f65b9f7cf00) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f65b9f19410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9f7cea0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f65b9fd12a0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f65b9f19478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9fd1240) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f65b9fd1600) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f65b9f194e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9fd15a0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f65b9fd1960) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f65b9f19548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9fd1900) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f65b9fd1cc0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f65b9f195b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9fd1c60) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f65ba052060) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f65b9f19618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65ba052000) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f65ba0523c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f65b9f19680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65ba052360) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f65ba052720) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f65b9f196e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65ba0526c0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f65ba052a80) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f65b9f19750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65ba052a20) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f65ba052de0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f65b9f197b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65ba052d80) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f65b9c91180) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f65b9f19820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f65b9c91120) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f65b9c91480) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f65b9c91600) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f65b9c91720) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f65b9c91780) 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 (0x0x7f65b9f19888) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f65b9c916c0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f65b9f19888)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f65b9c91de0) 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 (0x0x7f65b9f19958) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f65ba22bee0) 0
+ primary-for QOpenGLWindow (0x0x7f65b9f19958)
+ QWindow (0x0x7f65ba22bf50) 0
+ primary-for QPaintDeviceWindow (0x0x7f65ba22bee0)
+ QObject (0x0x7f65b9c91cc0) 0
+ primary-for QWindow (0x0x7f65ba22bf50)
+ QSurface (0x0x7f65b9c91d20) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f65b9c91d80) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f65b9cd9000) 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 (0x0x7f65b9f19a28) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+ QObject (0x0x7f65b9c91f60) 0
+ primary-for QQuickTransform (0x0x7f65b9f19a28)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f65b9cd9240) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f65b9cd92a0) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f65b9cd9300) 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 (0x0x7f65b9cc3070) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+ QObject (0x0x7f65b9cd9180) 0
+ primary-for QQuickItem (0x0x7f65b9cc3070)
+ QQmlParserStatus (0x0x7f65b9cd91e0) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f65b9e1f000) 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 (0x0x7f65b9e1f060) 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 (0x0x7f65b9e174e0) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+ QQuickItem (0x0x7f65b9e141c0) 0
+ primary-for QQuickFramebufferObject (0x0x7f65b9e174e0)
+ QObject (0x0x7f65b9de6f00) 0
+ primary-for QQuickItem (0x0x7f65b9e141c0)
+ QQmlParserStatus (0x0x7f65b9de6f60) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7f65b9e1f1e0) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7f65b9e1f240) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f65b9e1f300) 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 (0x0x7f65b9e17548) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+ QObject (0x0x7f65b9e1f2a0) 0
+ primary-for QQuickTextureFactory (0x0x7f65b9e17548)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f65b9e1f420) 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 (0x0x7f65b9e175b0) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+ QObject (0x0x7f65b9e1f3c0) 0
+ primary-for QQuickImageResponse (0x0x7f65b9e175b0)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7f65b9e1f600) 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 (0x0x7f65b9e17618) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+ QQmlImageProviderBase (0x0x7f65b9e17680) 0
+ primary-for QQuickImageProvider (0x0x7f65b9e17618)
+ QObject (0x0x7f65b9e1f5a0) 0
+ primary-for QQmlImageProviderBase (0x0x7f65b9e17680)
+
+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 (0x0x7f65b9e176e8) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+ QQuickImageProvider (0x0x7f65b9e17750) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f65b9e176e8)
+ QQmlImageProviderBase (0x0x7f65b9e177b8) 0
+ primary-for QQuickImageProvider (0x0x7f65b9e17750)
+ QObject (0x0x7f65b9e1f6c0) 0
+ primary-for QQmlImageProviderBase (0x0x7f65b9e177b8)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f65b9e1f780) 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 (0x0x7f65b9e17820) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+ QObject (0x0x7f65b9e1f720) 0
+ primary-for QQuickItemGrabResult (0x0x7f65b9e17820)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f65b9e1f9c0) 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 (0x0x7f65b9e17888) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+ QQuickItem (0x0x7f65b9e14230) 0
+ primary-for QQuickPaintedItem (0x0x7f65b9e17888)
+ QObject (0x0x7f65b9e1f900) 0
+ primary-for QQuickItem (0x0x7f65b9e14230)
+ QQmlParserStatus (0x0x7f65b9e1f960) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f65b9abd120) 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 (0x0x7f65b9e17a28) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+ QObject (0x0x7f65b9abd0c0) 0
+ primary-for QQuickRenderControl (0x0x7f65b9e17a28)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7f65b9abd300) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f65b9abd480) 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 (0x0x7f65b9e17a90) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+ QObject (0x0x7f65b9abd420) 0
+ primary-for QQuickTextDocument (0x0x7f65b9e17a90)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f65b9b28cc0) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f65b9b28d20) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f65b9b28d80) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f65b9b28de0) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f65b9b28e40) 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 (0x0x7f65b9b28c60) 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 (0x0x7f65b9b7a840) 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 (0x0x7f65b9b56548) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+ QSGNode (0x0x7f65b9bef0c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f65b9b56548)
+
+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 (0x0x7f65b9b565b0) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+ QSGBasicGeometryNode (0x0x7f65b9b56618) 0
+ primary-for QSGGeometryNode (0x0x7f65b9b565b0)
+ QSGNode (0x0x7f65b9bef360) 0
+ primary-for QSGBasicGeometryNode (0x0x7f65b9b56618)
+
+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 (0x0x7f65b9b56680) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+ QSGBasicGeometryNode (0x0x7f65b9b566e8) 0
+ primary-for QSGClipNode (0x0x7f65b9b56680)
+ QSGNode (0x0x7f65b9bef540) 0
+ primary-for QSGBasicGeometryNode (0x0x7f65b9b566e8)
+
+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 (0x0x7f65b9b56750) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+ QSGNode (0x0x7f65b9bef660) 0
+ primary-for QSGTransformNode (0x0x7f65b9b56750)
+
+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 (0x0x7f65b9b567b8) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+ QSGNode (0x0x7f65b9bef780) 0
+ primary-for QSGRootNode (0x0x7f65b9b567b8)
+
+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 (0x0x7f65b9c450d0) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+ QSGNode (0x0x7f65b9c3d180) 0
+ primary-for QSGOpacityNode (0x0x7f65b9c450d0)
+
+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 (0x0x7f65b9c3d2a0) 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 (0x0x7f65b9c3d9c0) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f65b995f240) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f65b995f2a0) 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 (0x0x7f65b9c453a8) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+ QWindow (0x0x7f65b98e2310) 0
+ primary-for QQuickWindow (0x0x7f65b9c453a8)
+ QObject (0x0x7f65b995f180) 0
+ primary-for QWindow (0x0x7f65b98e2310)
+ QSurface (0x0x7f65b995f1e0) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f65b99e9b40) 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 (0x0x7f65b99e4e38) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+ QQuickWindow (0x0x7f65b99e4ea0) 0
+ primary-for QQuickView (0x0x7f65b99e4e38)
+ QWindow (0x0x7f65b98e2bd0) 0
+ primary-for QQuickWindow (0x0x7f65b99e4ea0)
+ QObject (0x0x7f65b99e9a80) 0
+ primary-for QWindow (0x0x7f65b98e2bd0)
+ QSurface (0x0x7f65b99e9ae0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f65b99e9e40) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f65b99e9f00) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=36 align=4
+ base size=36 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7f65b9a2c180) 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 (0x0x7f65b99e9ea0) 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 (0x0x7f65b9a2cf00) 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 (0x0x7f65b9a2e410) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+ QSGMaterial (0x0x7f65b97343c0) 0
+ primary-for QSGFlatColorMaterial (0x0x7f65b9a2e410)
+
+Class QNativeInterface::QSGOpenGLTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGOpenGLTexture::TypeInfo (0x0x7f65b97344e0) 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 (0x0x7f65b9734480) 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 (0x0x7f65b9734600) 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 (0x0x7f65b97345a0) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f65b9734720) 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 (0x0x7f65b9a2e478) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+ QObject (0x0x7f65b97346c0) 0
+ primary-for QSGTexture (0x0x7f65b9a2e478)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f65b97349c0) 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 (0x0x7f65b9a2e4e0) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+ QSGTexture (0x0x7f65b9a2e548) 0
+ primary-for QSGDynamicTexture (0x0x7f65b9a2e4e0)
+ QObject (0x0x7f65b9734960) 0
+ primary-for QSGTexture (0x0x7f65b9a2e548)
+
+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 (0x0x7f65b9a2e5b0) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+ QSGGeometryNode (0x0x7f65b9a2e618) 0
+ primary-for QSGImageNode (0x0x7f65b9a2e5b0)
+ QSGBasicGeometryNode (0x0x7f65b9a2e680) 0
+ primary-for QSGGeometryNode (0x0x7f65b9a2e618)
+ QSGNode (0x0x7f65b9734a80) 0
+ primary-for QSGBasicGeometryNode (0x0x7f65b9a2e680)
+
+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 (0x0x7f65b9a2e820) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+ QSGGeometryNode (0x0x7f65b9a2e888) 0
+ primary-for QSGNinePatchNode (0x0x7f65b9a2e820)
+ QSGBasicGeometryNode (0x0x7f65b9a2e8f0) 0
+ primary-for QSGGeometryNode (0x0x7f65b9a2e888)
+ QSGNode (0x0x7f65b9734f60) 0
+ primary-for QSGBasicGeometryNode (0x0x7f65b9a2e8f0)
+
+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 (0x0x7f65b9a2e958) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+ QSGGeometryNode (0x0x7f65b9a2e9c0) 0
+ primary-for QSGRectangleNode (0x0x7f65b9a2e958)
+ QSGBasicGeometryNode (0x0x7f65b9a2ea28) 0
+ primary-for QSGGeometryNode (0x0x7f65b9a2e9c0)
+ QSGNode (0x0x7f65b9812000) 0
+ primary-for QSGBasicGeometryNode (0x0x7f65b9a2ea28)
+
+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 (0x0x7f65b9812120) 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 (0x0x7f65b9a2ea90) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+ QSGNode (0x0x7f65b98120c0) 0
+ primary-for QSGRenderNode (0x0x7f65b9a2ea90)
+
+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 (0x0x7f65b9a2ed68) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+ QSGGeometryNode (0x0x7f65b9a2edd0) 0
+ primary-for QSGSimpleRectNode (0x0x7f65b9a2ed68)
+ QSGBasicGeometryNode (0x0x7f65b9a2ee38) 0
+ primary-for QSGGeometryNode (0x0x7f65b9a2edd0)
+ QSGNode (0x0x7f65b9812900) 0
+ primary-for QSGBasicGeometryNode (0x0x7f65b9a2ee38)
+
+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 (0x0x7f65b9a2eea0) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+ QSGMaterial (0x0x7f65b98129c0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f65b9a2eea0)
+
+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 (0x0x7f65b9a2ef08) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+ QSGOpaqueTextureMaterial (0x0x7f65b9a2ef70) 0
+ primary-for QSGTextureMaterial (0x0x7f65b9a2ef08)
+ QSGMaterial (0x0x7f65b9812e40) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f65b9a2ef70)
+
+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 (0x0x7f65b94cb000) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+ QSGGeometryNode (0x0x7f65b94cb068) 0
+ primary-for QSGSimpleTextureNode (0x0x7f65b94cb000)
+ QSGBasicGeometryNode (0x0x7f65b94cb0d0) 0
+ primary-for QSGGeometryNode (0x0x7f65b94cb068)
+ QSGNode (0x0x7f65b9812ea0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f65b94cb0d0)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f65b94d5660) 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 (0x0x7f65b94cb270) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+ QObject (0x0x7f65b94d5600) 0
+ primary-for QSGTextureProvider (0x0x7f65b94cb270)
+
+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 (0x0x7f65b94cb2d8) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+ QSGMaterial (0x0x7f65b94d5720) 0
+ primary-for QSGVertexColorMaterial (0x0x7f65b94cb2d8)
+
+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 (0x0x7f65b9541660) 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 (0x0x7f65b95419c0) 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 (0x0x7f65b9541ba0) 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 (0x0x7f65b9541f00) 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 (0x0x7f65b956a0c0) 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 (0x0x7f65b956a420) 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 (0x0x7f65b956a5a0) 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 (0x0x7f65b956a900) 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 (0x0x7f65b956aae0) 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 (0x0x7f65b956ae40) 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 (0x0x7f65b959f060) 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 (0x0x7f65b959f3c0) 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 (0x0x7f65b959f5a0) 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 (0x0x7f65b959f900) 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 (0x0x7f65b959fae0) 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 (0x0x7f65b959fe40) 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 (0x0x7f65b95f8720) 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 (0x0x7f65b95f8a80) 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 (0x0x7f65b95f8c00) 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 (0x0x7f65b95f8f60) 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 (0x0x7f65b9621120) 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 (0x0x7f65b9621480) 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 (0x0x7f65b9621600) 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 (0x0x7f65b9621960) 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 (0x0x7f65b9621ae0) 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 (0x0x7f65b9621e40) 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 (0x0x7f65b964f000) 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 (0x0x7f65b964f360) 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 (0x0x7f65b964f4e0) 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 (0x0x7f65b964f840) 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 (0x0x7f65b964f9c0) 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 (0x0x7f65b964fd20) 0 empty
+
diff --git a/tests/auto/bic/data/QtQuickTest.6.2.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtQuickTest.6.2.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..8e988d63c3
--- /dev/null
+++ b/tests/auto/bic/data/QtQuickTest.6.2.0.linux-gcc-amd64.txt
@@ -0,0 +1,5486 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f833d266a20) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f833cdbf240) 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 (0x0x7f833cdbf480) 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 (0x0x7f833cdf35a0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f833ce1ed80) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f833a89dba0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f833a89dc60) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f833a8ce180) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f833a8ce1e0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f833a8ce240) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f833a8ce2a0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f833a8ce300) 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 (0x0x7f833a8ce3c0) 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 (0x0x7f833a8ce480) 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 (0x0x7f833a8ce540) 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 (0x0x7f833a8ce600) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f833a8ce960) 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 (0x0x7f833a8cecc0) 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 (0x0x7f833a8ced20) 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 (0x0x7f833a91a000) 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 (0x0x7f833a91a060) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f833a91a8a0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f833a96de40) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f833a914d00) 0 empty
+ std::__nonesuch (0x0x7f833a99b360) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f833aa180c0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f833aa183c0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f833aa18420) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f833aa80180) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f833aa801e0) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f833aa21270) 0 empty
+ std::input_iterator_tag (0x0x7f833aa80240) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f833aa212d8) 0 empty
+ std::forward_iterator_tag (0x0x7f833aa21340) 0 empty
+ std::input_iterator_tag (0x0x7f833aa802a0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f833aa213a8) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f833aa21410) 0 empty
+ std::forward_iterator_tag (0x0x7f833aa21478) 0 empty
+ std::input_iterator_tag (0x0x7f833aa80300) 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 (0x0x7f833a737000) 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 (0x0x7f833a737120) 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 (0x0x7f833a737420) 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 (0x0x7f833a737720) 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 (0x0x7f833a737840) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f833a7f3060) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f833a7f3360) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f833a7f33c0) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f833a7f3480) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f833a7f34e0) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f833a7f3540) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f833a7f35a0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f833a7f3600) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f833a7f38a0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f833a7f3b40) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f833a7f3ba0) 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 (0x0x7f833a4b5960) 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 (0x0x7f833aa21820) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f833a4b5b40) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f833aa21820)
+
+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 (0x0x7f833a4b5d20) 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 (0x0x7f833aa21888) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f833a4f0120) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f833aa21888)
+
+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 (0x0x7f833aa218f0) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f833a4f0300) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f833aa218f0)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f833a4f04e0) 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 (0x0x7f833a4f0a20) 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 (0x0x7f833aa21958) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f833a524120) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f833aa21958)
+
+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 (0x0x7f833aa219c0) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f833aa21a28) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f833aa219c0)
+ std::exception (0x0x7f833a524300) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f833aa21a28)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f833a5244e0) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f833a524720) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f833a5a8ea0) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f833a1c82a0) 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 (0x0x7f833a1c8360) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f833a225240) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f833a225300) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f833a225360) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f833a2253c0) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f833a225420) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f833a225540) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f833a2255a0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f8339ebcc00) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f8339ebcd80) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f8339cd8c00) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f8339cd8c60) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f8339cd8cc0) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f8339cd8d20) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f83399354e0) 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 (0x0x7f83398bf9c0) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f83399355a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f83398bf9c0)
+
+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 (0x0x7f83398bfa28) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f83398bfa90) 0
+ primary-for std::domain_error (0x0x7f83398bfa28)
+ std::exception (0x0x7f8339935600) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f83398bfa90)
+
+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 (0x0x7f83398bfaf8) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f83398bfb60) 0
+ primary-for std::invalid_argument (0x0x7f83398bfaf8)
+ std::exception (0x0x7f8339935660) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f83398bfb60)
+
+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 (0x0x7f83398bfbc8) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f83398bfc30) 0
+ primary-for std::length_error (0x0x7f83398bfbc8)
+ std::exception (0x0x7f83399356c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f83398bfc30)
+
+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 (0x0x7f83398bfc98) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f83398bfd00) 0
+ primary-for std::out_of_range (0x0x7f83398bfc98)
+ std::exception (0x0x7f8339935720) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f83398bfd00)
+
+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 (0x0x7f83398bfd68) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f8339935780) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f83398bfd68)
+
+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 (0x0x7f83398bfdd0) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f83398bfe38) 0
+ primary-for std::range_error (0x0x7f83398bfdd0)
+ std::exception (0x0x7f83399357e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f83398bfe38)
+
+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 (0x0x7f83398bfea0) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f83398bff08) 0
+ primary-for std::overflow_error (0x0x7f83398bfea0)
+ std::exception (0x0x7f8339935840) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f83398bff08)
+
+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 (0x0x7f83398bff70) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f8339981000) 0
+ primary-for std::underflow_error (0x0x7f83398bff70)
+ std::exception (0x0x7f83399358a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f8339981000)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f833999eba0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f833999ec00) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f833999ed80) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f833999ee40) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f8339981270) 0
+ std::__uses_alloc_base (0x0x7f833999ede0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f833973a480) 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 (0x0x7f83397ce680) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f83397dab40) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f83397ce680)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f83397dac00) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f83397dac60) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f83397daf60) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f83394a9de0) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f83394a9ea0) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f83394dd3c0) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f8339509240) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f8339509300) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f8339509360) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f8339509720) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f8339509840) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f83392df900) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f833932a1e0) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f833932aba0) 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 (0x0x7f83393125b0) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f833932ade0) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f83393125b0)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f8338e04780) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f8338da30d0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f8338e04f00) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f8338da31a0) 0
+ std::_Bit_iterator_base (0x0x7f8338da3208) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f8338e2e4e0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f8338da32d8) 0
+ std::_Bit_iterator_base (0x0x7f8338da3340) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f8338e2ecc0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f8338c3b1e0) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f8338c3b360) 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 (0x0x7f8338c3b4e0) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f8338c3b660) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f833897b1e0) 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 (0x0x7f833897b240) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f8338a06cc0) 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 (0x0x7f83389a86e8) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f8338a70240) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f83389a86e8)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f83386f9c60) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f83386f9cc0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f83386f9f60) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f833874f7e0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f83387888a0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f833881ab40) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f83387bb9c0) 0
+ std::__atomic_flag_base (0x0x7f833881aba0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f8338398c98) 0
+ QAtomicInteger<int> (0x0x7f8338398d00) 0
+ QBasicAtomicInteger<int> (0x0x7f833839eae0) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f8337c23d80) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f8337c23de0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f833790d120) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f833790d840) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f833790d8a0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f833792d138) 0
+ QGenericArgument (0x0x7f833790db40) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f8337944060) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f83379440c0) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f8337944000) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f8337944a20) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f83379ba480) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f83379bae40) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f833769b960) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f833769bcc0) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f8337750780) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f83377508a0) 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 (0x0x7f8337750c60) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f8337750f00) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f8337799120) 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 (0x0x7f83377de240) 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 (0x0x7f83377de5a0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f83377ded80) 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 (0x0x7f83377c6618) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f83377c6680) 0
+ primary-for std::system_error (0x0x7f83377c6618)
+ std::exception (0x0x7f8337822960) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f83377c6680)
+
+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 (0x0x7f83377c69c0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f83377c6a28) 0
+ primary-for std::ios_base::failure (0x0x7f83377c69c0)
+ std::runtime_error (0x0x7f83377c6a90) 0
+ primary-for std::system_error (0x0x7f83377c6a28)
+ std::exception (0x0x7f8337880120) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f83377c6a90)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f8337880180) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f83378801e0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f8337880240) 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 (0x0x7f83378800c0) 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 (0x0x7f8337514e40) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f8337612180) 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> (0x0x7f8336f5e618 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> (0x0x7f8336f5e6e8 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> (0x0x7f8336f5ec30 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> (0x0x7f8336f5ed00 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 (0x0x7f8336fd1068) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f8336fb0b40) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f8336fd1068)
+
+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 (0x0x7f8336fd10d0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f8336fb0c60) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f8336fd10d0)
+
+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 (0x0x7f8336fd1138) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f8336fb0d80) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f8336fd1138)
+
+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 (0x0x7f8336fd1208) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f8336fb0ea0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f8336fd1208)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f8336fe9780) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f8336fe9ae0) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f8336fe9de0) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f8337012120) 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 (0x0x7f8336fd1340) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f8337095900) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f8336fd1340)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f8336d036c0) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f8336d03c00) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f8336e49a20) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f8336baad80) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f83368a8ea0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f83367102a0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f83367d5240) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f833651e180) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f833651e5a0) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f833651e600) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f83365a9360) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f833668f540) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f833668f4e0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f83362eb420) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f83364506c0) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f833603a9c0) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f8336046208) 0
+ QtPrivate::ArgBase (0x0x7f833603aa20) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f83360462d8) 0
+ QtPrivate::ArgBase (0x0x7f833603ac60) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f8335cae4e0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f8335ced420) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f8335ced4e0) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f8335af7a20) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f8335b4ec00) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f8335bc5900) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f8335bc5b40) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f8335c6d660) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f8335d65ea0) 0
+ QIODeviceBase (0x0x7f8335c6d6c0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f8335c6d840) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f833593ede0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f8335946680) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f833593eea0) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f8335946750) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f833593ef60) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f8335a3da80) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f8335946af8) 0
+ QMetaContainer (0x0x7f8335a3dc60) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f8335946b60) 0
+ QMetaContainer (0x0x7f8335a61060) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f8335760240) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f83356ecbc8) 0
+ std::__detail::_List_node_base (0x0x7f83357602a0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f8335835360) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f83358356c0) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f83352a2b40) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f83352a2d20) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f833532cd80) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f8335273660) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f8334e5f960) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f8334e5fcc0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f8334acad20) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f8334acae40) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f8334b344e0) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f8334b34480) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f8334b34540) 0
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f8334b345a0) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f8334b34ae0) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f8334b34b40) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f8334b5f2a0) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f8334b5f9c0) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f8334b5fcc0) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f8334b5fde0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f8334bac060) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f8334b32618) 0
+ QPropertyObserverBase (0x0x7f8334bac1e0) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f8334b32958) 0
+ QPropertyObserver (0x0x7f8334b329c0) 0
+ QPropertyObserverBase (0x0x7f8334bac6c0) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f8334c085a0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f8334c29720) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f833494b660) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f833494b6c0) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f8334a4c480) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f83347031e0) 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 (0x0x7f8334758b40) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f83347ea4e0) 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 (0x0x7f83347ea480) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f83344ac420) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f83344accc0) 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 (0x0x7f833477fea0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f83344acc60) 0
+ primary-for QAbstractAnimation (0x0x7f833477fea0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f83344e8060) 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 (0x0x7f833477ff08) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f83344e8000) 0
+ primary-for QAnimationDriver (0x0x7f833477ff08)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f83344e8240) 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 (0x0x7f833477ff70) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f83344e81e0) 0
+ primary-for QEventLoop (0x0x7f833477ff70)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f83344e8780) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f83344e8840) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f83344e88a0) 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 (0x0x7f83345010d0) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f83344e87e0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f83345010d0)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f833457a060) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f8334443c60) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f8334443c00) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f83344678a0) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f8334465270) 0
+ QStringConverterBase (0x0x7f8334467840) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f83344652d8) 0
+ QStringConverter (0x0x7f8334465340) 0
+ QStringConverterBase (0x0x7f83340c22a0) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f83344653a8) 0
+ QStringConverter (0x0x7f8334465410) 0
+ QStringConverterBase (0x0x7f83340e2120) 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 (0x0x7f8334465478) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f83340e2de0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f83341375a0) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f83341e9780) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f8334214de0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f8334214f60) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f8333eef1e0) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f8333f18120) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f8333ec1f08) 0
+ QIODeviceBase (0x0x7f8333f180c0) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f8334019a80) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f8334019b40) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f8333dc1780) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f8333dc17e0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f8333dc1720) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f8333b8ef00) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f8333bb5180) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f8333bb5360) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f8333bf0240) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f8333c3b2a0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f8333c84480) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f83338f8d20) 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 (0x0x7f8333901d00) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f83338f8cc0) 0
+ primary-for QAbstractItemModel (0x0x7f8333901d00)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f8333a2eae0) 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 (0x0x7f833396c5b0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f833396c618) 0
+ primary-for QAbstractTableModel (0x0x7f833396c5b0)
+ QObject (0x0x7f8333a2ea80) 0
+ primary-for QAbstractItemModel (0x0x7f833396c618)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f8333a2ec00) 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 (0x0x7f833396c680) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f833396c6e8) 0
+ primary-for QAbstractListModel (0x0x7f833396c680)
+ QObject (0x0x7f8333a2eba0) 0
+ primary-for QAbstractItemModel (0x0x7f833396c6e8)
+
+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 (0x0x7f83336b0480) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f83336b0540) 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 (0x0x7f83336a5af8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f83336a5b60) 0
+ primary-for QAbstractProxyModel (0x0x7f83336a5af8)
+ QObject (0x0x7f83336b04e0) 0
+ primary-for QAbstractItemModel (0x0x7f83336a5b60)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f83336b0720) 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 (0x0x7f83336a5bc8) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f83336a5c30) 0
+ primary-for QAnimationGroup (0x0x7f83336a5bc8)
+ QObject (0x0x7f83336b06c0) 0
+ primary-for QAbstractAnimation (0x0x7f83336a5c30)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f83336a5d68) 0
+ QIterator<QMetaAssociation> (0x0x7f83336a5dd0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f83336b0b40) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f83336a5f08) 0
+ QConstIterator<QMetaAssociation> (0x0x7f83336a5f70) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f833372e0c0) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f833373f000) 0
+ QIterable<QMetaAssociation> (0x0x7f833372e600) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f8333835120) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f8333872e40) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f833349fd80) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f83334e9900) 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 (0x0x7f83336fc2a0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f83334e9840) 0
+ primary-for QIODevice (0x0x7f83336fc2a0)
+ QIODeviceBase (0x0x7f83334e98a0) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f83334e9d20) 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 (0x0x7f83334dcf70) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f833352b000) 0
+ primary-for QBuffer (0x0x7f83334dcf70)
+ QObject (0x0x7f83334e9c60) 0
+ primary-for QIODevice (0x0x7f833352b000)
+ QIODeviceBase (0x0x7f83334e9cc0) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f83334e9f60) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f83334e9f00) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f8333543120) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f83335430c0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f8333598900) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f83332b2780) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f83332b27e0) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f83332b2720) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f833330b240) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f8333363840) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f83333afa80) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f83333afae0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f83333afa20) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f8333430d20) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f833348f120) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f8333149360) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f83331b2ae0) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f83331b2ba0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f83331b2d20) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f833323ff60) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f8332f32ba0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f8332fb7d20) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f8332fb7de0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f8332cf16c0) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f8332d2cc00) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f8332d2cc60) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f8332d2cba0) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f8332e3e240) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f8332e3e2a0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f8332e3e1e0) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f8332c4f300) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f8332c4f2a0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f833294b6c0) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f8332992b40) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f83329c55a0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f83329c5780) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f8332a8d1e0) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f83326f5b40) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f83326f5ba0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f83326f5c00) 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 (0x0x7f83326f5ae0) 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 (0x0x7f83326fe410) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f83327575a0) 0
+ primary-for QTimerEvent (0x0x7f83326fe410)
+
+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 (0x0x7f83326fe478) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f8332757a80) 0
+ primary-for QChildEvent (0x0x7f83326fe478)
+
+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 (0x0x7f83326fe4e0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f8332757ea0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f83326fe4e0)
+
+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 (0x0x7f83326fe548) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f8332791180) 0
+ primary-for QDeferredDeleteEvent (0x0x7f83326fe548)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f8332791540) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f83326fe618) 0
+ QBasicMutex (0x0x7f83327f92a0) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f83327f96c0) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f83327f9cc0) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f8332868300) 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 (0x0x7f8332868f60) 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 (0x0x7f83325d69c0) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f8332613b40) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f8332613e40) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f8332386240) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f83323838f0) 0
+ std::__mutex_base (0x0x7f83323862a0) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f8332386480) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f83323864e0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f8332386540) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f8332386f60) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f8332383958) 0
+ std::__recursive_mutex_base (0x0x7f83323c3000) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f83322bdd20) 0
+ std::__mutex_base (0x0x7f83323c33c0) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f83323c3420) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f83322bdd90) 0
+ std::__recursive_mutex_base (0x0x7f83323c37e0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f83323c3840) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f83323ff660) 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 (0x0x7f83323ff900) 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 (0x0x7f83323ff960) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f83323ff8a0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f83321e2ba0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f83321e2f60) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f833222b000) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f8331ed0540) 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 (0x0x7f8331ea5750) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f8331ea57b8) 0
+ primary-for std::future_error (0x0x7f8331ea5750)
+ std::exception (0x0x7f8331ed0c60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f8331ea57b8)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f8331f023c0) 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 (0x0x7f8331f02360) 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 (0x0x7f8332037de0) 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 (0x0x7f8332033410) 0
+ std::__at_thread_exit_elt (0x0x7f8332037ea0) 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 (0x0x7f8331f02540) 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 (0x0x7f8331f02300) 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 (0x0x7f833192f340) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f833193aba0) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f833192f340)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f8331971480) 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 (0x0x7f833192f680) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f8331971420) 0
+ primary-for QThread (0x0x7f833192f680)
+
+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 (0x0x7f83319717e0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f8331971960) 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 (0x0x7f833192f6e8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f8331971900) 0
+ primary-for QThreadPool (0x0x7f833192f6e8)
+
+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 (0x0x7f833192f750) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f8331971ae0) 0 nearly-empty
+ primary-for QException (0x0x7f833192f750)
+
+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 (0x0x7f833192f7b8) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f833192f820) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f833192f7b8)
+ std::exception (0x0x7f8331971b40) 0 nearly-empty
+ primary-for QException (0x0x7f833192f820)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f83319dc9c0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f833180a0c0) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f833180a060) 0
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f8331857300) 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 (0x0x7f8331825478) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f83318572a0) 0
+ primary-for QCoreApplication (0x0x7f8331825478)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f8331857540) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f8331857660) 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 (0x0x7f83318254e0) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f8331825548) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f83318254e0)
+ QObject (0x0x7f8331857600) 0
+ primary-for QAbstractItemModel (0x0x7f8331825548)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f83318577e0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f83318579c0) 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 (0x0x7f83318255b0) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f833187bc40) 0
+ primary-for QFileDevice (0x0x7f83318255b0)
+ QObject (0x0x7f8331857900) 0
+ primary-for QIODevice (0x0x7f833187bc40)
+ QIODeviceBase (0x0x7f8331857960) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f83314ff6c0) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f8331573c60) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f8331598120) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f83315fa420) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f83315fa3c0) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f83316349c0) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f8331686540) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7f83310cc820 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> (0x0x7f83310cca90 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> (0x0x7f83313d9d20 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> (0x0x7f83310ccd00 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> (0x0x7f83310ccdd0 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> (0x0x7f83310ccf70 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> (0x0x7f8331176208 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> (0x0x7f833118d0e0 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> (0x0x7f8331176478 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> (0x0x7f8331176548 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 (0x0x7f833110dd80) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f833110df00) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f83311b30c0) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f83311b33c0) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f83311b3540) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7f833127b600) 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 (0x0x7f833127b6c0) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f833127b660) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f833127b4e0) 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 (0x0x7f8330ce4340) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7f8330ce43a8) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f8330ce4340)
+ std::runtime_error (0x0x7f8330ce4410) 0
+ primary-for std::system_error (0x0x7f8330ce43a8)
+ std::exception (0x0x7f8330cf05a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f8330ce4410)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f8330ce4d68) 0
+ std::filesystem::__cxx11::path (0x0x7f8330d4d060) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f8330d6c300) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f8330e21ae0) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f8330e6b000) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f8330ab46c0) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f8330ab4e40) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f8330b39f60) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f8330c2e120) 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 (0x0x7f8330c22820) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f8330c22888) 0
+ primary-for QFile (0x0x7f8330c22820)
+ QIODevice (0x0x7f8330e253f0) 0
+ primary-for QFileDevice (0x0x7f8330c22888)
+ QObject (0x0x7f8330c2e060) 0
+ primary-for QIODevice (0x0x7f8330e253f0)
+ QIODeviceBase (0x0x7f8330c2e0c0) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f8330c2e720) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f833090b0c0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f83309d07e0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f83309d0c60) 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 (0x0x7f83306fd420) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f83306fd660) 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 (0x0x7f83306c1a28) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f83306fd600) 0
+ primary-for QFileSelector (0x0x7f83306c1a28)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f83306fd840) 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 (0x0x7f83306c1a90) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f83306fd7e0) 0
+ primary-for QFileSystemWatcher (0x0x7f83306c1a90)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f8330735000) 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 (0x0x7f83306c1af8) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f83306fdf60) 0
+ primary-for QFutureWatcherBase (0x0x7f83306c1af8)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f8330735540) 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 (0x0x7f83306c1d00) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f83306c1d68) 0
+ primary-for QIdentityProxyModel (0x0x7f83306c1d00)
+ QAbstractItemModel (0x0x7f83306c1dd0) 0
+ primary-for QAbstractProxyModel (0x0x7f83306c1d68)
+ QObject (0x0x7f83307354e0) 0
+ primary-for QAbstractItemModel (0x0x7f83306c1dd0)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f83307356c0) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f83307c6300) 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 (0x0x7f83307bbbc8) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f83307c62a0) 0
+ primary-for QItemSelectionModel (0x0x7f83307bbbc8)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f83308410d0) 0
+ QList<QItemSelectionRange> (0x0x7f8330841138) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f83308411a0) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f83307c6d80) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f83304d8ea0) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f833052e3c0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f8330573720) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f8330573780) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f83305736c0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f8330624180) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f83306241e0) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f83303b8720) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f83303b8780) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f83303b86c0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f83304702a0) 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 (0x0x7f8330467a28) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f8330470240) 0
+ primary-for QLibrary (0x0x7f8330467a28)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f8330470960) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f8330470900) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f8330195120) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f8330229960) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f8330229a20) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f832feb1120) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f832ff05a80) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f832ff740c0) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f832ffc08a0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f833000a060) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f8330052960) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f832fcee6c0) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f832fcee780) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f832fcee720) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f832fd5b9c0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f832fd5b960) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f832fda1720) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f832fda16c0) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f832fda1de0) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f832fda1d80) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f832fde9c00) 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 (0x0x7f832fdf4548) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f832fde9ba0) 0
+ primary-for QMimeData (0x0x7f832fdf4548)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f832fde9d80) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f832fe7a8a0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f832fe7a960) 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 (0x0x7f832fe80410) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f832fe7a900) 0
+ primary-for QObjectCleanupHandler (0x0x7f832fe80410)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f832fe7aa20) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f832fadb840) 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 (0x0x7f832fad4e38) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f832fad4ea0) 0
+ primary-for QParallelAnimationGroup (0x0x7f832fad4e38)
+ QAbstractAnimation (0x0x7f832fad4f08) 0
+ primary-for QAnimationGroup (0x0x7f832fad4ea0)
+ QObject (0x0x7f832fadb7e0) 0
+ primary-for QAbstractAnimation (0x0x7f832fad4f08)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f832fadba20) 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 (0x0x7f832fad4f70) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f832faf9000) 0
+ primary-for QPauseAnimation (0x0x7f832fad4f70)
+ QObject (0x0x7f832fadb9c0) 0
+ primary-for QAbstractAnimation (0x0x7f832faf9000)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f832fadbc00) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f832fadbc60) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f832fb2b6c0) 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 (0x0x7f832fb2ebc8) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f832fb2b660) 0
+ primary-for QPluginLoader (0x0x7f832fb2ebc8)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f832fb2b780) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f832fbb9000) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f832fbb9060) 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 (0x0x7f832fbaac98) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f832fae0a80) 0
+ primary-for QProcess (0x0x7f832fbaac98)
+ QObject (0x0x7f832fb9bf00) 0
+ primary-for QIODevice (0x0x7f832fae0a80)
+ QIODeviceBase (0x0x7f832fb9bf60) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f832fbb9de0) 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 (0x0x7f832fbaad00) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f832fbaad68) 0
+ primary-for QVariantAnimation (0x0x7f832fbaad00)
+ QObject (0x0x7f832fbb9d80) 0
+ primary-for QAbstractAnimation (0x0x7f832fbaad68)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f832fc11060) 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 (0x0x7f832fbaae38) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f832fbaaea0) 0
+ primary-for QPropertyAnimation (0x0x7f832fbaae38)
+ QAbstractAnimation (0x0x7f832fbaaf08) 0
+ primary-for QVariantAnimation (0x0x7f832fbaaea0)
+ QObject (0x0x7f832fc11000) 0
+ primary-for QAbstractAnimation (0x0x7f832fbaaf08)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f832fc98780) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f832f985c00) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f832f985ba0) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f832f7703c0) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f832f58d300) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f832f58d360) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f832f58d2a0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f832f5d7bc8) 0
+ QRandomGenerator (0x0x7f832f602600) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f832f621240) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f832f621480) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f832f621900) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f832f621d80) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f832f2e7840) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f832f374300) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f832f44c120) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f832f0e2c60) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f832f0e2f60) 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 (0x0x7f832f099f08) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f832f099f70) 0
+ primary-for QSaveFile (0x0x7f832f099f08)
+ QIODevice (0x0x7f832f60eaf0) 0
+ primary-for QFileDevice (0x0x7f832f099f70)
+ QObject (0x0x7f832f0e2ea0) 0
+ primary-for QIODevice (0x0x7f832f60eaf0)
+ QIODeviceBase (0x0x7f832f0e2f00) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f832f142300) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f832f168ae0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f832f1ea840) 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 (0x0x7f832f1f3b60) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f832f1f3bc8) 0
+ primary-for QSequentialAnimationGroup (0x0x7f832f1f3b60)
+ QAbstractAnimation (0x0x7f832f1f3c30) 0
+ primary-for QAnimationGroup (0x0x7f832f1f3bc8)
+ QObject (0x0x7f832f1ea7e0) 0
+ primary-for QAbstractAnimation (0x0x7f832f1f3c30)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f832f1f3d68) 0
+ QIterator<QMetaSequence> (0x0x7f832f1f3dd0) 0
+ QBaseIterator<QMetaSequence> (0x0x7f832f1eaba0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f832f1f3ea0) 0
+ QConstIterator<QMetaSequence> (0x0x7f832f1f3f08) 0
+ QBaseIterator<QMetaSequence> (0x0x7f832f23f120) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f832f1f3f70) 0
+ QIterable<QMetaSequence> (0x0x7f832f23f660) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f832ef20c60) 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 (0x0x7f832ef313a8) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f832ef20c00) 0
+ primary-for QSettings (0x0x7f832ef313a8)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f832ef5e0c0) 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 (0x0x7f832ef31410) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f832ef5e060) 0
+ primary-for QSharedMemory (0x0x7f832ef31410)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f832ef5e2a0) 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 (0x0x7f832ef31478) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f832ef5e240) 0
+ primary-for QSignalMapper (0x0x7f832ef31478)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f833589cea0) 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 (0x0x7f833925e340) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f833589ce40) 0
+ primary-for QSocketNotifier (0x0x7f833925e340)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f8334865060) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f83341179c0) 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 (0x0x7f8339892410) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f8339892680) 0
+ primary-for QSortFilterProxyModel (0x0x7f8339892410)
+ QAbstractItemModel (0x0x7f83395634e0) 0
+ primary-for QAbstractProxyModel (0x0x7f8339892680)
+ QObject (0x0x7f8334117960) 0
+ primary-for QAbstractItemModel (0x0x7f83395634e0)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f8334117d80) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f8333fe6780) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f83335b7000) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f83330a8840) 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 (0x0x7f83390ce548) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f83390ce5b0) 0
+ primary-for QStringListModel (0x0x7f83390ce548)
+ QAbstractItemModel (0x0x7f83390ce680) 0
+ primary-for QAbstractListModel (0x0x7f83390ce5b0)
+ QObject (0x0x7f83330a87e0) 0
+ primary-for QAbstractItemModel (0x0x7f83390ce680)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f83330a8900) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f83330a8a20) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f83330a8ba0) 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 (0x0x7f83390ce6e8) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f83390ce820) 0
+ primary-for QTemporaryFile (0x0x7f83390ce6e8)
+ QFileDevice (0x0x7f83390ce9c0) 0
+ primary-for QFile (0x0x7f83390ce820)
+ QIODevice (0x0x7f8339641bd0) 0
+ primary-for QFileDevice (0x0x7f83390ce9c0)
+ QObject (0x0x7f83330a8ae0) 0
+ primary-for QIODevice (0x0x7f8339641bd0)
+ QIODeviceBase (0x0x7f83330a8b40) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f83330a8de0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f8332cbd480) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f8332cbdb40) 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 (0x0x7f83390cec98) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f8332cbdae0) 0
+ primary-for QTimeLine (0x0x7f83390cec98)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f8332cbdd20) 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 (0x0x7f83390ced00) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f8332cbdcc0) 0
+ primary-for QTimer (0x0x7f83390ced00)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f8332e576c0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f8332e57660) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f8332c76720) 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 (0x0x7f833913e820) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f8332c766c0) 0
+ primary-for QTranslator (0x0x7f833913e820)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f8332c76900) 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 (0x0x7f833913e888) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f833913e958) 0
+ primary-for QTransposeProxyModel (0x0x7f833913e888)
+ QAbstractItemModel (0x0x7f833913e9c0) 0
+ primary-for QAbstractProxyModel (0x0x7f833913e958)
+ QObject (0x0x7f8332c768a0) 0
+ primary-for QAbstractItemModel (0x0x7f833913e9c0)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f8332c76a80) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f8330eaf300) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f8330eaf420) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f8330e6c240) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f8338f19618) 0
+ QList<QXmlStreamAttribute> (0x0x7f8338f195b0) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f8338f196e8) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f8330915360) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f8330915c00) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f83303f22a0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f833041c900) 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 (0x0x7f83302540c0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f8330254120) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f83302546c0) 0
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7f8330254900) 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 (0x0x7f8338f29d68) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+ QObject (0x0x7f83302548a0) 0
+ primary-for QAbstractItemModelTester (0x0x7f8338f29d68)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7f8330254ae0) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7f8330254ba0) 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 (0x0x7f8338f29dd0) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+ QObject (0x0x7f8330254b40) 0
+ primary-for QTestEventLoop (0x0x7f8338f29dd0)
+
+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 (0x0x7f8336a44310) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+ QObject (0x0x7f832f3686c0) 0
+ primary-for QSignalSpy (0x0x7f8336a44310)
+ QList<QList<QVariant> > (0x0x7f8338f2f208) 16
+ QListSpecialMethods<QList<QVariant> > (0x0x7f8338f2f270) 16 empty
+ QListSpecialMethodsBase<QList<QVariant> > (0x0x7f832f368720) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7f8339246720) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7f833894d540) 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 = 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 (0x0x7f83316bda20) 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 (0x0x7f83316bdd80) 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 (0x0x7f83316bdf00) 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 (0x0x7f8330dea300) 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 (0x0x7f8330dea4e0) 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 (0x0x7f8330dea840) 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 (0x0x7f8330dea9c0) 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 (0x0x7f8330dead20) 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 (0x0x7f8330deaf00) 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 (0x0x7f83303622a0) 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 (0x0x7f8330362480) 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 (0x0x7f83303627e0) 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 (0x0x7f83303629c0) 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 (0x0x7f8330362d20) 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 (0x0x7f8330362f00) 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 (0x0x7f832fd4d2a0) 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 (0x0x7f832f481b40) 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 (0x0x7f832f481ea0) 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 (0x0x7f8334fdd060) 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 (0x0x7f8334fdd3c0) 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 (0x0x7f8334fdd540) 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 (0x0x7f8334fdd8a0) 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 (0x0x7f8334fdda20) 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 (0x0x7f8334fddd80) 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 (0x0x7f8334fddf00) 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 (0x0x7f8334e3e2a0) 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 (0x0x7f8334e3e420) 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 (0x0x7f8334e3e780) 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 (0x0x7f8334e3e900) 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 (0x0x7f8334e3ec60) 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 (0x0x7f8334e3ede0) 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 (0x0x7f83380c8180) 0 empty
+
diff --git a/tests/auto/bic/data/QtQuickWidgets.6.2.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtQuickWidgets.6.2.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..a2d85a47ff
--- /dev/null
+++ b/tests/auto/bic/data/QtQuickWidgets.6.2.0.linux-gcc-amd64.txt
@@ -0,0 +1,23057 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7fc67a99ccc0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7fc67a6544e0) 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 (0x0x7fc67a654720) 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 (0x0x7fc67a685840) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7fc67a6de060) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7fc67a72ee40) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7fc67a72ef00) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7fc67a75e420) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7fc67a75e480) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7fc67a75e4e0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7fc67a75e540) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7fc67a75e5a0) 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 (0x0x7fc67a75e660) 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 (0x0x7fc67a75e720) 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 (0x0x7fc67a75e7e0) 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 (0x0x7fc67a75e8a0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7fc67a75ec00) 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 (0x0x7fc67a75ef60) 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 (0x0x7fc67a7ad000) 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 (0x0x7fc67a7ad2a0) 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 (0x0x7fc67a7ad300) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7fc67a7adb40) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7fc677c28120) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7fc677c1e068) 0 empty
+ std::__nonesuch (0x0x7fc677c28600) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7fc677ca9360) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7fc677ca9660) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7fc677ca96c0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7fc677d0a420) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7fc677d0a480) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7fc677c1e5b0) 0 empty
+ std::input_iterator_tag (0x0x7fc677d0a4e0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7fc677c1e618) 0 empty
+ std::forward_iterator_tag (0x0x7fc677c1e680) 0 empty
+ std::input_iterator_tag (0x0x7fc677d0a540) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7fc677c1e6e8) 0 empty
+ std::bidirectional_iterator_tag (0x0x7fc677c1e750) 0 empty
+ std::forward_iterator_tag (0x0x7fc677c1e7b8) 0 empty
+ std::input_iterator_tag (0x0x7fc677d0a5a0) 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 (0x0x7fc6779c22a0) 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 (0x0x7fc6779c23c0) 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 (0x0x7fc6779c26c0) 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 (0x0x7fc6779c29c0) 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 (0x0x7fc6779c2ae0) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7fc677a85300) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7fc677a85600) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7fc677a85660) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7fc677a85720) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7fc677a85780) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7fc677a857e0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7fc677a85840) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7fc677a858a0) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7fc677a85b40) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7fc677a85de0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7fc677a85e40) 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 (0x0x7fc677adac00) 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 (0x0x7fc677c1eb60) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7fc677adade0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7fc677c1eb60)
+
+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 (0x0x7fc677b7d000) 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 (0x0x7fc677c1ebc8) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7fc677b7d3c0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7fc677c1ebc8)
+
+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 (0x0x7fc677c1ec30) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7fc677b7d5a0) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7fc677c1ec30)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7fc677b7d780) 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 (0x0x7fc677b7dcc0) 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 (0x0x7fc677c1ec98) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7fc677bb13c0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fc677c1ec98)
+
+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 (0x0x7fc677c1ed00) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7fc677c1ed68) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7fc677c1ed00)
+ std::exception (0x0x7fc677bb15a0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fc677c1ed68)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7fc677bb1780) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7fc677bb19c0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7fc677864180) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7fc67744e540) 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 (0x0x7fc67744e600) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7fc6774bb4e0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7fc6774bb5a0) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7fc6774bb600) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7fc6774bb660) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7fc6774bb6c0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7fc6774bb7e0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7fc6774bb840) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7fc67754dea0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7fc677573060) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7fc67735fea0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7fc67735ff00) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7fc67735ff60) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7fc67739e000) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7fc676fbc780) 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 (0x0x7fc676f50d00) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7fc676fbc840) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fc676f50d00)
+
+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 (0x0x7fc676f50d68) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7fc676f50dd0) 0
+ primary-for std::domain_error (0x0x7fc676f50d68)
+ std::exception (0x0x7fc676fbc8a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fc676f50dd0)
+
+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 (0x0x7fc676f50e38) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7fc676f50ea0) 0
+ primary-for std::invalid_argument (0x0x7fc676f50e38)
+ std::exception (0x0x7fc676fbc900) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fc676f50ea0)
+
+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 (0x0x7fc676f50f08) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7fc676f50f70) 0
+ primary-for std::length_error (0x0x7fc676f50f08)
+ std::exception (0x0x7fc676fbc960) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fc676f50f70)
+
+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 (0x0x7fc676bfe000) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7fc676bfe068) 0
+ primary-for std::out_of_range (0x0x7fc676bfe000)
+ std::exception (0x0x7fc676fbc9c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fc676bfe068)
+
+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 (0x0x7fc676bfe0d0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7fc676fbca20) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fc676bfe0d0)
+
+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 (0x0x7fc676bfe138) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7fc676bfe1a0) 0
+ primary-for std::range_error (0x0x7fc676bfe138)
+ std::exception (0x0x7fc676fbca80) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fc676bfe1a0)
+
+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 (0x0x7fc676bfe208) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7fc676bfe270) 0
+ primary-for std::overflow_error (0x0x7fc676bfe208)
+ std::exception (0x0x7fc676fbcae0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fc676bfe270)
+
+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 (0x0x7fc676bfe2d8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7fc676bfe340) 0
+ primary-for std::underflow_error (0x0x7fc676bfe2d8)
+ std::exception (0x0x7fc676fbcb40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fc676bfe340)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7fc676c37e40) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7fc676c37ea0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7fc676c5b060) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7fc676c5b120) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7fc676bfe5b0) 0
+ std::__uses_alloc_base (0x0x7fc676c5b0c0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7fc6769cd720) 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 (0x0x7fc676a569c0) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7fc676a6bde0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7fc676a569c0)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7fc676a6bea0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7fc676a6bf00) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7fc676a9d240) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7fc676b6f0c0) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7fc676b6f180) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7fc676b6f660) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7fc676b974e0) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7fc676b975a0) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7fc676b97600) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7fc676b979c0) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7fc676b97ae0) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7fc676977ba0) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7fc6769b1480) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7fc6769b1e40) 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 (0x0x7fc6769a58f0) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7fc6765ff0c0) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7fc6769a58f0)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7fc676095a20) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7fc67638e410) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fc6760bc1e0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7fc67638e4e0) 0
+ std::_Bit_iterator_base (0x0x7fc67638e548) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fc6760bc780) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7fc67638e618) 0
+ std::_Bit_iterator_base (0x0x7fc67638e680) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fc6760bcf60) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7fc675ed2480) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7fc675ed2600) 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 (0x0x7fc675ed2780) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7fc675ed2900) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7fc675c09480) 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 (0x0x7fc675c094e0) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7fc675c8ff60) 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 (0x0x7fc675c06a28) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7fc675d024e0) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7fc675c06a28)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7fc675d87f00) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7fc675d87f60) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7fc6759d6240) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7fc6759d6a80) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7fc675a1bb40) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7fc675ab2de0) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7fc675a4ed00) 0
+ std::__atomic_flag_base (0x0x7fc675ab2e40) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7fc67567a000) 0
+ QAtomicInteger<int> (0x0x7fc67567a068) 0
+ QBasicAtomicInteger<int> (0x0x7fc67562fd80) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7fc674ed9060) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7fc674ed90c0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7fc674f9d3c0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7fc674f9dae0) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7fc674f9db40) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7fc674f91478) 0
+ QGenericArgument (0x0x7fc674f9dde0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7fc674bd5300) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7fc674bd5360) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7fc674bd52a0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7fc674bd5cc0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7fc674c4d720) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7fc674c76120) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7fc674d2cc00) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7fc674d2cf60) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7fc6749e3a20) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7fc6749e3b40) 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 (0x0x7fc6749e3f00) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7fc674a2e1e0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7fc674a2e3c0) 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 (0x0x7fc674a754e0) 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 (0x0x7fc674a75840) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7fc674ab3060) 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 (0x0x7fc6749ff958) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7fc6749ff9c0) 0
+ primary-for std::system_error (0x0x7fc6749ff958)
+ std::exception (0x0x7fc674ab3c00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fc6749ff9c0)
+
+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 (0x0x7fc6749ffd00) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7fc6749ffd68) 0
+ primary-for std::ios_base::failure (0x0x7fc6749ffd00)
+ std::runtime_error (0x0x7fc6749ffdd0) 0
+ primary-for std::system_error (0x0x7fc6749ffd68)
+ std::exception (0x0x7fc674b153c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fc6749ffdd0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7fc674b15420) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7fc674b15480) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7fc674b154e0) 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 (0x0x7fc674b15360) 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 (0x0x7fc6747cd120) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7fc67489f420) 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> (0x0x7fc6743e3958 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> (0x0x7fc6743e3a28 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> (0x0x7fc6743e3f70 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> (0x0x7fc6743e3b60 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 (0x0x7fc6744554e0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7fc67443ade0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7fc6744554e0)
+
+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 (0x0x7fc674455548) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7fc67443af00) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7fc674455548)
+
+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 (0x0x7fc6744555b0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7fc67447a060) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7fc6744555b0)
+
+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 (0x0x7fc674455680) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7fc67447a180) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7fc674455680)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7fc67447aa20) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7fc67447ad80) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7fc6744a1060) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7fc6744a13c0) 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 (0x0x7fc6744557b8) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7fc674525ba0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7fc6744557b8)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7fc674598960) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7fc674598ea0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7fc6742d1cc0) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7fc674068060) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7fc67415b180) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7fc673fa3540) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7fc673c3a4e0) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7fc673db4420) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7fc673db4840) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7fc673db48a0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7fc673a3d600) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7fc673b277e0) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7fc673b27780) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7fc673b706c0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7fc6738e1960) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7fc6734d3c60) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7fc6734d9548) 0
+ QtPrivate::ArgBase (0x0x7fc6734d3cc0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7fc6734d9618) 0
+ QtPrivate::ArgBase (0x0x7fc6734d3f00) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7fc673541780) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7fc67357f720) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7fc67357f7e0) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7fc67338ccc0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7fc672fc5ea0) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7fc673052ba0) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7fc673052de0) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7fc673100900) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7fc672ff11a0) 0
+ QIODeviceBase (0x0x7fc673100960) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7fc673100ae0) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fc672e360c0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7fc672ff1af8) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fc672e36180) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7fc672ff1bc8) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fc672e36240) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7fc672ed6d20) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7fc672ff1f70) 0
+ QMetaContainer (0x0x7fc672ed6f00) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7fc672ff1068) 0
+ QMetaContainer (0x0x7fc672ef6300) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7fc672bf74e0) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7fc672f86f08) 0
+ std::__detail::_List_node_base (0x0x7fc672bf7540) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7fc672ccf600) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7fc672ccf960) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7fc672b39de0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7fc672b67000) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7fc672820060) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7fc6726fb900) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7fc6722f0c00) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7fc6722f0f60) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7fc67237c000) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7fc67237c120) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7fc671fc9780) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7fc671fc9720) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7fc671fc97e0) 0
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7fc671fc9840) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7fc671fc9d80) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7fc671fc9de0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7fc671ff2540) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7fc671ff2c60) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7fc671ff2f60) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7fc6720210c0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7fc672021300) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7fc671fd0958) 0
+ QPropertyObserverBase (0x0x7fc672021480) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7fc671fd0c98) 0
+ QPropertyObserver (0x0x7fc671fd0d00) 0
+ QPropertyObserverBase (0x0x7fc672021960) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7fc67209e840) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7fc6720bf9c0) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7fc671dd5900) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7fc671dd5960) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7fc671ee1720) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7fc671f8d480) 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 (0x0x7fc671bd1de0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7fc671c82780) 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 (0x0x7fc671c82720) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7fc671d446c0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7fc671d44f60) 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 (0x0x7fc671d1d1a0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7fc671d44f00) 0
+ primary-for QAbstractAnimation (0x0x7fc671d1d1a0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7fc671d7d300) 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 (0x0x7fc671d1d208) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7fc671d7d2a0) 0
+ primary-for QAnimationDriver (0x0x7fc671d1d208)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7fc671d7d4e0) 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 (0x0x7fc671d1d270) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7fc671d7d480) 0
+ primary-for QEventLoop (0x0x7fc671d1d270)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7fc671d7da20) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7fc671d7dae0) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7fc671d7db40) 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 (0x0x7fc671d1d410) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7fc671d7da80) 0
+ primary-for QAbstractEventDispatcher (0x0x7fc671d1d410)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7fc671a0d300) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7fc6718d8f00) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7fc6718d8ea0) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7fc6718fcb40) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7fc671a725b0) 0
+ QStringConverterBase (0x0x7fc6718fcae0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7fc671a72618) 0
+ QStringConverter (0x0x7fc671a72680) 0
+ QStringConverterBase (0x0x7fc671954540) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7fc671a726e8) 0
+ QStringConverter (0x0x7fc671a72750) 0
+ QStringConverterBase (0x0x7fc6719773c0) 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 (0x0x7fc671a727b8) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7fc6719a00c0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7fc6719a0840) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7fc67167ea20) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7fc6716da0c0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7fc6716da240) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7fc671786480) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7fc6717ab3c0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7fc671764270) 0
+ QIODeviceBase (0x0x7fc6717ab360) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7fc6714acd20) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7fc6714acde0) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7fc671254a20) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7fc671254a80) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7fc6712549c0) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7fc6710431e0) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7fc671043420) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7fc671043600) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7fc671081540) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7fc6710cc540) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7fc67111a720) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7fc6711b2000) 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 (0x0x7fc6711a7068) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7fc67118df60) 0
+ primary-for QAbstractItemModel (0x0x7fc6711a7068)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7fc670ec4d80) 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 (0x0x7fc6711a78f0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7fc6711a7958) 0
+ primary-for QAbstractTableModel (0x0x7fc6711a78f0)
+ QObject (0x0x7fc670ec4d20) 0
+ primary-for QAbstractItemModel (0x0x7fc6711a7958)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7fc670ec4ea0) 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 (0x0x7fc6711a79c0) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7fc6711a7a28) 0
+ primary-for QAbstractListModel (0x0x7fc6711a79c0)
+ QObject (0x0x7fc670ec4e40) 0
+ primary-for QAbstractItemModel (0x0x7fc6711a7a28)
+
+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 (0x0x7fc670f42720) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7fc670f427e0) 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 (0x0x7fc670f31e38) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7fc670f31ea0) 0
+ primary-for QAbstractProxyModel (0x0x7fc670f31e38)
+ QObject (0x0x7fc670f42780) 0
+ primary-for QAbstractItemModel (0x0x7fc670f31ea0)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7fc670f429c0) 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 (0x0x7fc670f31f08) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7fc670f31f70) 0
+ primary-for QAnimationGroup (0x0x7fc670f31f08)
+ QObject (0x0x7fc670f42960) 0
+ primary-for QAbstractAnimation (0x0x7fc670f31f70)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7fc670faf0d0) 0
+ QIterator<QMetaAssociation> (0x0x7fc670faf138) 0
+ QBaseIterator<QMetaAssociation> (0x0x7fc670f42de0) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7fc670faf270) 0
+ QConstIterator<QMetaAssociation> (0x0x7fc670faf2d8) 0
+ QBaseIterator<QMetaAssociation> (0x0x7fc670bc6360) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7fc670faf3a8) 0
+ QIterable<QMetaAssociation> (0x0x7fc670bc68a0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7fc670cc63c0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7fc670d26120) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7fc670d5b060) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7fc670d7fba0) 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 (0x0x7fc670d882a0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7fc670d7fae0) 0
+ primary-for QIODevice (0x0x7fc670d882a0)
+ QIODeviceBase (0x0x7fc670d7fb40) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7fc6709cb000) 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 (0x0x7fc670d8c2d8) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7fc670d88310) 0
+ primary-for QBuffer (0x0x7fc670d8c2d8)
+ QObject (0x0x7fc670d7ff00) 0
+ primary-for QIODevice (0x0x7fc670d88310)
+ QIODeviceBase (0x0x7fc670d7ff60) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7fc6709cb240) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7fc6709cb1e0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7fc6709cb3c0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7fc6709cb360) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7fc670a2aba0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7fc670b48a20) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7fc670b48a80) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7fc670b489c0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7fc670ba54e0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7fc6707f7ae0) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7fc670841d20) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7fc670841d80) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7fc670841cc0) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7fc6708ea000) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7fc6709233c0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7fc6705d3600) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7fc670649d80) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7fc670649e40) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7fc670686000) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7fc6706f6240) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7fc6703c8e40) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7fc670469000) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7fc6704690c0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7fc670588960) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7fc6705bcea0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7fc6705bcf00) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7fc6705bce40) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7fc6702d04e0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7fc6702d0540) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7fc6702d0480) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7fc6700e65a0) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7fc6700e6540) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7fc66fddb960) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7fc66fe26de0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7fc66fe5f840) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7fc66fe5fa20) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7fc66ff20480) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7fc66ff8bde0) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7fc66ff8be40) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7fc66ff8bea0) 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 (0x0x7fc66ff8bd80) 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 (0x0x7fc66ff92750) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7fc66fbee840) 0
+ primary-for QTimerEvent (0x0x7fc66ff92750)
+
+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 (0x0x7fc66ff927b8) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7fc66fbeed20) 0
+ primary-for QChildEvent (0x0x7fc66ff927b8)
+
+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 (0x0x7fc66ff92820) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7fc66fc20180) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7fc66ff92820)
+
+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 (0x0x7fc66ff92888) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7fc66fc20420) 0
+ primary-for QDeferredDeleteEvent (0x0x7fc66ff92888)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7fc66fc207e0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7fc66ff92958) 0
+ QBasicMutex (0x0x7fc66fc8f540) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7fc66fc8f960) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7fc66fc8ff60) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7fc66fd005a0) 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 (0x0x7fc66fa1f240) 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 (0x0x7fc66fa67c60) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7fc66fa9bde0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7fc66fae0120) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7fc66f81a4e0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7fc66f81fc30) 0
+ std::__mutex_base (0x0x7fc66f81a540) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7fc66f81a720) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7fc66f81a780) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7fc66f81a7e0) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7fc66f855240) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7fc66f81fc98) 0
+ std::__recursive_mutex_base (0x0x7fc66f8552a0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7fc66fb107e0) 0
+ std::__mutex_base (0x0x7fc66f855660) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7fc66f8556c0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7fc66f880000) 0
+ std::__recursive_mutex_base (0x0x7fc66f855a80) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7fc66f855ae0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7fc66f894900) 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 (0x0x7fc66f894ba0) 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 (0x0x7fc66f894c00) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7fc66f894b40) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7fc66f678e40) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7fc66f6b4240) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7fc66f6b42a0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7fc66f7667e0) 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 (0x0x7fc66f6cda90) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7fc66f6cdaf8) 0
+ primary-for std::future_error (0x0x7fc66f6cda90)
+ std::exception (0x0x7fc66f766f00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fc66f6cdaf8)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7fc66f791660) 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 (0x0x7fc66f791600) 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 (0x0x7fc66f5140c0) 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 (0x0x7fc66f4f42d8) 0
+ std::__at_thread_exit_elt (0x0x7fc66f514180) 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 (0x0x7fc66f7917e0) 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 (0x0x7fc66f7915a0) 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 (0x0x7fc66f1ac6e8) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7fc66edc9e40) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7fc66f1ac6e8)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7fc66ee07720) 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 (0x0x7fc66f1aca28) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7fc66ee076c0) 0
+ primary-for QThread (0x0x7fc66f1aca28)
+
+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 (0x0x7fc66ee07a80) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7fc66ee07c00) 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 (0x0x7fc66f1aca90) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7fc66ee07ba0) 0
+ primary-for QThreadPool (0x0x7fc66f1aca90)
+
+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 (0x0x7fc66f1acaf8) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7fc66ee07d80) 0 nearly-empty
+ primary-for QException (0x0x7fc66f1acaf8)
+
+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 (0x0x7fc66f1acb60) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7fc66f1acbc8) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7fc66f1acb60)
+ std::exception (0x0x7fc66ee07de0) 0 nearly-empty
+ primary-for QException (0x0x7fc66f1acbc8)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7fc66ee6cc60) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7fc66eca3360) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7fc66eca3300) 0
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7fc66ecea5a0) 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 (0x0x7fc66ecb77b8) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7fc66ecea540) 0
+ primary-for QCoreApplication (0x0x7fc66ecb77b8)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7fc66ecea7e0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7fc66ecea900) 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 (0x0x7fc66ecb7820) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7fc66ecb7888) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7fc66ecb7820)
+ QObject (0x0x7fc66ecea8a0) 0
+ primary-for QAbstractItemModel (0x0x7fc66ecb7888)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7fc66eceaa80) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7fc66eceac60) 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 (0x0x7fc66ecb78f0) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7fc66ecb0f50) 0
+ primary-for QFileDevice (0x0x7fc66ecb78f0)
+ QObject (0x0x7fc66eceaba0) 0
+ primary-for QIODevice (0x0x7fc66ecb0f50)
+ QIODeviceBase (0x0x7fc66eceac00) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7fc66ed71960) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7fc66ea0af00) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7fc66ea293c0) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7fc66ea8d6c0) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7fc66ea8d660) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7fc66eab2c60) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7fc66eb027e0) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7fc66e965b60 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> (0x0x7fc66e965dd0 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> (0x0x7fc66e5ea000 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> (0x0x7fc66e965d00 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> (0x0x7fc66e965f70 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> (0x0x7fc66e5ec478 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> (0x0x7fc66e5ec6e8 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> (0x0x7fc66e5ea3f0 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> (0x0x7fc66e5ec958 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> (0x0x7fc66e5eca28 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 (0x0x7fc66e64a060) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7fc66e64a1e0) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7fc66e64a360) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7fc66e64a660) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7fc66e64a7e0) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7fc66e7098a0) 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 (0x0x7fc66e709960) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7fc66e709900) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7fc66e709780) 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 (0x0x7fc66e574680) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7fc66e5746e8) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7fc66e574680)
+ std::runtime_error (0x0x7fc66e574750) 0
+ primary-for std::system_error (0x0x7fc66e5746e8)
+ std::exception (0x0x7fc66e57d840) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fc66e574750)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7fc66e1e20d0) 0
+ std::filesystem::__cxx11::path (0x0x7fc66e1d9300) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7fc66e2005a0) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7fc66e2b9d80) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7fc66e3042a0) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7fc66e349960) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7fc66e374120) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7fc66dfee240) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7fc66e0be3c0) 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 (0x0x7fc66e0bab60) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7fc66e0babc8) 0
+ primary-for QFile (0x0x7fc66e0bab60)
+ QIODevice (0x0x7fc66e2a3700) 0
+ primary-for QFileDevice (0x0x7fc66e0babc8)
+ QObject (0x0x7fc66e0be300) 0
+ primary-for QIODevice (0x0x7fc66e2a3700)
+ QIODeviceBase (0x0x7fc66e0be360) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7fc66e0be9c0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7fc66e19d360) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7fc66de6aa80) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7fc66de6af00) 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 (0x0x7fc66df976c0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7fc66df97900) 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 (0x0x7fc66df58d68) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7fc66df978a0) 0
+ primary-for QFileSelector (0x0x7fc66df58d68)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7fc66df97ae0) 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 (0x0x7fc66df58dd0) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7fc66df97a80) 0
+ primary-for QFileSystemWatcher (0x0x7fc66df58dd0)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7fc66dbcc2a0) 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 (0x0x7fc66df58e38) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7fc66dbcc240) 0
+ primary-for QFutureWatcherBase (0x0x7fc66df58e38)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7fc66dbcc7e0) 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 (0x0x7fc66dbe2068) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fc66dbe20d0) 0
+ primary-for QIdentityProxyModel (0x0x7fc66dbe2068)
+ QAbstractItemModel (0x0x7fc66dbe2138) 0
+ primary-for QAbstractProxyModel (0x0x7fc66dbe20d0)
+ QObject (0x0x7fc66dbcc780) 0
+ primary-for QAbstractItemModel (0x0x7fc66dbe2138)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7fc66dbcc960) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7fc66dc595a0) 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 (0x0x7fc66dc4ef08) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7fc66dc59540) 0
+ primary-for QItemSelectionModel (0x0x7fc66dc4ef08)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7fc66dc7b410) 0
+ QList<QItemSelectionRange> (0x0x7fc66dc7b478) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7fc66dc7b4e0) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7fc66dd0c000) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7fc66dda3180) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7fc66dda3660) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7fc66da0c9c0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7fc66da0ca20) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7fc66da0c960) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7fc66dabb420) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7fc66dabb480) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7fc66d84b9c0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7fc66d84ba20) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7fc66d84b960) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7fc66d905540) 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 (0x0x7fc66d8f8d68) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7fc66d9054e0) 0
+ primary-for QLibrary (0x0x7fc66d8f8d68)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7fc66d905c00) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7fc66d905ba0) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7fc66d6293c0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7fc66d6c0c00) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7fc66d6c0cc0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7fc66d7403c0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7fc66d79dd20) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7fc66d403360) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7fc66d457b40) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7fc66d49d300) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7fc66d4e8c00) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7fc66d57b960) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7fc66d57ba20) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7fc66d57b9c0) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7fc66d1f3c60) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7fc66d1f3c00) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7fc66d2389c0) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7fc66d238960) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7fc66d25f060) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7fc66d25f000) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7fc66d27fea0) 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 (0x0x7fc66d28d888) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7fc66d27fe40) 0
+ primary-for QMimeData (0x0x7fc66d28d888)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7fc66d2a7000) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7fc66d312b40) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7fc66d312c00) 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 (0x0x7fc66d31c750) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7fc66d312ba0) 0
+ primary-for QObjectCleanupHandler (0x0x7fc66d31c750)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7fc66d312cc0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7fc66d370ae0) 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 (0x0x7fc66d3821a0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7fc66d382208) 0
+ primary-for QParallelAnimationGroup (0x0x7fc66d3821a0)
+ QAbstractAnimation (0x0x7fc66d382270) 0
+ primary-for QAnimationGroup (0x0x7fc66d382208)
+ QObject (0x0x7fc66d370a80) 0
+ primary-for QAbstractAnimation (0x0x7fc66d382270)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7fc66d370cc0) 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 (0x0x7fc66d3822d8) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7fc66d382340) 0
+ primary-for QPauseAnimation (0x0x7fc66d3822d8)
+ QObject (0x0x7fc66d370c60) 0
+ primary-for QAbstractAnimation (0x0x7fc66d382340)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7fc66d370ea0) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7fc66d370f00) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7fc66d3bd960) 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 (0x0x7fc66d3bcf08) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7fc66d3bd900) 0
+ primary-for QPluginLoader (0x0x7fc66d3bcf08)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7fc66d7f8060) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7fc676b1d360) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7fc676b1d660) 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 (0x0x7fc676f500d0) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7fc67311cbd0) 0
+ primary-for QProcess (0x0x7fc676f500d0)
+ QObject (0x0x7fc676b1d060) 0
+ primary-for QIODevice (0x0x7fc67311cbd0)
+ QIODeviceBase (0x0x7fc676b1d300) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7fc6768dd7e0) 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 (0x0x7fc676aeaea0) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7fc676aeaf08) 0
+ primary-for QVariantAnimation (0x0x7fc676aeaea0)
+ QObject (0x0x7fc6768dd720) 0
+ primary-for QAbstractAnimation (0x0x7fc676aeaf08)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7fc6764e5060) 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 (0x0x7fc676b110d0) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7fc676b11138) 0
+ primary-for QPropertyAnimation (0x0x7fc676b110d0)
+ QAbstractAnimation (0x0x7fc676b11270) 0
+ primary-for QVariantAnimation (0x0x7fc676b11138)
+ QObject (0x0x7fc6764e5000) 0
+ primary-for QAbstractAnimation (0x0x7fc676b11270)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7fc6749bb3c0) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7fc6710212a0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7fc671001c00) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7fc66f5758a0) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7fc66d5341e0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7fc66d534240) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7fc66d4c9ae0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7fc6766fa0d0) 0
+ QRandomGenerator (0x0x7fc66e6ae6c0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7fc66f92f300) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7fc66f92f540) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7fc66f92f9c0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7fc66f92fe40) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7fc6773c4900) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7fc6758cf3c0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7fc6740871e0) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7fc673dd8d20) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7fc673baa060) 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 (0x0x7fc6763f3ea0) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7fc67647fc98) 0
+ primary-for QSaveFile (0x0x7fc6763f3ea0)
+ QIODevice (0x0x7fc670925ee0) 0
+ primary-for QFileDevice (0x0x7fc67647fc98)
+ QObject (0x0x7fc673dd8f60) 0
+ primary-for QIODevice (0x0x7fc670925ee0)
+ QIODeviceBase (0x0x7fc673baa000) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7fc673baa3c0) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7fc673900ba0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7fc67398e900) 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 (0x0x7fc6764fa680) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7fc6764fa6e8) 0
+ primary-for QSequentialAnimationGroup (0x0x7fc6764fa680)
+ QAbstractAnimation (0x0x7fc6764fa750) 0
+ primary-for QAnimationGroup (0x0x7fc6764fa6e8)
+ QObject (0x0x7fc67398e8a0) 0
+ primary-for QAbstractAnimation (0x0x7fc6764fa750)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7fc6764fa8f0) 0
+ QIterator<QMetaSequence> (0x0x7fc6764fa958) 0
+ QBaseIterator<QMetaSequence> (0x0x7fc67398ec60) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7fc6764faa90) 0
+ QConstIterator<QMetaSequence> (0x0x7fc6764faf70) 0
+ QBaseIterator<QMetaSequence> (0x0x7fc6731271e0) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7fc676541000) 0
+ QIterable<QMetaSequence> (0x0x7fc673127720) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7fc6717bed20) 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 (0x0x7fc6765bc0d0) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7fc6717becc0) 0
+ primary-for QSettings (0x0x7fc6765bc0d0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7fc671279180) 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 (0x0x7fc6765bc138) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7fc671279120) 0
+ primary-for QSharedMemory (0x0x7fc6765bc138)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7fc671279360) 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 (0x0x7fc6765bc1a0) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7fc671279300) 0
+ primary-for QSignalMapper (0x0x7fc6765bc1a0)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7fc66caced80) 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 (0x0x7fc6765c1340) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7fc66caced20) 0
+ primary-for QSocketNotifier (0x0x7fc6765c1340)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7fc66cacef00) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7fc66cb028a0) 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 (0x0x7fc6761c4dd0) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fc6761c4e38) 0
+ primary-for QSortFilterProxyModel (0x0x7fc6761c4dd0)
+ QAbstractItemModel (0x0x7fc6761c4ea0) 0
+ primary-for QAbstractProxyModel (0x0x7fc6761c4e38)
+ QObject (0x0x7fc66cb02840) 0
+ primary-for QAbstractItemModel (0x0x7fc6761c4ea0)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7fc66cb02c60) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7fc66cb28660) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7fc66cb5dea0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7fc66cb9b720) 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 (0x0x7fc6761dec98) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7fc6761ded00) 0
+ primary-for QStringListModel (0x0x7fc6761dec98)
+ QAbstractItemModel (0x0x7fc6761ded68) 0
+ primary-for QAbstractListModel (0x0x7fc6761ded00)
+ QObject (0x0x7fc66cb9b6c0) 0
+ primary-for QAbstractItemModel (0x0x7fc6761ded68)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7fc66cb9b7e0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7fc66cb9b900) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7fc66cb9ba80) 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 (0x0x7fc6761dedd0) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7fc6761dee38) 0
+ primary-for QTemporaryFile (0x0x7fc6761dedd0)
+ QFileDevice (0x0x7fc6761deea0) 0
+ primary-for QFile (0x0x7fc6761dee38)
+ QIODevice (0x0x7fc66cbba000) 0
+ primary-for QFileDevice (0x0x7fc6761deea0)
+ QObject (0x0x7fc66cb9b9c0) 0
+ primary-for QIODevice (0x0x7fc66cbba000)
+ QIODeviceBase (0x0x7fc66cb9ba20) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7fc66cb9bcc0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7fc66c7cb360) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7fc66c7cba20) 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 (0x0x7fc6761e00d0) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7fc66c7cb9c0) 0
+ primary-for QTimeLine (0x0x7fc6761e00d0)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7fc66c7cbc00) 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 (0x0x7fc6761e0138) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7fc66c7cbba0) 0
+ primary-for QTimer (0x0x7fc6761e0138)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7fc66c7f85a0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7fc66c7f8540) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7fc66c82a600) 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 (0x0x7fc6761e8f70) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7fc66c82a5a0) 0
+ primary-for QTranslator (0x0x7fc6761e8f70)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7fc66c82a7e0) 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 (0x0x7fc6761e9000) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fc6761e9068) 0
+ primary-for QTransposeProxyModel (0x0x7fc6761e9000)
+ QAbstractItemModel (0x0x7fc6761e90d0) 0
+ primary-for QAbstractProxyModel (0x0x7fc6761e9068)
+ QObject (0x0x7fc66c82a780) 0
+ primary-for QAbstractItemModel (0x0x7fc6761e90d0)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7fc66c82a960) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7fc66c8821e0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7fc66c882300) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7fc66c89f120) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7fc6762068f0) 0
+ QList<QXmlStreamAttribute> (0x0x7fc676206958) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7fc6762069c0) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7fc66c8c5240) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7fc66c8c5ae0) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7fc66c8f6120) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7fc66c9037e0) 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 (0x0x7fc66c912f60) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7fc66c91f000) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7fc66c91f5a0) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7fc66c91f780) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7fc66c94f240) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7fc66c978f00) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7fc66c978ea0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7fc66c9b8f60) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7fc6763179c0) 0
+ QList<QPoint> (0x0x7fc676317a28) 0
+ QListSpecialMethods<QPoint> (0x0x7fc676317a90) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7fc66c5efc60) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7fc67631bd68) 0
+ QList<QPointF> (0x0x7fc67631be38) 0
+ QListSpecialMethods<QPointF> (0x0x7fc67631bea0) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7fc66c6478a0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7fc66c6980c0) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7fc66c698060) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7fc66c6cb600) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7fc66c6cb5a0) 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 (0x0x7fc67632bf70) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7fc66c6ff1e0) 0
+ primary-for QImage (0x0x7fc67632bf70)
+
+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 (0x0x7fc67633d4e0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7fc66c73e9c0) 0
+ primary-for QPixmap (0x0x7fc67633d4e0)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7fc66c777600) 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 (0x0x7fc66c7a4960) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7fc66c7a4f00) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7fc66c3d9cc0) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7fc66c3fac60) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7fc66c463780) 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 (0x0x7fc6709bbd68) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7fc66c463720) 0
+ primary-for QScreen (0x0x7fc6709bbd68)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7fc66c4639c0) 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 (0x0x7fc6705d0068) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7fc66c463960) 0
+ primary-for QInputDevice (0x0x7fc6705d0068)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7fc66c491480) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7fc66c4acde0) 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 (0x0x7fc66ff7da90) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7fc66ff7daf8) 0
+ primary-for QPointingDevice (0x0x7fc66ff7da90)
+ QObject (0x0x7fc66c4acd80) 0
+ primary-for QInputDevice (0x0x7fc66ff7daf8)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7fc66c4bf540) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7fc66c50b480) 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 (0x0x7fc66d202750) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7fc66c533480) 0
+ primary-for QInputEvent (0x0x7fc66d202750)
+
+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 (0x0x7fc66d2027b8) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7fc66d202af8) 0
+ primary-for QPointerEvent (0x0x7fc66d2027b8)
+ QEvent (0x0x7fc66c533960) 0
+ primary-for QInputEvent (0x0x7fc66d202af8)
+
+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 (0x0x7fc66d367ea0) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7fc66d382618) 0
+ primary-for QSinglePointEvent (0x0x7fc66d367ea0)
+ QInputEvent (0x0x7fc66d382680) 0
+ primary-for QPointerEvent (0x0x7fc66d382618)
+ QEvent (0x0x7fc66c571840) 0
+ primary-for QInputEvent (0x0x7fc66d382680)
+
+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 (0x0x7fc66d382e38) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7fc66d382ea0) 0
+ primary-for QEnterEvent (0x0x7fc66d382e38)
+ QPointerEvent (0x0x7fc66d3bcf70) 0
+ primary-for QSinglePointEvent (0x0x7fc66d382ea0)
+ QInputEvent (0x0x7fc66d3bc340) 0
+ primary-for QPointerEvent (0x0x7fc66d3bcf70)
+ QEvent (0x0x7fc66c571d20) 0
+ primary-for QInputEvent (0x0x7fc66d3bc340)
+
+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 (0x0x7fc66d3bc3a8) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7fc66d3bcd00) 0
+ primary-for QMouseEvent (0x0x7fc66d3bc3a8)
+ QPointerEvent (0x0x7fc66d3bcd68) 0
+ primary-for QSinglePointEvent (0x0x7fc66d3bcd00)
+ QInputEvent (0x0x7fc66c591000) 0
+ primary-for QPointerEvent (0x0x7fc66d3bcd68)
+ QEvent (0x0x7fc66c58e4e0) 0
+ primary-for QInputEvent (0x0x7fc66c591000)
+
+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 (0x0x7fc66c591068) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7fc66c5910d0) 0
+ primary-for QHoverEvent (0x0x7fc66c591068)
+ QPointerEvent (0x0x7fc66c591138) 0
+ primary-for QSinglePointEvent (0x0x7fc66c5910d0)
+ QInputEvent (0x0x7fc66c5911a0) 0
+ primary-for QPointerEvent (0x0x7fc66c591138)
+ QEvent (0x0x7fc66c58ea80) 0
+ primary-for QInputEvent (0x0x7fc66c5911a0)
+
+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 (0x0x7fc66c591208) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7fc66c591270) 0
+ primary-for QWheelEvent (0x0x7fc66c591208)
+ QPointerEvent (0x0x7fc66c5912d8) 0
+ primary-for QSinglePointEvent (0x0x7fc66c591270)
+ QInputEvent (0x0x7fc66c591340) 0
+ primary-for QPointerEvent (0x0x7fc66c5912d8)
+ QEvent (0x0x7fc66c58eea0) 0
+ primary-for QInputEvent (0x0x7fc66c591340)
+
+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 (0x0x7fc66c5913a8) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7fc66c591410) 0
+ primary-for QTabletEvent (0x0x7fc66c5913a8)
+ QPointerEvent (0x0x7fc66c591478) 0
+ primary-for QSinglePointEvent (0x0x7fc66c591410)
+ QInputEvent (0x0x7fc66c5914e0) 0
+ primary-for QPointerEvent (0x0x7fc66c591478)
+ QEvent (0x0x7fc66c5ad3c0) 0
+ primary-for QInputEvent (0x0x7fc66c5914e0)
+
+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 (0x0x7fc66c591548) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7fc66c5915b0) 0
+ primary-for QNativeGestureEvent (0x0x7fc66c591548)
+ QPointerEvent (0x0x7fc66c591618) 0
+ primary-for QSinglePointEvent (0x0x7fc66c5915b0)
+ QInputEvent (0x0x7fc66c591680) 0
+ primary-for QPointerEvent (0x0x7fc66c591618)
+ QEvent (0x0x7fc66c5adc60) 0
+ primary-for QInputEvent (0x0x7fc66c591680)
+
+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 (0x0x7fc66c5916e8) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7fc66c591750) 0
+ primary-for QKeyEvent (0x0x7fc66c5916e8)
+ QEvent (0x0x7fc66c1c7240) 0
+ primary-for QInputEvent (0x0x7fc66c591750)
+
+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 (0x0x7fc66c5917b8) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7fc66c1c7840) 0
+ primary-for QFocusEvent (0x0x7fc66c5917b8)
+
+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 (0x0x7fc66c591820) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7fc66c1c7ba0) 0
+ primary-for QPaintEvent (0x0x7fc66c591820)
+
+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 (0x0x7fc66c591888) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7fc66c1c7ea0) 0
+ primary-for QMoveEvent (0x0x7fc66c591888)
+
+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 (0x0x7fc66c5918f0) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7fc66c1e7240) 0
+ primary-for QExposeEvent (0x0x7fc66c5918f0)
+
+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 (0x0x7fc66c591958) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7fc66c1e74e0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7fc66c591958)
+
+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 (0x0x7fc66c5919c0) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7fc66c1e77e0) 0
+ primary-for QResizeEvent (0x0x7fc66c5919c0)
+
+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 (0x0x7fc66c591a28) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7fc66c1e7b40) 0
+ primary-for QCloseEvent (0x0x7fc66c591a28)
+
+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 (0x0x7fc66c591a90) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7fc66c1e7ba0) 0
+ primary-for QIconDragEvent (0x0x7fc66c591a90)
+
+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 (0x0x7fc66c591af8) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7fc66c1e7c00) 0
+ primary-for QShowEvent (0x0x7fc66c591af8)
+
+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 (0x0x7fc66c591b60) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7fc66c1e7c60) 0
+ primary-for QHideEvent (0x0x7fc66c591b60)
+
+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 (0x0x7fc66c591bc8) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7fc66c591c30) 0
+ primary-for QContextMenuEvent (0x0x7fc66c591bc8)
+ QEvent (0x0x7fc66c1e7cc0) 0
+ primary-for QInputEvent (0x0x7fc66c591c30)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7fc66c20b2a0) 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 (0x0x7fc66c591c98) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7fc66c20b240) 0
+ primary-for QInputMethodEvent (0x0x7fc66c591c98)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7fc66c252a80) 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 (0x0x7fc66c257c30) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7fc66c252a20) 0
+ primary-for QInputMethodQueryEvent (0x0x7fc66c257c30)
+
+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 (0x0x7fc66c29cb60) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7fc66c299ba0) 0
+ primary-for QDropEvent (0x0x7fc66c29cb60)
+
+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 (0x0x7fc66c29cbc8) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7fc66c29cc30) 0
+ primary-for QDragMoveEvent (0x0x7fc66c29cbc8)
+ QEvent (0x0x7fc66c2aa300) 0
+ primary-for QDropEvent (0x0x7fc66c29cc30)
+
+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 (0x0x7fc66c29cc98) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7fc66c29cd00) 0
+ primary-for QDragEnterEvent (0x0x7fc66c29cc98)
+ QDropEvent (0x0x7fc66c29cd68) 0
+ primary-for QDragMoveEvent (0x0x7fc66c29cd00)
+ QEvent (0x0x7fc66c2aa780) 0
+ primary-for QDropEvent (0x0x7fc66c29cd68)
+
+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 (0x0x7fc66c29cdd0) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7fc66c2aa7e0) 0
+ primary-for QDragLeaveEvent (0x0x7fc66c29cdd0)
+
+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 (0x0x7fc66c29ce38) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7fc66c2aa840) 0
+ primary-for QHelpEvent (0x0x7fc66c29ce38)
+
+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 (0x0x7fc66c29cea0) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7fc66c2aad20) 0
+ primary-for QStatusTipEvent (0x0x7fc66c29cea0)
+
+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 (0x0x7fc66c29cf08) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7fc66c2c6000) 0
+ primary-for QWhatsThisClickedEvent (0x0x7fc66c29cf08)
+
+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 (0x0x7fc66c29cf70) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7fc66c2c62a0) 0
+ primary-for QActionEvent (0x0x7fc66c29cf70)
+
+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 (0x0x7fc66c2d1000) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7fc66c2c6600) 0
+ primary-for QFileOpenEvent (0x0x7fc66c2d1000)
+
+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 (0x0x7fc66c2d1068) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7fc66c2c6900) 0
+ primary-for QToolBarChangeEvent (0x0x7fc66c2d1068)
+
+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 (0x0x7fc66c2d10d0) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7fc66c2c6c00) 0
+ primary-for QShortcutEvent (0x0x7fc66c2d10d0)
+
+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 (0x0x7fc66c2d1138) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7fc66c2c6f60) 0
+ primary-for QWindowStateChangeEvent (0x0x7fc66c2d1138)
+
+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 (0x0x7fc66c2d11a0) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7fc66c2d1208) 0
+ primary-for QTouchEvent (0x0x7fc66c2d11a0)
+ QInputEvent (0x0x7fc66c2d1270) 0
+ primary-for QPointerEvent (0x0x7fc66c2d1208)
+ QEvent (0x0x7fc66c2e82a0) 0
+ primary-for QInputEvent (0x0x7fc66c2d1270)
+
+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 (0x0x7fc66c2d12d8) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7fc66c2e8600) 0
+ primary-for QScrollPrepareEvent (0x0x7fc66c2d12d8)
+
+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 (0x0x7fc66c2d1340) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7fc66c2e8a20) 0
+ primary-for QScrollEvent (0x0x7fc66c2d1340)
+
+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 (0x0x7fc66c2d13a8) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7fc66c2e8de0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7fc66c2d13a8)
+
+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 (0x0x7fc66c2d1410) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7fc66c308180) 0
+ primary-for QApplicationStateChangeEvent (0x0x7fc66c2d1410)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7fc66c308480) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7fc66c34d600) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7fc66c34d7e0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7fc66c38d8a0) 0
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7fc66bfcb0c0) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7fc66bfcb120) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7fc66c108b40) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7fc66c108d80) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7fc66c108d20) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7fc66c132410) 0
+ QGradient (0x0x7fc66c12ec60) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7fc66c132478) 0
+ QGradient (0x0x7fc66c12ed80) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7fc66c1324e0) 0
+ QGradient (0x0x7fc66c12eea0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7fc66c12ef60) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7fc66bdc5060) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7fc66bdc5000) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7fc66be01420) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7fc66be29120) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7fc66beb1f70) 0
+ QTextFormat (0x0x7fc66beb98a0) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7fc66bf15d00) 0
+ QTextFormat (0x0x7fc66bf13d80) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7fc66bf4a958) 0
+ QTextFormat (0x0x7fc66bf50300) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7fc66bf6f548) 0
+ QTextCharFormat (0x0x7fc66bf6f5b0) 0
+ QTextFormat (0x0x7fc66bf771e0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7fc66bf98208) 0
+ QTextFormat (0x0x7fc66bf9c060) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7fc66bfb6e38) 0
+ QTextFrameFormat (0x0x7fc66bfb6ea0) 0
+ QTextFormat (0x0x7fc66bbc3480) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7fc66bbe9af8) 0
+ QTextCharFormat (0x0x7fc66bbe9b60) 0
+ QTextFormat (0x0x7fc66bbeb720) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7fc66bc17c60) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7fc66bc7e360) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7fc66bc7e780) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7fc66bc7e720) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7fc66bce9840) 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 (0x0x7fc66bce9cc0) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7fc66bce9f60) 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 (0x0x7fc66bcf17b8) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7fc66bce9f00) 0
+ primary-for QTextDocument (0x0x7fc66bcf17b8)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7fc66bd24840) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7fc66bdbbc60) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7fc66bdbbcc0) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7fc66bdbbd20) 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 (0x0x7fc66bdbebc8) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7fc66bdbbc00) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fc66bdbebc8)
+
+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 (0x0x7fc66ba65300) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7fc66ba65540) 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 (0x0x7fc66ba655a0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7fc66ba654e0) 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 (0x0x7fc66ba65ea0) 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 (0x0x7fc66baa92a0) 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 (0x0x7fc66baa9300) 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 (0x0x7fc66baa9360) 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 (0x0x7fc66baa93c0) 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 (0x0x7fc66baa9420) 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 (0x0x7fc66baa9480) 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 (0x0x7fc66baa9540) 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 (0x0x7fc66baa95a0) 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 (0x0x7fc66baa9600) 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 (0x0x7fc66ba860d0) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fc66baa9b40) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7fc66ba860d0)
+
+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 (0x0x7fc66ba86138) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7fc66baa9f00) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fc66ba86138)
+
+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 (0x0x7fc66ba861a0) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fc66ba86208) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7fc66ba861a0)
+ QAccessibleEvent (0x0x7fc66bada360) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fc66ba86208)
+
+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 (0x0x7fc66ba86270) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fc66ba862d8) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7fc66ba86270)
+ QAccessibleEvent (0x0x7fc66bada7e0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fc66ba862d8)
+
+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 (0x0x7fc66ba86340) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fc66ba863a8) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7fc66ba86340)
+ QAccessibleEvent (0x0x7fc66badac00) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fc66ba863a8)
+
+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 (0x0x7fc66ba86410) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fc66ba86478) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7fc66ba86410)
+ QAccessibleEvent (0x0x7fc66baef060) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fc66ba86478)
+
+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 (0x0x7fc66ba864e0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fc66baef4e0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7fc66ba864e0)
+
+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 (0x0x7fc66ba86548) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fc66baef900) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7fc66ba86548)
+
+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 (0x0x7fc66bb081e0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7fc66bb08480) 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 (0x0x7fc66ba865b0) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7fc66bb08420) 0
+ primary-for QAccessibleBridgePlugin (0x0x7fc66ba865b0)
+
+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 (0x0x7fc66ba86618) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7fc66bb08540) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fc66ba86618)
+
+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 (0x0x7fc66ba86680) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7fc66ba866e8) 0
+ primary-for QAccessibleApplication (0x0x7fc66ba86680)
+ QAccessibleInterface (0x0x7fc66bb085a0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fc66ba866e8)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7fc66bb08660) 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 (0x0x7fc66ba86750) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7fc66bb08600) 0
+ primary-for QAccessiblePlugin (0x0x7fc66ba86750)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7fc66bb08780) 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 (0x0x7fc66ba867b8) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7fc66bb08720) 0
+ primary-for QAction (0x0x7fc66ba867b8)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7fc66bb410c0) 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 (0x0x7fc66ba86820) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7fc66bb41060) 0
+ primary-for QActionGroup (0x0x7fc66ba86820)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7fc66bb41360) 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 (0x0x7fc66bb41c60) 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 (0x0x7fc66ba86a28) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7fc66ba86a90) 0
+ primary-for QBitmap (0x0x7fc66ba86a28)
+ QPaintDevice (0x0x7fc66bb87300) 0
+ primary-for QPixmap (0x0x7fc66ba86a90)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7fc66bb9ec00) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7fc66b7e6e40) 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 (0x0x7fc66b7f5150) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7fc66b7e6d80) 0
+ primary-for QWindow (0x0x7fc66b7f5150)
+ QSurface (0x0x7fc66b7e6de0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7fc66b821720) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7fc66b821840) 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 (0x0x7fc66b7f31a0) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7fc66b8217e0) 0
+ primary-for QClipboard (0x0x7fc66b7f31a0)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7fc66b821960) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7fc66b87b960) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7fc66b8d5720) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7fc66b8d57e0) 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 (0x0x7fc66b8d1d00) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7fc66b8d5780) 0
+ primary-for QDrag (0x0x7fc66b8d1d00)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7fc66b8d59c0) 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 (0x0x7fc66b8d1d68) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7fc66b8d1dd0) 0
+ primary-for QFileSystemModel (0x0x7fc66b8d1d68)
+ QObject (0x0x7fc66b8d5960) 0
+ primary-for QAbstractItemModel (0x0x7fc66b8d1dd0)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7fc66b91a0c0) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7fc66b9319c0) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7fc66b960420) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7fc66b5ee120) 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 (0x0x7fc66b98cf70) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7fc66b5ee0c0) 0
+ primary-for QGenericPlugin (0x0x7fc66b98cf70)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7fc66b5ee1e0) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7fc66b5ee2a0) 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 (0x0x7fc66b98c138) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7fc66b5ee240) 0
+ primary-for QInputMethod (0x0x7fc66b98c138)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7fc66b5ee540) 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 (0x0x7fc66b5ff000) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7fc66b5ff068) 0
+ primary-for QGuiApplication (0x0x7fc66b5ff000)
+ QObject (0x0x7fc66b5ee4e0) 0
+ primary-for QCoreApplication (0x0x7fc66b5ff068)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7fc66b5ee840) 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 (0x0x7fc66b5ee7e0) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7fc66b5ee900) 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 (0x0x7fc66b5ee8a0) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7fc66b5ee9c0) 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 (0x0x7fc66b5ff0d0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7fc66b5ee960) 0
+ primary-for QIconEnginePlugin (0x0x7fc66b5ff0d0)
+
+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 (0x0x7fc66b5eea80) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7fc66b5eecc0) 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 (0x0x7fc66b5ff138) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7fc66b5eec60) 0
+ primary-for QImageIOPlugin (0x0x7fc66b5ff138)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7fc66b651180) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7fc66b651240) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7fc66b651300) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7fc66b6ad060) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7fc66b7125a0) 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 (0x0x7fc66b6f3958) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7fc66b712540) 0
+ primary-for QMovie (0x0x7fc66b6f3958)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7fc66b712960) 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 (0x0x7fc66b6c1a80) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7fc66b7128a0) 0
+ primary-for QOffscreenSurface (0x0x7fc66b6c1a80)
+ QSurface (0x0x7fc66b712900) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7fc66b712c00) 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 (0x0x7fc66b6f39c0) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7fc66b712ba0) 0
+ primary-for QOpenGLContextGroup (0x0x7fc66b6f39c0)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7fc66b712de0) 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 (0x0x7fc66b6f3a28) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7fc66b712d80) 0
+ primary-for QOpenGLContext (0x0x7fc66b6f3a28)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7fc66b229060) 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 (0x0x7fc66b229000) 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 (0x0x7fc66b229120) 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 (0x0x7fc66b2290c0) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7fc66b229180) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7fc66b2297e0) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7fc66b229780) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7fc66b6f3e38) 0
+ QOpenGLFunctions (0x0x7fc66b2cdf60) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7fc66b32f300) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7fc66b6f3ea0) 0
+ QOpenGLFunctionsPrivate (0x0x7fc66b32f2a0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7fc66b02a000) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7fc66b09c600) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7fc66b154600) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7fc66b1545a0) 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 (0x0x7fc66adcdd00) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7fc66adccba0) 0
+ primary-for QPagedPaintDevice (0x0x7fc66adcdd00)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7fc66adccd20) 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 (0x0x7fc66add5380) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7fc66add53f0) 0
+ primary-for QPaintDeviceWindow (0x0x7fc66add5380)
+ QObject (0x0x7fc66adccc00) 0
+ primary-for QWindow (0x0x7fc66add53f0)
+ QSurface (0x0x7fc66adccc60) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7fc66adcccc0) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7fc66adccf00) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7fc66adccea0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7fc66ac15ae0) 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 (0x0x7fc66ac54300) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7fc66ac54900) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7fc66acda600) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7fc66acda5a0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7fc66ad98900) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7fc66a9c30c0) 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 (0x0x7fc66ac66e00) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7fc66a9c3000) 0
+ primary-for QPdfWriter (0x0x7fc66ac66e00)
+ QPagedPaintDevice (0x0x7fc66ad9ab60) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7fc66a9c3060) 16
+ primary-for QPagedPaintDevice (0x0x7fc66ad9ab60)
+
+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 (0x0x7fc66ad9abc8) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7fc66a9c32a0) 0
+ primary-for QPicture (0x0x7fc66ad9abc8)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7fc66aa0ad80) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7fc66aa0ad20) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7fc66aa8c060) 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 (0x0x7fc66aa841a0) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7fc66aa15a10) 0
+ primary-for QRasterWindow (0x0x7fc66aa841a0)
+ QWindow (0x0x7fc66aa15a80) 0
+ primary-for QPaintDeviceWindow (0x0x7fc66aa15a10)
+ QObject (0x0x7fc66aa73f00) 0
+ primary-for QWindow (0x0x7fc66aa15a80)
+ QSurface (0x0x7fc66aa73f60) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7fc66aa8c000) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7fc66aa8cd20) 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 (0x0x7fc66aa84270) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7fc66aa8ccc0) 0
+ primary-for QSessionManager (0x0x7fc66aa84270)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7fc66aa8cf00) 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 (0x0x7fc66aa842d8) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7fc66aa8cea0) 0
+ primary-for QShortcut (0x0x7fc66aa842d8)
+
+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 (0x0x7fc66aada420) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7fc66a7c8420) 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 (0x0x7fc66aa84c30) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7fc66aa84c98) 0
+ primary-for QStandardItemModel (0x0x7fc66aa84c30)
+ QObject (0x0x7fc66a7c83c0) 0
+ primary-for QAbstractItemModel (0x0x7fc66aa84c98)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7fc66a7c8780) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7fc66a878540) 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 (0x0x7fc66a86a9c0) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7fc66a8784e0) 0
+ primary-for QStyleHints (0x0x7fc66a86a9c0)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7fc66a878720) 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 (0x0x7fc66a86aa28) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7fc66a8786c0) 0
+ primary-for QTextObject (0x0x7fc66a86aa28)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7fc66a878900) 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 (0x0x7fc66a86aa90) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7fc66a86aaf8) 0
+ primary-for QTextBlockGroup (0x0x7fc66a86aa90)
+ QObject (0x0x7fc66a8788a0) 0
+ primary-for QTextObject (0x0x7fc66a86aaf8)
+
+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 (0x0x7fc66a878a80) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7fc66a878b40) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7fc66a878ba0) 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 (0x0x7fc66a86ab60) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7fc66a86abc8) 0
+ primary-for QTextFrame (0x0x7fc66a86ab60)
+ QObject (0x0x7fc66a878ae0) 0
+ primary-for QTextObject (0x0x7fc66a86abc8)
+
+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 (0x0x7fc66a8f3a20) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7fc66a8f3ae0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7fc66a8f3a80) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7fc66a97a360) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7fc66a9b81e0) 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 (0x0x7fc66a9add68) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7fc66a9b8180) 0
+ primary-for QSyntaxHighlighter (0x0x7fc66a9add68)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7fc66a9b8360) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7fc66a9b83c0) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7fc66a9b8480) 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 (0x0x7fc66a9addd0) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7fc66a9ade38) 0
+ primary-for QTextList (0x0x7fc66a9addd0)
+ QTextObject (0x0x7fc66a9adea0) 0
+ primary-for QTextBlockGroup (0x0x7fc66a9ade38)
+ QObject (0x0x7fc66a9b8420) 0
+ primary-for QTextObject (0x0x7fc66a9adea0)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7fc66a9b8840) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7fc66a5f30c0) 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 (0x0x7fc66a9adf08) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7fc66a9adf70) 0
+ primary-for QTextTable (0x0x7fc66a9adf08)
+ QTextObject (0x0x7fc66a5f4000) 0
+ primary-for QTextFrame (0x0x7fc66a9adf70)
+ QObject (0x0x7fc66a5f3060) 0
+ primary-for QTextObject (0x0x7fc66a5f4000)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7fc66a5f3480) 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 (0x0x7fc66a5f4068) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7fc66a5f3420) 0
+ primary-for QUndoGroup (0x0x7fc66a5f4068)
+
+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 (0x0x7fc66a5f3600) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7fc66a5f36c0) 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 (0x0x7fc66a5f40d0) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7fc66a5f3660) 0
+ primary-for QUndoStack (0x0x7fc66a5f40d0)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7fc66a5f38a0) 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 (0x0x7fc66a5f4138) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7fc66a5f3840) 0
+ primary-for QValidator (0x0x7fc66a5f4138)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7fc66a5f3b40) 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 (0x0x7fc66a5f41a0) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7fc66a5f4208) 0
+ primary-for QIntValidator (0x0x7fc66a5f41a0)
+ QObject (0x0x7fc66a5f3ae0) 0
+ primary-for QValidator (0x0x7fc66a5f4208)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7fc66a5f3d20) 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 (0x0x7fc66a5f4270) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7fc66a5f42d8) 0
+ primary-for QDoubleValidator (0x0x7fc66a5f4270)
+ QObject (0x0x7fc66a5f3cc0) 0
+ primary-for QValidator (0x0x7fc66a5f42d8)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7fc66a65d120) 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 (0x0x7fc66a5f4340) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7fc66a5f43a8) 0
+ primary-for QRegularExpressionValidator (0x0x7fc66a5f4340)
+ QObject (0x0x7fc66a65d0c0) 0
+ primary-for QValidator (0x0x7fc66a5f43a8)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7fc66a65d2a0) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7fc66a7513c0) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7fc66a3c2c00) 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 (0x0x7fc66a3cd7b8) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7fc66a3c2ba0) 0
+ primary-for QAbstractNetworkCache (0x0x7fc66a3cd7b8)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7fc66a3c2e40) 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 (0x0x7fc66a3cd820) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7fc66a3d41c0) 0
+ primary-for QAbstractSocket (0x0x7fc66a3cd820)
+ QObject (0x0x7fc66a3c2d80) 0
+ primary-for QIODevice (0x0x7fc66a3d41c0)
+ QIODeviceBase (0x0x7fc66a3c2de0) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7fc66a50d120) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7fc66a50d1e0) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7fc66a57e960) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7fc66a1fd120) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7fc66a2667e0) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7fc66a2e6180) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7fc66a347c00) 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 (0x0x7fc66a350888) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7fc66a347ba0) 0
+ primary-for QDnsLookup (0x0x7fc66a350888)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7fc66a347f00) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7fc66a376060) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7fc669ff7f60) 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 (0x0x7fc66a0085b0) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7fc66a008618) 0
+ primary-for QTcpSocket (0x0x7fc66a0085b0)
+ QIODevice (0x0x7fc66a35cf50) 0
+ primary-for QAbstractSocket (0x0x7fc66a008618)
+ QObject (0x0x7fc669ff7ea0) 0
+ primary-for QIODevice (0x0x7fc66a35cf50)
+ QIODeviceBase (0x0x7fc669ff7f00) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7fc66a022540) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7fc66a0eb840) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7fc669eeb720) 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 (0x0x7fc669ee0888) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7fc669ee08f0) 0
+ primary-for QSslSocket (0x0x7fc669ee0888)
+ QAbstractSocket (0x0x7fc669ee0958) 0
+ primary-for QTcpSocket (0x0x7fc669ee08f0)
+ QIODevice (0x0x7fc669e87e00) 0
+ primary-for QAbstractSocket (0x0x7fc669ee0958)
+ QObject (0x0x7fc669eeb660) 0
+ primary-for QIODevice (0x0x7fc669e87e00)
+ QIODeviceBase (0x0x7fc669eeb6c0) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7fc669eeb900) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7fc669eeb960) 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 (0x0x7fc669ee09c0) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7fc669eeb8a0) 0
+ primary-for QDtlsClientVerifier (0x0x7fc669ee09c0)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7fc669eebb40) 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 (0x0x7fc669ee0a28) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7fc669eebae0) 0
+ primary-for QDtls (0x0x7fc669ee0a28)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7fc669eebcc0) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7fc669bd31e0) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7fc669c49d20) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7fc669cdb660) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7fc669d47de0) 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 (0x0x7fc669d4f9c0) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7fc669d47d80) 0
+ primary-for QHttpMultiPart (0x0x7fc669d4f9c0)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7fc669d6e000) 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 (0x0x7fc669d4fa28) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7fc669d47f60) 0
+ primary-for QLocalServer (0x0x7fc669d4fa28)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7fc669d6e780) 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 (0x0x7fc669d4fbc8) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7fc669c5ad90) 0
+ primary-for QLocalSocket (0x0x7fc669d4fbc8)
+ QObject (0x0x7fc669d6e6c0) 0
+ primary-for QIODevice (0x0x7fc669c5ad90)
+ QIODeviceBase (0x0x7fc669d6e720) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7fc669d6ed80) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7fc669ade300) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7fc6697dac00) 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 (0x0x7fc6697f07b8) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7fc6697daba0) 0
+ primary-for QNetworkAccessManager (0x0x7fc6697f07b8)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7fc6697dad80) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7fc669885e40) 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 (0x0x7fc66988b618) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7fc669885de0) 0
+ primary-for QNetworkCookieJar (0x0x7fc66988b618)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7fc6698b6000) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7fc66991f7e0) 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 (0x0x7fc6699175b0) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7fc669917618) 0
+ primary-for QNetworkDiskCache (0x0x7fc6699175b0)
+ QObject (0x0x7fc66991f780) 0
+ primary-for QAbstractNetworkCache (0x0x7fc669917618)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7fc66991f9c0) 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 (0x0x7fc669917680) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+ QObject (0x0x7fc66991f960) 0
+ primary-for QNetworkInformation (0x0x7fc669917680)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7fc6699900c0) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7fc66976fb40) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7fc6694ab0c0) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7fc66951e840) 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 (0x0x7fc6695b1300) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7fc6695b1900) 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 (0x0x7fc6695aa410) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7fc669530cb0) 0
+ primary-for QNetworkReply (0x0x7fc6695aa410)
+ QObject (0x0x7fc6695b1840) 0
+ primary-for QIODevice (0x0x7fc669530cb0)
+ QIODeviceBase (0x0x7fc6695b18a0) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7fc66924ac60) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7fc6692b9b40) 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 (0x0x7fc6692bc820) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7fc6692b9ae0) 0
+ primary-for QTcpServer (0x0x7fc6692bc820)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7fc6692b9cc0) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7fc66935e480) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7fc669136de0) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7fc6691a1b40) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7fc668de2d80) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7fc668e78600) 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 (0x0x7fc668e84000) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7fc668e84068) 0
+ primary-for QUdpSocket (0x0x7fc668e84000)
+ QIODevice (0x0x7fc669188e70) 0
+ primary-for QAbstractSocket (0x0x7fc668e84068)
+ QObject (0x0x7fc668e78540) 0
+ primary-for QIODevice (0x0x7fc669188e70)
+ QIODeviceBase (0x0x7fc668e785a0) 0 empty
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7fc668e78840) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7fc668edfd80) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7fc668f40360) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7fc668f403c0) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7fc668f404e0) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7fc668e848f0) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7fc668f405a0) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7fc668e84958) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7fc668f40660) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7fc668e849c0) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7fc668f40720) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7fc668f40780) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7fc668f40420) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7fc668c749c0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7fc668c74cc0) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7fc668c74f60) 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 (0x0x7fc668c0d750) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7fc668c74f00) 0
+ primary-for QJSEngine (0x0x7fc668c0d750)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7fc668cd3900) 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 (0x0x7fc668cd3ae0) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7fc668d48600) 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 (0x0x7fc668d48c00) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=170 base align=8
+QQmlPrivate::RegisterType (0x0x7fc668dad420) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=152 align=8
+ base size=152 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7fc668dad480) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7fc668dad4e0) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7fc668dad540) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7fc668dad5a0) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7fc668dad900) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7fc668dad9c0) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7fc668dada20) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7fc668dada80) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7fc668dadae0) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7fc668dadb40) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7fc668dadba0) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7fc668a085a0) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7fc668a08600) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7fc668a08660) 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 (0x0x7fc66881b000) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7fc66881b060) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7fc6688448a0) 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 (0x0x7fc668842c30) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+ QObject (0x0x7fc668844840) 0
+ primary-for QQmlImageProviderBase (0x0x7fc668842c30)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7fc668844d80) 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 (0x0x7fc668842dd0) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7fc668842e38) 0
+ primary-for QQmlEngine (0x0x7fc668842dd0)
+ QObject (0x0x7fc668844d20) 0
+ primary-for QJSEngine (0x0x7fc668842e38)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7fc6688b50c0) 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 (0x0x7fc668842ea0) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7fc668842f08) 0
+ primary-for QQmlApplicationEngine (0x0x7fc668842ea0)
+ QJSEngine (0x0x7fc668842f70) 0
+ primary-for QQmlEngine (0x0x7fc668842f08)
+ QObject (0x0x7fc6688b5060) 0
+ primary-for QJSEngine (0x0x7fc668842f70)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7fc6688b52a0) 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 (0x0x7fc6688c5000) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7fc6688b5240) 0
+ primary-for QQmlComponent (0x0x7fc6688c5000)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7fc668922060) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7fc6689220c0) 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 (0x0x7fc6688c5138) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7fc668922000) 0
+ primary-for QQmlContext (0x0x7fc6688c5138)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7fc668922720) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7fc668922d20) 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 (0x0x7fc6688c5270) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7fc668922cc0) 0
+ primary-for QQmlExpression (0x0x7fc6688c5270)
+
+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 (0x0x7fc668922ea0) 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 (0x0x7fc6688c52d8) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7fc668922f00) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7fc6688c52d8)
+
+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 (0x0x7fc668922f60) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7fc6689a2540) 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 (0x0x7fc668833f50) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7fc6689a2480) 0
+ primary-for QQmlExtensionPlugin (0x0x7fc668833f50)
+ QQmlExtensionInterface (0x0x7fc6688c5340) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+ QQmlTypesExtensionInterface (0x0x7fc6689a24e0) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7fc6688c5340)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7fc6689a2780) 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 (0x0x7fc668833a10) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+ QObject (0x0x7fc6689a26c0) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7fc668833a10)
+ QQmlEngineExtensionInterface (0x0x7fc6689a2720) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7fc6689a2840) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7fc6689a2900) 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 (0x0x7fc6688c5410) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7fc6689a28a0) 0
+ primary-for QQmlFileSelector (0x0x7fc6688c5410)
+
+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 (0x0x7fc6689a2a80) 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 (0x0x7fc6689a2ae0) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7fc6688c5478) 0
+ QDebug (0x0x7fc6688c54e0) 0
+ QIODeviceBase (0x0x7fc6689a2b40) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7fc66868f2a0) 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 (0x0x7fc66868f300) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7fc66868f360) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7fc6686f15a0) 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 (0x0x7fc6686f2a28) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7fc6686f1540) 0
+ primary-for QQmlPropertyMap (0x0x7fc6686f2a28)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7fc6686f1780) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7fc6686f1cc0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7fc6684af060) 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 (0x0x7fc6684ae000) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7fc6684af000) 0
+ primary-for QOpenGLDebugLogger (0x0x7fc6684ae000)
+
+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 (0x0x7fc6684af780) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7fc6684afa20) 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 (0x0x7fc6684ae0d0) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7fc6684afa80) 0
+ primary-for QOpenGLPaintDevice (0x0x7fc6684ae0d0)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7fc6684afcc0) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7fc6685643c0) 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 (0x0x7fc66855ca90) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7fc668564360) 0
+ primary-for QOpenGLShader (0x0x7fc66855ca90)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7fc668564960) 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 (0x0x7fc66855cc30) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7fc668564900) 0
+ primary-for QOpenGLShaderProgram (0x0x7fc66855cc30)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7fc668564ae0) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7fc66826fcc0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7fc66826ff00) 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 (0x0x7fc66855cdd0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7fc66826fea0) 0
+ primary-for QOpenGLTimerQuery (0x0x7fc66855cdd0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7fc6682e0120) 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 (0x0x7fc66855ce38) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7fc6682e00c0) 0
+ primary-for QOpenGLTimeMonitor (0x0x7fc66855ce38)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7fc6682e02a0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7fc6683c0300) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7fc6683c04e0) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7fc6683c0540) 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 (0x0x7fc6683c0720) 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 (0x0x7fc6683c0900) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7fc6683a66e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6683c08a0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7fc6683c0c60) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7fc6683a6750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6683c0c00) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7fc668003000) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7fc6683a67b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6683c0f60) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7fc668003360) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7fc6683a6820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc668003300) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7fc6680036c0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7fc6683a6888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc668003660) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7fc668003a20) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7fc6683a68f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6680039c0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7fc668003d80) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7fc6683a6958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc668003d20) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7fc66803e120) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7fc6683a69c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66803e0c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7fc66803e480) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7fc6683a6a28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66803e420) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7fc66803e7e0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7fc6683a6a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66803e780) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7fc66803eb40) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7fc6683a6af8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66803eae0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7fc66803eea0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7fc6683a6b60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66803ee40) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7fc668085240) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7fc6683a6bc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6680851e0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7fc6680855a0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7fc6683a6c30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc668085540) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7fc668085900) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7fc6683a6c98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6680858a0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7fc668085c60) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7fc6683a6d00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc668085c00) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7fc6680d9000) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7fc6683a6d68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc668085f60) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7fc6680d9360) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7fc6683a6dd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6680d9300) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7fc6680d96c0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7fc6683a6e38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6680d9660) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7fc6680d9a20) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7fc6683a6ea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6680d99c0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7fc6680d9d80) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7fc6683a6f08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6680d9d20) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7fc66815e120) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7fc6683a6f70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66815e0c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7fc66815e480) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7fc66816c000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66815e420) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7fc66815e7e0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7fc66816c068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66815e780) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7fc66815eb40) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7fc66816c0d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66815eae0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7fc66815eea0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7fc66816c138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc66815ee40) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7fc668198240) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7fc66816c1a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fc6681981e0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7fc668198540) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7fc6681986c0) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7fc6681987e0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7fc668198840) 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 (0x0x7fc66816c208) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7fc668198780) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7fc66816c208)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7fc668198ea0) 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 (0x0x7fc66816c2d8) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7fc667fd31c0) 0
+ primary-for QOpenGLWindow (0x0x7fc66816c2d8)
+ QWindow (0x0x7fc667fd3230) 0
+ primary-for QPaintDeviceWindow (0x0x7fc667fd31c0)
+ QObject (0x0x7fc668198d80) 0
+ primary-for QWindow (0x0x7fc667fd3230)
+ QSurface (0x0x7fc668198de0) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7fc668198e40) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7fc667ddb0c0) 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 (0x0x7fc66816c3a8) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+ QObject (0x0x7fc667ddb060) 0
+ primary-for QQuickTransform (0x0x7fc66816c3a8)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7fc667ddb300) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7fc667ddb360) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7fc667ddb3c0) 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 (0x0x7fc667fd33f0) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+ QObject (0x0x7fc667ddb240) 0
+ primary-for QQuickItem (0x0x7fc667fd33f0)
+ QQmlParserStatus (0x0x7fc667ddb2a0) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7fc667f290c0) 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 (0x0x7fc667f29120) 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 (0x0x7fc667f1ee38) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+ QQuickItem (0x0x7fc667e7d8c0) 0
+ primary-for QQuickFramebufferObject (0x0x7fc667f1ee38)
+ QObject (0x0x7fc667f29000) 0
+ primary-for QQuickItem (0x0x7fc667e7d8c0)
+ QQmlParserStatus (0x0x7fc667f29060) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7fc667f292a0) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7fc667f29300) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7fc667f293c0) 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 (0x0x7fc667f1eea0) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+ QObject (0x0x7fc667f29360) 0
+ primary-for QQuickTextureFactory (0x0x7fc667f1eea0)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7fc667f294e0) 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 (0x0x7fc667f1ef08) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+ QObject (0x0x7fc667f29480) 0
+ primary-for QQuickImageResponse (0x0x7fc667f1ef08)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7fc667f296c0) 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 (0x0x7fc667f1ef70) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+ QQmlImageProviderBase (0x0x7fc667f55000) 0
+ primary-for QQuickImageProvider (0x0x7fc667f1ef70)
+ QObject (0x0x7fc667f29660) 0
+ primary-for QQmlImageProviderBase (0x0x7fc667f55000)
+
+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 (0x0x7fc667f55068) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+ QQuickImageProvider (0x0x7fc667f550d0) 0
+ primary-for QQuickAsyncImageProvider (0x0x7fc667f55068)
+ QQmlImageProviderBase (0x0x7fc667f55138) 0
+ primary-for QQuickImageProvider (0x0x7fc667f550d0)
+ QObject (0x0x7fc667f29780) 0
+ primary-for QQmlImageProviderBase (0x0x7fc667f55138)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7fc667f29840) 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 (0x0x7fc667f551a0) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+ QObject (0x0x7fc667f297e0) 0
+ primary-for QQuickItemGrabResult (0x0x7fc667f551a0)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7fc667f29a80) 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 (0x0x7fc667f55208) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+ QQuickItem (0x0x7fc667e7d930) 0
+ primary-for QQuickPaintedItem (0x0x7fc667f55208)
+ QObject (0x0x7fc667f299c0) 0
+ primary-for QQuickItem (0x0x7fc667e7d930)
+ QQmlParserStatus (0x0x7fc667f29a20) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7fc667fb71e0) 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 (0x0x7fc667f553a8) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+ QObject (0x0x7fc667fb7180) 0
+ primary-for QQuickRenderControl (0x0x7fc667f553a8)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7fc667fb73c0) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7fc667fb7540) 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 (0x0x7fc667f55410) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+ QObject (0x0x7fc667fb74e0) 0
+ primary-for QQuickTextDocument (0x0x7fc667f55410)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7fc667c2fd80) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7fc667c2fde0) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7fc667c2fe40) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7fc667c2fea0) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7fc667c2ff00) 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 (0x0x7fc667c2fd20) 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 (0x0x7fc667c81900) 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 (0x0x7fc667c5cea0) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+ QSGNode (0x0x7fc667cea180) 0
+ primary-for QSGBasicGeometryNode (0x0x7fc667c5cea0)
+
+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 (0x0x7fc667c5cf08) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+ QSGBasicGeometryNode (0x0x7fc667c5cf70) 0
+ primary-for QSGGeometryNode (0x0x7fc667c5cf08)
+ QSGNode (0x0x7fc667cea420) 0
+ primary-for QSGBasicGeometryNode (0x0x7fc667c5cf70)
+
+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 (0x0x7fc667d0c000) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+ QSGBasicGeometryNode (0x0x7fc667d0c068) 0
+ primary-for QSGClipNode (0x0x7fc667d0c000)
+ QSGNode (0x0x7fc667cea600) 0
+ primary-for QSGBasicGeometryNode (0x0x7fc667d0c068)
+
+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 (0x0x7fc667d0c0d0) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+ QSGNode (0x0x7fc667cea720) 0
+ primary-for QSGTransformNode (0x0x7fc667d0c0d0)
+
+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 (0x0x7fc667d0c138) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+ QSGNode (0x0x7fc667cea840) 0
+ primary-for QSGRootNode (0x0x7fc667d0c138)
+
+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 (0x0x7fc667d0ca28) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+ QSGNode (0x0x7fc667d45240) 0
+ primary-for QSGOpacityNode (0x0x7fc667d0ca28)
+
+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 (0x0x7fc667d45360) 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 (0x0x7fc667d45a80) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7fc667a4b300) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7fc667a4b360) 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 (0x0x7fc667d0cd00) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+ QWindow (0x0x7fc6679eb690) 0
+ primary-for QQuickWindow (0x0x7fc667d0cd00)
+ QObject (0x0x7fc667a4b240) 0
+ primary-for QWindow (0x0x7fc6679eb690)
+ QSurface (0x0x7fc667a4b2a0) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7fc667af3c00) 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 (0x0x7fc667af77b8) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+ QQuickWindow (0x0x7fc667af7820) 0
+ primary-for QQuickView (0x0x7fc667af77b8)
+ QWindow (0x0x7fc6679ebf50) 0
+ primary-for QQuickWindow (0x0x7fc667af7820)
+ QObject (0x0x7fc667af3b40) 0
+ primary-for QWindow (0x0x7fc6679ebf50)
+ QSurface (0x0x7fc667af3ba0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7fc667af3f00) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7fc667b31000) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=36 align=4
+ base size=36 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7fc667b31240) 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 (0x0x7fc667af3f60) 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 (0x0x7fc667837000) 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 (0x0x7fc667af7d68) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+ QSGMaterial (0x0x7fc667837480) 0
+ primary-for QSGFlatColorMaterial (0x0x7fc667af7d68)
+
+Class QNativeInterface::QSGOpenGLTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGOpenGLTexture::TypeInfo (0x0x7fc6678375a0) 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 (0x0x7fc667837540) 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 (0x0x7fc6678376c0) 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 (0x0x7fc667837660) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7fc6678377e0) 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 (0x0x7fc667af7dd0) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+ QObject (0x0x7fc667837780) 0
+ primary-for QSGTexture (0x0x7fc667af7dd0)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7fc667837a80) 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 (0x0x7fc667af7e38) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+ QSGTexture (0x0x7fc667af7ea0) 0
+ primary-for QSGDynamicTexture (0x0x7fc667af7e38)
+ QObject (0x0x7fc667837a20) 0
+ primary-for QSGTexture (0x0x7fc667af7ea0)
+
+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 (0x0x7fc667af7f08) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+ QSGGeometryNode (0x0x7fc667af7f70) 0
+ primary-for QSGImageNode (0x0x7fc667af7f08)
+ QSGBasicGeometryNode (0x0x7fc6678c2000) 0
+ primary-for QSGGeometryNode (0x0x7fc667af7f70)
+ QSGNode (0x0x7fc667837b40) 0
+ primary-for QSGBasicGeometryNode (0x0x7fc6678c2000)
+
+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 (0x0x7fc6678c21a0) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+ QSGGeometryNode (0x0x7fc6678c2208) 0
+ primary-for QSGNinePatchNode (0x0x7fc6678c21a0)
+ QSGBasicGeometryNode (0x0x7fc6678c2270) 0
+ primary-for QSGGeometryNode (0x0x7fc6678c2208)
+ QSGNode (0x0x7fc667910060) 0
+ primary-for QSGBasicGeometryNode (0x0x7fc6678c2270)
+
+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 (0x0x7fc6678c22d8) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+ QSGGeometryNode (0x0x7fc6678c2340) 0
+ primary-for QSGRectangleNode (0x0x7fc6678c22d8)
+ QSGBasicGeometryNode (0x0x7fc6678c23a8) 0
+ primary-for QSGGeometryNode (0x0x7fc6678c2340)
+ QSGNode (0x0x7fc6679100c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fc6678c23a8)
+
+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 (0x0x7fc6679101e0) 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 (0x0x7fc6678c2410) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+ QSGNode (0x0x7fc667910180) 0
+ primary-for QSGRenderNode (0x0x7fc6678c2410)
+
+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 (0x0x7fc6678c26e8) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+ QSGGeometryNode (0x0x7fc6678c2750) 0
+ primary-for QSGSimpleRectNode (0x0x7fc6678c26e8)
+ QSGBasicGeometryNode (0x0x7fc6678c27b8) 0
+ primary-for QSGGeometryNode (0x0x7fc6678c2750)
+ QSGNode (0x0x7fc6679109c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fc6678c27b8)
+
+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 (0x0x7fc6678c2820) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+ QSGMaterial (0x0x7fc667910a80) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7fc6678c2820)
+
+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 (0x0x7fc6678c2888) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+ QSGOpaqueTextureMaterial (0x0x7fc6678c28f0) 0
+ primary-for QSGTextureMaterial (0x0x7fc6678c2888)
+ QSGMaterial (0x0x7fc667910f00) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7fc6678c28f0)
+
+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 (0x0x7fc6678c2958) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+ QSGGeometryNode (0x0x7fc6678c29c0) 0
+ primary-for QSGSimpleTextureNode (0x0x7fc6678c2958)
+ QSGBasicGeometryNode (0x0x7fc6678c2a28) 0
+ primary-for QSGGeometryNode (0x0x7fc6678c29c0)
+ QSGNode (0x0x7fc667910f60) 0
+ primary-for QSGBasicGeometryNode (0x0x7fc6678c2a28)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7fc6675dc720) 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 (0x0x7fc6678c2bc8) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+ QObject (0x0x7fc6675dc6c0) 0
+ primary-for QSGTextureProvider (0x0x7fc6678c2bc8)
+
+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 (0x0x7fc6678c2c30) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+ QSGMaterial (0x0x7fc6675dc7e0) 0
+ primary-for QSGVertexColorMaterial (0x0x7fc6678c2c30)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7fc6675dc8a0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7fc6675dc840) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7fc6676c8780) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7fc6676c88a0) 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 (0x0x7fc667634e00) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7fc6676c87e0) 0
+ primary-for QWidget (0x0x7fc667634e00)
+ QPaintDevice (0x0x7fc6676c8840) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7fc6673da240) 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 (0x0x7fc6676c9a28) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7fc667634c40) 0
+ primary-for QAbstractButton (0x0x7fc6676c9a28)
+ QObject (0x0x7fc6673da180) 0
+ primary-for QWidget (0x0x7fc667634c40)
+ QPaintDevice (0x0x7fc6673da1e0) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7fc6673da480) 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 (0x0x7fc6676c9a90) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7fc6673fd000) 0
+ primary-for QAbstractSpinBox (0x0x7fc6676c9a90)
+ QObject (0x0x7fc6673da3c0) 0
+ primary-for QWidget (0x0x7fc6673fd000)
+ QPaintDevice (0x0x7fc6673da420) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7fc6673dacc0) 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 (0x0x7fc6676c9c30) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7fc6673fd4d0) 0
+ primary-for QAbstractSlider (0x0x7fc6676c9c30)
+ QObject (0x0x7fc6673dac00) 0
+ primary-for QWidget (0x0x7fc6673fd4d0)
+ QPaintDevice (0x0x7fc6673dac60) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7fc6673daf00) 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 (0x0x7fc6676c9c98) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7fc6676c9d00) 0
+ primary-for QSlider (0x0x7fc6676c9c98)
+ QWidget (0x0x7fc6673fda80) 0
+ primary-for QAbstractSlider (0x0x7fc6676c9d00)
+ QObject (0x0x7fc6673dae40) 0
+ primary-for QWidget (0x0x7fc6673fda80)
+ QPaintDevice (0x0x7fc6673daea0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7fc6674961e0) 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 (0x0x7fc6676c9d68) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7fc667496180) 0
+ primary-for QStyle (0x0x7fc6676c9d68)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7fc66753c420) 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 (0x0x7fc66753e068) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7fc6674d4620) 0
+ primary-for QTabBar (0x0x7fc66753e068)
+ QObject (0x0x7fc66753c360) 0
+ primary-for QWidget (0x0x7fc6674d4620)
+ QPaintDevice (0x0x7fc66753c3c0) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7fc66753c720) 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 (0x0x7fc66753e0d0) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7fc6674d4c40) 0
+ primary-for QTabWidget (0x0x7fc66753e0d0)
+ QObject (0x0x7fc66753c660) 0
+ primary-for QWidget (0x0x7fc6674d4c40)
+ QPaintDevice (0x0x7fc66753c6c0) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7fc66753cae0) 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 (0x0x7fc66753e138) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7fc6674d4f50) 0
+ primary-for QRubberBand (0x0x7fc66753e138)
+ QObject (0x0x7fc66753ca20) 0
+ primary-for QWidget (0x0x7fc6674d4f50)
+ QPaintDevice (0x0x7fc66753ca80) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7fc66753cf00) 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 (0x0x7fc66753e1a0) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7fc6671d50e0) 0
+ primary-for QFrame (0x0x7fc66753e1a0)
+ QObject (0x0x7fc66753ce40) 0
+ primary-for QWidget (0x0x7fc6671d50e0)
+ QPaintDevice (0x0x7fc66753cea0) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7fc667200240) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7fc66753e208) 0
+ QStyleOption (0x0x7fc6672002a0) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7fc6762f98f0) 0
+ QStyleOption (0x0x7fc6672004e0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7fc6762f9af8) 0
+ QStyleOption (0x0x7fc667200ae0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7fc66753e270) 0
+ QStyleOption (0x0x7fc667200d20) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7fc66753e2d8) 0
+ QStyleOption (0x0x7fc667200f60) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7fc66753e340) 0
+ QStyleOptionHeader (0x0x7fc66753e3a8) 0
+ QStyleOption (0x0x7fc6672911e0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7fc66753e478) 0
+ QStyleOption (0x0x7fc6672915a0) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7fc66753e618) 0
+ QStyleOption (0x0x7fc667291ba0) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7fc66753e8f0) 0
+ QStyleOption (0x0x7fc6673393c0) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7fc66753ea90) 0
+ QStyleOption (0x0x7fc6673399c0) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7fc66753eaf8) 0
+ QStyleOption (0x0x7fc667339c00) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7fc66753eb60) 0
+ QStyleOption (0x0x7fc667339e40) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7fc66753ebc8) 0
+ QStyleOption (0x0x7fc666feb0c0) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7fc66753ed68) 0
+ QStyleOption (0x0x7fc666feb6c0) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7fc66753edd0) 0
+ QStyleOption (0x0x7fc666feb900) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7fc66753ee38) 0
+ QStyleOption (0x0x7fc666febba0) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7fc66753eea0) 0
+ QStyleOptionComplex (0x0x7fc66753ef08) 0
+ QStyleOption (0x0x7fc666febe40) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7fc66753ef70) 0
+ QStyleOptionComplex (0x0x7fc66707c000) 0
+ QStyleOption (0x0x7fc6670781e0) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7fc66707c0d0) 0
+ QStyleOptionComplex (0x0x7fc66707c138) 0
+ QStyleOption (0x0x7fc667078420) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7fc66707c2d8) 0
+ QStyleOptionComplex (0x0x7fc66707c340) 0
+ QStyleOption (0x0x7fc667078a20) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7fc66707c3a8) 0
+ QStyleOptionComplex (0x0x7fc66707c410) 0
+ QStyleOption (0x0x7fc667078c60) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7fc66707c478) 0
+ QStyleOptionComplex (0x0x7fc66707c4e0) 0
+ QStyleOption (0x0x7fc667078ea0) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7fc66707c548) 0
+ QStyleOptionComplex (0x0x7fc66707c5b0) 0
+ QStyleOption (0x0x7fc667102120) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7fc66707c618) 0
+ QStyleOption (0x0x7fc667102360) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7fc6671026c0) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7fc66707c680) 0
+ QStyleHintReturn (0x0x7fc667102720) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7fc66707c750) 0
+ QStyleHintReturn (0x0x7fc667102780) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7fc667102900) 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 (0x0x7fc66707c820) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7fc6671028a0) 0
+ primary-for QAbstractItemDelegate (0x0x7fc66707c820)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7fc667102b40) 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 (0x0x7fc66707c888) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7fc66707c8f0) 0
+ primary-for QAbstractScrollArea (0x0x7fc66707c888)
+ QWidget (0x0x7fc66711d3f0) 0
+ primary-for QFrame (0x0x7fc66707c8f0)
+ QObject (0x0x7fc667102a80) 0
+ primary-for QWidget (0x0x7fc66711d3f0)
+ QPaintDevice (0x0x7fc667102ae0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7fc667102e40) 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 (0x0x7fc66707c958) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7fc66707c9c0) 0
+ primary-for QAbstractItemView (0x0x7fc66707c958)
+ QFrame (0x0x7fc66707ca28) 0
+ primary-for QAbstractScrollArea (0x0x7fc66707c9c0)
+ QWidget (0x0x7fc66711d5b0) 0
+ primary-for QFrame (0x0x7fc66707ca28)
+ QObject (0x0x7fc667102d80) 0
+ primary-for QWidget (0x0x7fc66711d5b0)
+ QPaintDevice (0x0x7fc667102de0) 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 (0x0x7fc66716aaf0) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7fc66707cbc8) 0
+ primary-for QAccessibleWidget (0x0x7fc66716aaf0)
+ QAccessibleInterface (0x0x7fc6671968a0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fc66707cbc8)
+ QAccessibleActionInterface (0x0x7fc667196900) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7fc667196a20) 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 (0x0x7fc66707cc30) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7fc66707cc98) 0
+ primary-for QApplication (0x0x7fc66707cc30)
+ QCoreApplication (0x0x7fc66707cd00) 0
+ primary-for QGuiApplication (0x0x7fc66707cc98)
+ QObject (0x0x7fc6671969c0) 0
+ primary-for QCoreApplication (0x0x7fc66707cd00)
+
+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 (0x0x7fc667196cc0) 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 (0x0x7fc66707cd68) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7fc667196f00) 0
+ primary-for QSpacerItem (0x0x7fc66707cd68)
+
+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 (0x0x7fc66707cdd0) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7fc666e28180) 0
+ primary-for QWidgetItem (0x0x7fc66707cdd0)
+
+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 (0x0x7fc66707ce38) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7fc66707cea0) 0
+ primary-for QWidgetItemV2 (0x0x7fc66707ce38)
+ QLayoutItem (0x0x7fc666e28360) 0
+ primary-for QWidgetItem (0x0x7fc66707cea0)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7fc666e284e0) 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 (0x0x7fc66716acb0) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7fc666e28420) 0
+ primary-for QLayout (0x0x7fc66716acb0)
+ QLayoutItem (0x0x7fc666e28480) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7fc666e287e0) 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 (0x0x7fc66707cf08) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7fc666e60000) 0
+ primary-for QGridLayout (0x0x7fc66707cf08)
+ QObject (0x0x7fc666e28720) 0
+ primary-for QLayout (0x0x7fc666e60000)
+ QLayoutItem (0x0x7fc666e28780) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7fc666e28a80) 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 (0x0x7fc66707cf70) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7fc666e60070) 0
+ primary-for QBoxLayout (0x0x7fc66707cf70)
+ QObject (0x0x7fc666e289c0) 0
+ primary-for QLayout (0x0x7fc666e60070)
+ QLayoutItem (0x0x7fc666e28a20) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7fc666e28cc0) 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 (0x0x7fc666e96000) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7fc666e96068) 0
+ primary-for QHBoxLayout (0x0x7fc666e96000)
+ QLayout (0x0x7fc666e60380) 0
+ primary-for QBoxLayout (0x0x7fc666e96068)
+ QObject (0x0x7fc666e28c00) 0
+ primary-for QLayout (0x0x7fc666e60380)
+ QLayoutItem (0x0x7fc666e28c60) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7fc666e28e40) 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 (0x0x7fc666e960d0) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7fc666e96138) 0
+ primary-for QVBoxLayout (0x0x7fc666e960d0)
+ QLayout (0x0x7fc666e603f0) 0
+ primary-for QBoxLayout (0x0x7fc666e96138)
+ QObject (0x0x7fc666e28d80) 0
+ primary-for QLayout (0x0x7fc666e603f0)
+ QLayoutItem (0x0x7fc666e28de0) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7fc666e28f60) 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 (0x0x7fc666e961a0) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7fc666e28f00) 0
+ primary-for QButtonGroup (0x0x7fc666e961a0)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7fc666eb91e0) 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 (0x0x7fc666e96208) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7fc666e60460) 0
+ primary-for QCalendarWidget (0x0x7fc666e96208)
+ QObject (0x0x7fc666eb9120) 0
+ primary-for QWidget (0x0x7fc666e60460)
+ QPaintDevice (0x0x7fc666eb9180) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7fc666eb9660) 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 (0x0x7fc666e96270) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7fc666e962d8) 0
+ primary-for QCheckBox (0x0x7fc666e96270)
+ QWidget (0x0x7fc666e60850) 0
+ primary-for QAbstractButton (0x0x7fc666e962d8)
+ QObject (0x0x7fc666eb95a0) 0
+ primary-for QWidget (0x0x7fc666e60850)
+ QPaintDevice (0x0x7fc666eb9600) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7fc666eb98a0) 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 (0x0x7fc666e96340) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7fc666e608c0) 0
+ primary-for QDialog (0x0x7fc666e96340)
+ QObject (0x0x7fc666eb97e0) 0
+ primary-for QWidget (0x0x7fc666e608c0)
+ QPaintDevice (0x0x7fc666eb9840) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7fc666eb9ae0) 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 (0x0x7fc666e963a8) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7fc666e96410) 0
+ primary-for QColorDialog (0x0x7fc666e963a8)
+ QWidget (0x0x7fc666e60a10) 0
+ primary-for QDialog (0x0x7fc666e96410)
+ QObject (0x0x7fc666eb9a20) 0
+ primary-for QWidget (0x0x7fc666e60a10)
+ QPaintDevice (0x0x7fc666eb9a80) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7fc666f58120) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7fc666f58240) 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 (0x0x7fc666e965b0) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7fc666e96618) 0
+ primary-for QColumnView (0x0x7fc666e965b0)
+ QAbstractScrollArea (0x0x7fc666e96680) 0
+ primary-for QAbstractItemView (0x0x7fc666e96618)
+ QFrame (0x0x7fc666e966e8) 0
+ primary-for QAbstractScrollArea (0x0x7fc666e96680)
+ QWidget (0x0x7fc666e60d20) 0
+ primary-for QFrame (0x0x7fc666e966e8)
+ QObject (0x0x7fc666f58180) 0
+ primary-for QWidget (0x0x7fc666e60d20)
+ QPaintDevice (0x0x7fc666f581e0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7fc666f58480) 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 (0x0x7fc666e96750) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7fc666e60d90) 0
+ primary-for QComboBox (0x0x7fc666e96750)
+ QObject (0x0x7fc666f583c0) 0
+ primary-for QWidget (0x0x7fc666e60d90)
+ QPaintDevice (0x0x7fc666f58420) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7fc666f58a20) 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 (0x0x7fc666e967b8) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7fc666e96820) 0
+ primary-for QPushButton (0x0x7fc666e967b8)
+ QWidget (0x0x7fc666f922a0) 0
+ primary-for QAbstractButton (0x0x7fc666e96820)
+ QObject (0x0x7fc666f58960) 0
+ primary-for QWidget (0x0x7fc666f922a0)
+ QPaintDevice (0x0x7fc666f589c0) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7fc666f58c60) 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 (0x0x7fc666e96888) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7fc666e968f0) 0
+ primary-for QCommandLinkButton (0x0x7fc666e96888)
+ QAbstractButton (0x0x7fc666e96958) 0
+ primary-for QPushButton (0x0x7fc666e968f0)
+ QWidget (0x0x7fc666f92310) 0
+ primary-for QAbstractButton (0x0x7fc666e96958)
+ QObject (0x0x7fc666f58ba0) 0
+ primary-for QWidget (0x0x7fc666f92310)
+ QPaintDevice (0x0x7fc666f58c00) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7fc666f58e40) 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 (0x0x7fc666e969c0) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7fc666e96a28) 0
+ primary-for QCommonStyle (0x0x7fc666e969c0)
+ QObject (0x0x7fc666f58de0) 0
+ primary-for QStyle (0x0x7fc666e96a28)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7fc666bfe060) 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 (0x0x7fc666e96a90) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7fc666bfe000) 0
+ primary-for QCompleter (0x0x7fc666e96a90)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7fc666bfe3c0) 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 (0x0x7fc666e96af8) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7fc666bfe360) 0
+ primary-for QDataWidgetMapper (0x0x7fc666e96af8)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7fc666bfe6c0) 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 (0x0x7fc666e96b60) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7fc666e96bc8) 0
+ primary-for QDateTimeEdit (0x0x7fc666e96b60)
+ QWidget (0x0x7fc666f92700) 0
+ primary-for QAbstractSpinBox (0x0x7fc666e96bc8)
+ QObject (0x0x7fc666bfe600) 0
+ primary-for QWidget (0x0x7fc666f92700)
+ QPaintDevice (0x0x7fc666bfe660) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7fc666bfec60) 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 (0x0x7fc666e96d68) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7fc666e96dd0) 0
+ primary-for QTimeEdit (0x0x7fc666e96d68)
+ QAbstractSpinBox (0x0x7fc666e96e38) 0
+ primary-for QDateTimeEdit (0x0x7fc666e96dd0)
+ QWidget (0x0x7fc666f92c40) 0
+ primary-for QAbstractSpinBox (0x0x7fc666e96e38)
+ QObject (0x0x7fc666bfeba0) 0
+ primary-for QWidget (0x0x7fc666f92c40)
+ QPaintDevice (0x0x7fc666bfec00) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7fc666bfede0) 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 (0x0x7fc666e96ea0) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7fc666e96f08) 0
+ primary-for QDateEdit (0x0x7fc666e96ea0)
+ QAbstractSpinBox (0x0x7fc666e96f70) 0
+ primary-for QDateTimeEdit (0x0x7fc666e96f08)
+ QWidget (0x0x7fc666f92cb0) 0
+ primary-for QAbstractSpinBox (0x0x7fc666e96f70)
+ QObject (0x0x7fc666bfed20) 0
+ primary-for QWidget (0x0x7fc666f92cb0)
+ QPaintDevice (0x0x7fc666bfed80) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7fc666cad180) 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 (0x0x7fc666cb7000) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7fc666cb7068) 0
+ primary-for QDial (0x0x7fc666cb7000)
+ QWidget (0x0x7fc666f92d20) 0
+ primary-for QAbstractSlider (0x0x7fc666cb7068)
+ QObject (0x0x7fc666cad0c0) 0
+ primary-for QWidget (0x0x7fc666f92d20)
+ QPaintDevice (0x0x7fc666cad120) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7fc666cad3c0) 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 (0x0x7fc666cb70d0) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7fc666f92d90) 0
+ primary-for QDialogButtonBox (0x0x7fc666cb70d0)
+ QObject (0x0x7fc666cad300) 0
+ primary-for QWidget (0x0x7fc666f92d90)
+ QPaintDevice (0x0x7fc666cad360) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7fc666cada80) 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 (0x0x7fc666cb7270) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7fc666ccde70) 0
+ primary-for QDockWidget (0x0x7fc666cb7270)
+ QObject (0x0x7fc666cad9c0) 0
+ primary-for QWidget (0x0x7fc666ccde70)
+ QPaintDevice (0x0x7fc666cada20) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7fc666d8a180) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7fc666d8a7e0) 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 (0x0x7fc666cb7548) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7fc666cb75b0) 0
+ primary-for QErrorMessage (0x0x7fc666cb7548)
+ QWidget (0x0x7fc666d398c0) 0
+ primary-for QDialog (0x0x7fc666cb75b0)
+ QObject (0x0x7fc666d8a720) 0
+ primary-for QWidget (0x0x7fc666d398c0)
+ QPaintDevice (0x0x7fc666d8a780) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7fc666d8aa20) 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 (0x0x7fc666cb7618) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7fc666cb7680) 0
+ primary-for QFileDialog (0x0x7fc666cb7618)
+ QWidget (0x0x7fc666d39930) 0
+ primary-for QDialog (0x0x7fc666cb7680)
+ QObject (0x0x7fc666d8a960) 0
+ primary-for QWidget (0x0x7fc666d39930)
+ QPaintDevice (0x0x7fc666d8a9c0) 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 (0x0x7fc666cb7820) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7fc666a353c0) 0
+ primary-for QFileIconProvider (0x0x7fc666cb7820)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7fc666a355a0) 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 (0x0x7fc666cb7888) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7fc6669e92a0) 0
+ primary-for QFocusFrame (0x0x7fc666cb7888)
+ QObject (0x0x7fc666a354e0) 0
+ primary-for QWidget (0x0x7fc6669e92a0)
+ QPaintDevice (0x0x7fc666a35540) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7fc666a357e0) 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 (0x0x7fc666cb78f0) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7fc666cb7958) 0
+ primary-for QFontComboBox (0x0x7fc666cb78f0)
+ QWidget (0x0x7fc6669e9310) 0
+ primary-for QComboBox (0x0x7fc666cb7958)
+ QObject (0x0x7fc666a35720) 0
+ primary-for QWidget (0x0x7fc6669e9310)
+ QPaintDevice (0x0x7fc666a35780) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7fc666a35ea0) 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 (0x0x7fc666cb7af8) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7fc666cb7b60) 0
+ primary-for QFontDialog (0x0x7fc666cb7af8)
+ QWidget (0x0x7fc6669e95b0) 0
+ primary-for QDialog (0x0x7fc666cb7b60)
+ QObject (0x0x7fc666a35de0) 0
+ primary-for QWidget (0x0x7fc6669e95b0)
+ QPaintDevice (0x0x7fc666a35e40) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7fc666afc5a0) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7fc666afc600) 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 (0x0x7fc666cb7d00) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7fc6669e98c0) 0
+ primary-for QFormLayout (0x0x7fc666cb7d00)
+ QObject (0x0x7fc666afc4e0) 0
+ primary-for QLayout (0x0x7fc6669e98c0)
+ QLayoutItem (0x0x7fc666afc540) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7fc666bb78a0) 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 (0x0x7fc666b9e888) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7fc666bb7840) 0
+ primary-for QGesture (0x0x7fc666b9e888)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7fc666bb7a80) 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 (0x0x7fc666b9e8f0) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7fc666b9e958) 0
+ primary-for QPanGesture (0x0x7fc666b9e8f0)
+ QObject (0x0x7fc666bb7a20) 0
+ primary-for QGesture (0x0x7fc666b9e958)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7fc666bb7c60) 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 (0x0x7fc666b9e9c0) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7fc666b9ea28) 0
+ primary-for QPinchGesture (0x0x7fc666b9e9c0)
+ QObject (0x0x7fc666bb7c00) 0
+ primary-for QGesture (0x0x7fc666b9ea28)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7fc6668a2300) 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 (0x0x7fc6668a52d8) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7fc6668a5340) 0
+ primary-for QSwipeGesture (0x0x7fc6668a52d8)
+ QObject (0x0x7fc6668a22a0) 0
+ primary-for QGesture (0x0x7fc6668a5340)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7fc6668a25a0) 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 (0x0x7fc6668a53a8) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7fc6668a5410) 0
+ primary-for QTapGesture (0x0x7fc6668a53a8)
+ QObject (0x0x7fc6668a2540) 0
+ primary-for QGesture (0x0x7fc6668a5410)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7fc6668a2780) 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 (0x0x7fc6668a5478) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7fc6668a54e0) 0
+ primary-for QTapAndHoldGesture (0x0x7fc6668a5478)
+ QObject (0x0x7fc6668a2720) 0
+ primary-for QGesture (0x0x7fc6668a54e0)
+
+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 (0x0x7fc6668a5548) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7fc6668a2900) 0
+ primary-for QGestureEvent (0x0x7fc6668a5548)
+
+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 (0x0x7fc6668e2900) 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 (0x0x7fc6668e2d20) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7fc666665f60) 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 (0x0x7fc66660cb60) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7fc666665ea0) 0
+ primary-for QGraphicsObject (0x0x7fc66660cb60)
+ QGraphicsItem (0x0x7fc666665f00) 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 (0x0x7fc6666e5000) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7fc6666e4060) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fc6666e5000)
+
+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 (0x0x7fc6666e5068) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fc6666e50d0) 0
+ primary-for QGraphicsPathItem (0x0x7fc6666e5068)
+ QGraphicsItem (0x0x7fc6666e4180) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fc6666e50d0)
+
+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 (0x0x7fc6666e5138) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fc6666e51a0) 0
+ primary-for QGraphicsRectItem (0x0x7fc6666e5138)
+ QGraphicsItem (0x0x7fc6666e42a0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fc6666e51a0)
+
+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 (0x0x7fc6666e5208) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fc6666e5270) 0
+ primary-for QGraphicsEllipseItem (0x0x7fc6666e5208)
+ QGraphicsItem (0x0x7fc6666e4420) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fc6666e5270)
+
+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 (0x0x7fc6666e52d8) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fc6666e5340) 0
+ primary-for QGraphicsPolygonItem (0x0x7fc6666e52d8)
+ QGraphicsItem (0x0x7fc6666e45a0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fc6666e5340)
+
+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 (0x0x7fc6666e53a8) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7fc6666e46c0) 0
+ primary-for QGraphicsLineItem (0x0x7fc6666e53a8)
+
+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 (0x0x7fc6666e5410) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7fc6666e4840) 0
+ primary-for QGraphicsPixmapItem (0x0x7fc6666e5410)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7fc6666e4a80) 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 (0x0x7fc6666e5478) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7fc666751000) 0
+ primary-for QGraphicsTextItem (0x0x7fc6666e5478)
+ QObject (0x0x7fc6666e49c0) 0
+ primary-for QGraphicsObject (0x0x7fc666751000)
+ QGraphicsItem (0x0x7fc6666e4a20) 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 (0x0x7fc6666e55b0) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fc6666e5618) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7fc6666e55b0)
+ QGraphicsItem (0x0x7fc6666e4d20) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fc6666e5618)
+
+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 (0x0x7fc6666e5680) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7fc6666e4e40) 0
+ primary-for QGraphicsItemGroup (0x0x7fc6666e5680)
+
+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 (0x0x7fc66678e540) 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 (0x0x7fc6666e5750) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7fc66678ec00) 0
+ primary-for QGraphicsLayout (0x0x7fc6666e5750)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7fc66678ef00) 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 (0x0x7fc6666e57b8) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7fc66678eea0) 0
+ primary-for QGraphicsAnchor (0x0x7fc6666e57b8)
+
+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 (0x0x7fc6666e5820) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7fc6666e5888) 0
+ primary-for QGraphicsAnchorLayout (0x0x7fc6666e5820)
+ QGraphicsLayoutItem (0x0x7fc6663ea0c0) 0
+ primary-for QGraphicsLayout (0x0x7fc6666e5888)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7fc6663ea240) 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 (0x0x7fc6666e58f0) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7fc6663ea1e0) 0
+ primary-for QGraphicsEffect (0x0x7fc6666e58f0)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7fc6663ea8a0) 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 (0x0x7fc6666e5a90) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7fc6666e5af8) 0
+ primary-for QGraphicsColorizeEffect (0x0x7fc6666e5a90)
+ QObject (0x0x7fc6663ea840) 0
+ primary-for QGraphicsEffect (0x0x7fc6666e5af8)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7fc6663eaa80) 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 (0x0x7fc6666e5b60) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7fc6666e5bc8) 0
+ primary-for QGraphicsBlurEffect (0x0x7fc6666e5b60)
+ QObject (0x0x7fc6663eaa20) 0
+ primary-for QGraphicsEffect (0x0x7fc6666e5bc8)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7fc6664ab1e0) 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 (0x0x7fc6666e5d68) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7fc6666e5dd0) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7fc6666e5d68)
+ QObject (0x0x7fc6664ab180) 0
+ primary-for QGraphicsEffect (0x0x7fc6666e5dd0)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7fc6664ab600) 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 (0x0x7fc6666e5e38) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7fc6666e5ea0) 0
+ primary-for QGraphicsOpacityEffect (0x0x7fc6666e5e38)
+ QObject (0x0x7fc6664ab5a0) 0
+ primary-for QGraphicsEffect (0x0x7fc6666e5ea0)
+
+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 (0x0x7fc6666e5f08) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7fc6666e5f70) 0
+ primary-for QGraphicsGridLayout (0x0x7fc6666e5f08)
+ QGraphicsLayoutItem (0x0x7fc6664ab780) 0
+ primary-for QGraphicsLayout (0x0x7fc6666e5f70)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7fc6664ab960) 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 (0x0x7fc6665000d0) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7fc6664ab900) 0
+ primary-for QGraphicsItemAnimation (0x0x7fc6665000d0)
+
+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 (0x0x7fc666500138) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7fc6665001a0) 0
+ primary-for QGraphicsLinearLayout (0x0x7fc666500138)
+ QGraphicsLayoutItem (0x0x7fc6664aba20) 0
+ primary-for QGraphicsLayout (0x0x7fc6665001a0)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7fc6664abd20) 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 (0x0x7fc666751c40) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7fc666751cb0) 0
+ primary-for QGraphicsWidget (0x0x7fc666751c40)
+ QObject (0x0x7fc6664abc00) 0
+ primary-for QGraphicsObject (0x0x7fc666751cb0)
+ QGraphicsItem (0x0x7fc6664abc60) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7fc6664abcc0) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7fc66654f1e0) 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 (0x0x7fc6665002d8) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7fc666751e00) 0
+ primary-for QGraphicsProxyWidget (0x0x7fc6665002d8)
+ QGraphicsObject (0x0x7fc666751e70) 0
+ primary-for QGraphicsWidget (0x0x7fc666751e00)
+ QObject (0x0x7fc66654f0c0) 0
+ primary-for QGraphicsObject (0x0x7fc666751e70)
+ QGraphicsItem (0x0x7fc66654f120) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7fc66654f180) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7fc66654f540) 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 (0x0x7fc6665004e0) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7fc66654f4e0) 0
+ primary-for QGraphicsScene (0x0x7fc6665004e0)
+
+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 (0x0x7fc666500f08) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7fc6661d4960) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc666500f08)
+
+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 (0x0x7fc666500f70) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fc666500ea0) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7fc666500f70)
+ QEvent (0x0x7fc6661d4b40) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc666500ea0)
+
+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 (0x0x7fc66628c000) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fc66628c068) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7fc66628c000)
+ QEvent (0x0x7fc6661d4c60) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc66628c068)
+
+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 (0x0x7fc66628c0d0) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fc66628c138) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7fc66628c0d0)
+ QEvent (0x0x7fc6661d4d80) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc66628c138)
+
+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 (0x0x7fc66628c1a0) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fc66628c208) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7fc66628c1a0)
+ QEvent (0x0x7fc6661d4ea0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc66628c208)
+
+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 (0x0x7fc66628c270) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fc66628c2d8) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7fc66628c270)
+ QEvent (0x0x7fc6661d41e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc66628c2d8)
+
+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 (0x0x7fc66628c340) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fc66628c3a8) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7fc66628c340)
+ QEvent (0x0x7fc6662b20c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc66628c3a8)
+
+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 (0x0x7fc66628c410) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fc66628c478) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7fc66628c410)
+ QEvent (0x0x7fc6662b21e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc66628c478)
+
+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 (0x0x7fc66628c4e0) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fc66628c548) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7fc66628c4e0)
+ QEvent (0x0x7fc6662b2300) 0
+ primary-for QGraphicsSceneEvent (0x0x7fc66628c548)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7fc6662b2480) 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 (0x0x7fc66628c5b0) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7fc6662b2420) 0
+ primary-for QGraphicsTransform (0x0x7fc66628c5b0)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7fc6662b2660) 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 (0x0x7fc66628c618) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7fc66628c680) 0
+ primary-for QGraphicsScale (0x0x7fc66628c618)
+ QObject (0x0x7fc6662b2600) 0
+ primary-for QGraphicsTransform (0x0x7fc66628c680)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7fc6662b2840) 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 (0x0x7fc66628c6e8) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7fc66628c750) 0
+ primary-for QGraphicsRotation (0x0x7fc66628c6e8)
+ QObject (0x0x7fc6662b27e0) 0
+ primary-for QGraphicsTransform (0x0x7fc66628c750)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7fc6662b2a80) 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 (0x0x7fc66628c7b8) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7fc66628c820) 0
+ primary-for QScrollArea (0x0x7fc66628c7b8)
+ QFrame (0x0x7fc66628c888) 0
+ primary-for QAbstractScrollArea (0x0x7fc66628c820)
+ QWidget (0x0x7fc66656b620) 0
+ primary-for QFrame (0x0x7fc66628c888)
+ QObject (0x0x7fc6662b29c0) 0
+ primary-for QWidget (0x0x7fc66656b620)
+ QPaintDevice (0x0x7fc6662b2a20) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7fc6662b2cc0) 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 (0x0x7fc66628c8f0) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7fc66628c958) 0
+ primary-for QGraphicsView (0x0x7fc66628c8f0)
+ QFrame (0x0x7fc66628c9c0) 0
+ primary-for QAbstractScrollArea (0x0x7fc66628c958)
+ QWidget (0x0x7fc66656b690) 0
+ primary-for QFrame (0x0x7fc66628c9c0)
+ QObject (0x0x7fc6662b2c00) 0
+ primary-for QWidget (0x0x7fc66656b690)
+ QPaintDevice (0x0x7fc6662b2c60) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7fc66633dd20) 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 (0x0x7fc66628cc98) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7fc66656be00) 0
+ primary-for QGroupBox (0x0x7fc66628cc98)
+ QObject (0x0x7fc66633dc60) 0
+ primary-for QWidget (0x0x7fc66656be00)
+ QPaintDevice (0x0x7fc66633dcc0) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7fc66633df60) 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 (0x0x7fc66628cd00) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7fc66628cd68) 0
+ primary-for QHeaderView (0x0x7fc66628cd00)
+ QAbstractScrollArea (0x0x7fc66628cdd0) 0
+ primary-for QAbstractItemView (0x0x7fc66628cd68)
+ QFrame (0x0x7fc66628ce38) 0
+ primary-for QAbstractScrollArea (0x0x7fc66628cdd0)
+ QWidget (0x0x7fc66656be70) 0
+ primary-for QFrame (0x0x7fc66628ce38)
+ QObject (0x0x7fc66633dea0) 0
+ primary-for QWidget (0x0x7fc66656be70)
+ QPaintDevice (0x0x7fc66633df00) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7fc66602d420) 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 (0x0x7fc66628cea0) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7fc666004150) 0
+ primary-for QLineEdit (0x0x7fc66628cea0)
+ QObject (0x0x7fc66602d360) 0
+ primary-for QWidget (0x0x7fc666004150)
+ QPaintDevice (0x0x7fc66602d3c0) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7fc66602d7e0) 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 (0x0x7fc66628cf08) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7fc66628cf70) 0
+ primary-for QInputDialog (0x0x7fc66628cf08)
+ QWidget (0x0x7fc666004460) 0
+ primary-for QDialog (0x0x7fc66628cf70)
+ QObject (0x0x7fc66602d720) 0
+ primary-for QWidget (0x0x7fc666004460)
+ QPaintDevice (0x0x7fc66602d780) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7fc66602dd80) 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 (0x0x7fc666081138) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7fc6660811a0) 0
+ primary-for QItemDelegate (0x0x7fc666081138)
+ QObject (0x0x7fc66602dd20) 0
+ primary-for QAbstractItemDelegate (0x0x7fc6660811a0)
+
+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 (0x0x7fc66602df00) 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 (0x0x7fc6660ea2a0) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7fc6660ea780) 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 (0x0x7fc6660812d8) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7fc666004770) 0
+ primary-for QKeySequenceEdit (0x0x7fc6660812d8)
+ QObject (0x0x7fc6660ea6c0) 0
+ primary-for QWidget (0x0x7fc666004770)
+ QPaintDevice (0x0x7fc6660ea720) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7fc6660ea9c0) 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 (0x0x7fc666081340) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7fc6660813a8) 0
+ primary-for QLabel (0x0x7fc666081340)
+ QWidget (0x0x7fc6660047e0) 0
+ primary-for QFrame (0x0x7fc6660813a8)
+ QObject (0x0x7fc6660ea900) 0
+ primary-for QWidget (0x0x7fc6660047e0)
+ QPaintDevice (0x0x7fc6660ea960) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7fc6660eacc0) 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 (0x0x7fc666081410) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7fc666081478) 0
+ primary-for QLCDNumber (0x0x7fc666081410)
+ QWidget (0x0x7fc666004850) 0
+ primary-for QFrame (0x0x7fc666081478)
+ QObject (0x0x7fc6660eac00) 0
+ primary-for QWidget (0x0x7fc666004850)
+ QPaintDevice (0x0x7fc6660eac60) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7fc66615f0c0) 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 (0x0x7fc6660814e0) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7fc666081548) 0
+ primary-for QListView (0x0x7fc6660814e0)
+ QAbstractScrollArea (0x0x7fc6660815b0) 0
+ primary-for QAbstractItemView (0x0x7fc666081548)
+ QFrame (0x0x7fc666081618) 0
+ primary-for QAbstractScrollArea (0x0x7fc6660815b0)
+ QWidget (0x0x7fc666004bd0) 0
+ primary-for QFrame (0x0x7fc666081618)
+ QObject (0x0x7fc66615f000) 0
+ primary-for QWidget (0x0x7fc666004bd0)
+ QPaintDevice (0x0x7fc66615f060) 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 (0x0x7fc66615f600) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7fc665dc30c0) 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 (0x0x7fc666081680) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7fc6660816e8) 0
+ primary-for QListWidget (0x0x7fc666081680)
+ QAbstractItemView (0x0x7fc666081750) 0
+ primary-for QListView (0x0x7fc6660816e8)
+ QAbstractScrollArea (0x0x7fc6660817b8) 0
+ primary-for QAbstractItemView (0x0x7fc666081750)
+ QFrame (0x0x7fc666081820) 0
+ primary-for QAbstractScrollArea (0x0x7fc6660817b8)
+ QWidget (0x0x7fc666169230) 0
+ primary-for QFrame (0x0x7fc666081820)
+ QObject (0x0x7fc665dc3000) 0
+ primary-for QWidget (0x0x7fc666169230)
+ QPaintDevice (0x0x7fc665dc3060) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7fc665dc35a0) 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 (0x0x7fc666081888) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7fc6661692a0) 0
+ primary-for QMainWindow (0x0x7fc666081888)
+ QObject (0x0x7fc665dc34e0) 0
+ primary-for QWidget (0x0x7fc6661692a0)
+ QPaintDevice (0x0x7fc665dc3540) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7fc665dc3d20) 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 (0x0x7fc666081a28) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7fc666081a90) 0
+ primary-for QMdiArea (0x0x7fc666081a28)
+ QFrame (0x0x7fc666081af8) 0
+ primary-for QAbstractScrollArea (0x0x7fc666081a90)
+ QWidget (0x0x7fc6661695b0) 0
+ primary-for QFrame (0x0x7fc666081af8)
+ QObject (0x0x7fc665dc3c60) 0
+ primary-for QWidget (0x0x7fc6661695b0)
+ QPaintDevice (0x0x7fc665dc3cc0) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7fc665e834e0) 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 (0x0x7fc666081c98) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7fc666169930) 0
+ primary-for QMdiSubWindow (0x0x7fc666081c98)
+ QObject (0x0x7fc665e83420) 0
+ primary-for QWidget (0x0x7fc666169930)
+ QPaintDevice (0x0x7fc665e83480) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7fc665e83ae0) 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 (0x0x7fc666081e38) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7fc666169b60) 0
+ primary-for QMenu (0x0x7fc666081e38)
+ QObject (0x0x7fc665e83a20) 0
+ primary-for QWidget (0x0x7fc666169b60)
+ QPaintDevice (0x0x7fc665e83a80) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7fc665e83ea0) 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 (0x0x7fc666081ea0) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7fc666169bd0) 0
+ primary-for QMenuBar (0x0x7fc666081ea0)
+ QObject (0x0x7fc665e83de0) 0
+ primary-for QWidget (0x0x7fc666169bd0)
+ QPaintDevice (0x0x7fc665e83e40) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7fc665f851e0) 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 (0x0x7fc666081f08) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7fc666081f70) 0
+ primary-for QMessageBox (0x0x7fc666081f08)
+ QWidget (0x0x7fc666169c40) 0
+ primary-for QDialog (0x0x7fc666081f70)
+ QObject (0x0x7fc665f85120) 0
+ primary-for QWidget (0x0x7fc666169c40)
+ QPaintDevice (0x0x7fc665f85180) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7fc665f85ae0) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7fc665f85b40) 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 (0x0x7fc665fba138) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7fc665fba1a0) 0
+ primary-for QTextEdit (0x0x7fc665fba138)
+ QFrame (0x0x7fc665fba208) 0
+ primary-for QAbstractScrollArea (0x0x7fc665fba1a0)
+ QWidget (0x0x7fc665c1b000) 0
+ primary-for QFrame (0x0x7fc665fba208)
+ QObject (0x0x7fc665f85a20) 0
+ primary-for QWidget (0x0x7fc665c1b000)
+ QPaintDevice (0x0x7fc665f85a80) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7fc665c68480) 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 (0x0x7fc665fba3a8) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7fc665fba410) 0
+ primary-for QPlainTextEdit (0x0x7fc665fba3a8)
+ QFrame (0x0x7fc665fba478) 0
+ primary-for QAbstractScrollArea (0x0x7fc665fba410)
+ QWidget (0x0x7fc665c1b380) 0
+ primary-for QFrame (0x0x7fc665fba478)
+ QObject (0x0x7fc665c683c0) 0
+ primary-for QWidget (0x0x7fc665c1b380)
+ QPaintDevice (0x0x7fc665c68420) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7fc665c689c0) 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 (0x0x7fc665fba4e0) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7fc665fba548) 0
+ primary-for QPlainTextDocumentLayout (0x0x7fc665fba4e0)
+ QObject (0x0x7fc665c68960) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fc665fba548)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7fc665c68c00) 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 (0x0x7fc665fba5b0) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7fc665c1b4d0) 0
+ primary-for QProgressBar (0x0x7fc665fba5b0)
+ QObject (0x0x7fc665c68b40) 0
+ primary-for QWidget (0x0x7fc665c1b4d0)
+ QPaintDevice (0x0x7fc665c68ba0) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7fc665c68f00) 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 (0x0x7fc665fba618) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7fc665fba680) 0
+ primary-for QProgressDialog (0x0x7fc665fba618)
+ QWidget (0x0x7fc665c1b620) 0
+ primary-for QDialog (0x0x7fc665fba680)
+ QObject (0x0x7fc665c68e40) 0
+ primary-for QWidget (0x0x7fc665c1b620)
+ QPaintDevice (0x0x7fc665c68ea0) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7fc665d12120) 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 (0x0x7fc665fba6e8) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7fc665fba750) 0
+ primary-for QProxyStyle (0x0x7fc665fba6e8)
+ QStyle (0x0x7fc665fba7b8) 0
+ primary-for QCommonStyle (0x0x7fc665fba750)
+ QObject (0x0x7fc665d120c0) 0
+ primary-for QStyle (0x0x7fc665fba7b8)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7fc665d12360) 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 (0x0x7fc665fba820) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7fc665fba888) 0
+ primary-for QRadioButton (0x0x7fc665fba820)
+ QWidget (0x0x7fc665c1b690) 0
+ primary-for QAbstractButton (0x0x7fc665fba888)
+ QObject (0x0x7fc665d122a0) 0
+ primary-for QWidget (0x0x7fc665c1b690)
+ QPaintDevice (0x0x7fc665d12300) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7fc665d125a0) 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 (0x0x7fc665fba8f0) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7fc665fba958) 0
+ primary-for QScrollBar (0x0x7fc665fba8f0)
+ QWidget (0x0x7fc665c1b700) 0
+ primary-for QAbstractSlider (0x0x7fc665fba958)
+ QObject (0x0x7fc665d124e0) 0
+ primary-for QWidget (0x0x7fc665c1b700)
+ QPaintDevice (0x0x7fc665d12540) 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 (0x0x7fc665d12720) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7fc665da11e0) 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 (0x0x7fc665fbaa90) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7fc665da1180) 0
+ primary-for QScroller (0x0x7fc665fbaa90)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7fc665da14e0) 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 (0x0x7fc665fbaaf8) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7fc665d54c40) 0
+ primary-for QSizeGrip (0x0x7fc665fbaaf8)
+ QObject (0x0x7fc665da1420) 0
+ primary-for QWidget (0x0x7fc665d54c40)
+ QPaintDevice (0x0x7fc665da1480) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7fc665da1720) 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 (0x0x7fc665fbab60) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7fc665fbabc8) 0
+ primary-for QSpinBox (0x0x7fc665fbab60)
+ QWidget (0x0x7fc665d54cb0) 0
+ primary-for QAbstractSpinBox (0x0x7fc665fbabc8)
+ QObject (0x0x7fc665da1660) 0
+ primary-for QWidget (0x0x7fc665d54cb0)
+ QPaintDevice (0x0x7fc665da16c0) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7fc665da1960) 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 (0x0x7fc665fbac30) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7fc665fbac98) 0
+ primary-for QDoubleSpinBox (0x0x7fc665fbac30)
+ QWidget (0x0x7fc665d54d20) 0
+ primary-for QAbstractSpinBox (0x0x7fc665fbac98)
+ QObject (0x0x7fc665da18a0) 0
+ primary-for QWidget (0x0x7fc665d54d20)
+ QPaintDevice (0x0x7fc665da1900) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7fc665da1ba0) 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 (0x0x7fc665fbad00) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7fc665d54d90) 0
+ primary-for QSplashScreen (0x0x7fc665fbad00)
+ QObject (0x0x7fc665da1ae0) 0
+ primary-for QWidget (0x0x7fc665d54d90)
+ QPaintDevice (0x0x7fc665da1b40) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7fc665da1de0) 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 (0x0x7fc665fbad68) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7fc665fbadd0) 0
+ primary-for QSplitter (0x0x7fc665fbad68)
+ QWidget (0x0x7fc665d54e00) 0
+ primary-for QFrame (0x0x7fc665fbadd0)
+ QObject (0x0x7fc665da1d20) 0
+ primary-for QWidget (0x0x7fc665d54e00)
+ QPaintDevice (0x0x7fc665da1d80) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7fc665a33060) 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 (0x0x7fc665fbae38) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7fc665d54e70) 0
+ primary-for QSplitterHandle (0x0x7fc665fbae38)
+ QObject (0x0x7fc665da1f60) 0
+ primary-for QWidget (0x0x7fc665d54e70)
+ QPaintDevice (0x0x7fc665a33000) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7fc665a332a0) 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 (0x0x7fc665fbaea0) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7fc665d54ee0) 0
+ primary-for QStackedLayout (0x0x7fc665fbaea0)
+ QObject (0x0x7fc665a331e0) 0
+ primary-for QLayout (0x0x7fc665d54ee0)
+ QLayoutItem (0x0x7fc665a33240) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7fc665a335a0) 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 (0x0x7fc665fbaf08) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7fc665fbaf70) 0
+ primary-for QStackedWidget (0x0x7fc665fbaf08)
+ QWidget (0x0x7fc665d54540) 0
+ primary-for QFrame (0x0x7fc665fbaf70)
+ QObject (0x0x7fc665a334e0) 0
+ primary-for QWidget (0x0x7fc665d54540)
+ QPaintDevice (0x0x7fc665a33540) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7fc665a337e0) 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 (0x0x7fc665a6a000) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7fc665d54620) 0
+ primary-for QStatusBar (0x0x7fc665a6a000)
+ QObject (0x0x7fc665a33720) 0
+ primary-for QWidget (0x0x7fc665d54620)
+ QPaintDevice (0x0x7fc665a33780) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7fc665a339c0) 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 (0x0x7fc665a6a068) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7fc665a6a0d0) 0
+ primary-for QStyledItemDelegate (0x0x7fc665a6a068)
+ QObject (0x0x7fc665a33960) 0
+ primary-for QAbstractItemDelegate (0x0x7fc665a6a0d0)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7fc665a33b40) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7fc665a6a138) 0
+ QPainter (0x0x7fc665a33ba0) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7fc665a9c420) 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 (0x0x7fc665a6a1a0) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7fc665a9c3c0) 0
+ primary-for QStylePlugin (0x0x7fc665a6a1a0)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7fc665a9c540) 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 (0x0x7fc665a6a208) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7fc665a9c4e0) 0
+ primary-for QSystemTrayIcon (0x0x7fc665a6a208)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7fc665a9c840) 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 (0x0x7fc665a6a270) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7fc665a6a2d8) 0
+ primary-for QTableView (0x0x7fc665a6a270)
+ QAbstractScrollArea (0x0x7fc665a6a340) 0
+ primary-for QAbstractItemView (0x0x7fc665a6a2d8)
+ QFrame (0x0x7fc665a6a3a8) 0
+ primary-for QAbstractScrollArea (0x0x7fc665a6a340)
+ QWidget (0x0x7fc665aa7460) 0
+ primary-for QFrame (0x0x7fc665a6a3a8)
+ QObject (0x0x7fc665a9c780) 0
+ primary-for QWidget (0x0x7fc665aa7460)
+ QPaintDevice (0x0x7fc665a9c7e0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7fc665a9c9c0) 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 (0x0x7fc665a9cde0) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7fc665b82120) 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 (0x0x7fc665a6ac98) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7fc665a6ad00) 0
+ primary-for QTableWidget (0x0x7fc665a6ac98)
+ QAbstractItemView (0x0x7fc665a6ad68) 0
+ primary-for QTableView (0x0x7fc665a6ad00)
+ QAbstractScrollArea (0x0x7fc665a6add0) 0
+ primary-for QAbstractItemView (0x0x7fc665a6ad68)
+ QFrame (0x0x7fc665a6ae38) 0
+ primary-for QAbstractScrollArea (0x0x7fc665a6add0)
+ QWidget (0x0x7fc666169690) 0
+ primary-for QFrame (0x0x7fc665a6ae38)
+ QObject (0x0x7fc665b82060) 0
+ primary-for QWidget (0x0x7fc666169690)
+ QPaintDevice (0x0x7fc665b820c0) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7fc665b824e0) 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 (0x0x7fc665a6aea0) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7fc665a6af08) 0
+ primary-for QTextBrowser (0x0x7fc665a6aea0)
+ QAbstractScrollArea (0x0x7fc665a6af70) 0
+ primary-for QTextEdit (0x0x7fc665a6af08)
+ QFrame (0x0x7fc665a6ac30) 0
+ primary-for QAbstractScrollArea (0x0x7fc665a6af70)
+ QWidget (0x0x7fc665aa7690) 0
+ primary-for QFrame (0x0x7fc665a6ac30)
+ QObject (0x0x7fc665b82420) 0
+ primary-for QWidget (0x0x7fc665aa7690)
+ QPaintDevice (0x0x7fc665b82480) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7fc665b82720) 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 (0x0x7fc6657c6000) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7fc665aa7700) 0
+ primary-for QToolBar (0x0x7fc6657c6000)
+ QObject (0x0x7fc665b82660) 0
+ primary-for QWidget (0x0x7fc665aa7700)
+ QPaintDevice (0x0x7fc665b826c0) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7fc665b82ba0) 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 (0x0x7fc6657c6068) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7fc6657c60d0) 0
+ primary-for QToolBox (0x0x7fc6657c6068)
+ QWidget (0x0x7fc665aa7770) 0
+ primary-for QFrame (0x0x7fc6657c60d0)
+ QObject (0x0x7fc665b82ae0) 0
+ primary-for QWidget (0x0x7fc665aa7770)
+ QPaintDevice (0x0x7fc665b82b40) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7fc665b82f00) 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 (0x0x7fc6657c6138) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7fc6657c61a0) 0
+ primary-for QToolButton (0x0x7fc6657c6138)
+ QWidget (0x0x7fc665aa77e0) 0
+ primary-for QAbstractButton (0x0x7fc6657c61a0)
+ QObject (0x0x7fc665b82e40) 0
+ primary-for QWidget (0x0x7fc665aa77e0)
+ QPaintDevice (0x0x7fc665b82ea0) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7fc66581e180) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7fc66581e300) 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 (0x0x7fc6657c6208) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7fc6657c6270) 0
+ primary-for QTreeView (0x0x7fc6657c6208)
+ QAbstractScrollArea (0x0x7fc6657c62d8) 0
+ primary-for QAbstractItemView (0x0x7fc6657c6270)
+ QFrame (0x0x7fc6657c6340) 0
+ primary-for QAbstractScrollArea (0x0x7fc6657c62d8)
+ QWidget (0x0x7fc665aa79a0) 0
+ primary-for QFrame (0x0x7fc6657c6340)
+ QObject (0x0x7fc66581e240) 0
+ primary-for QWidget (0x0x7fc665aa79a0)
+ QPaintDevice (0x0x7fc66581e2a0) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7fc66581e480) 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 (0x0x7fc66581ec00) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7fc6659b2a20) 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 (0x0x7fc66594f680) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7fc66594f6e8) 0
+ primary-for QTreeWidget (0x0x7fc66594f680)
+ QAbstractItemView (0x0x7fc66594f750) 0
+ primary-for QTreeView (0x0x7fc66594f6e8)
+ QAbstractScrollArea (0x0x7fc66594f7b8) 0
+ primary-for QAbstractItemView (0x0x7fc66594f750)
+ QFrame (0x0x7fc66594f820) 0
+ primary-for QAbstractScrollArea (0x0x7fc66594f7b8)
+ QWidget (0x0x7fc66584e770) 0
+ primary-for QFrame (0x0x7fc66594f820)
+ QObject (0x0x7fc6659b2960) 0
+ primary-for QWidget (0x0x7fc66584e770)
+ QPaintDevice (0x0x7fc6659b29c0) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7fc6659b2e40) 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 (0x0x7fc66594f888) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7fc66594f8f0) 0
+ primary-for QUndoView (0x0x7fc66594f888)
+ QAbstractItemView (0x0x7fc66594f958) 0
+ primary-for QListView (0x0x7fc66594f8f0)
+ QAbstractScrollArea (0x0x7fc66594f9c0) 0
+ primary-for QAbstractItemView (0x0x7fc66594f958)
+ QFrame (0x0x7fc66594fa28) 0
+ primary-for QAbstractScrollArea (0x0x7fc66594f9c0)
+ QWidget (0x0x7fc66584e7e0) 0
+ primary-for QFrame (0x0x7fc66594fa28)
+ QObject (0x0x7fc6659b2d80) 0
+ primary-for QWidget (0x0x7fc66584e7e0)
+ QPaintDevice (0x0x7fc6659b2de0) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7fc665630000) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7fc6656300c0) 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 (0x0x7fc66594fa90) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7fc66594faf8) 0
+ primary-for QWidgetAction (0x0x7fc66594fa90)
+ QObject (0x0x7fc665630060) 0
+ primary-for QAction (0x0x7fc66594faf8)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7fc665630300) 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 (0x0x7fc66594fb60) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7fc66594fbc8) 0
+ primary-for QWizard (0x0x7fc66594fb60)
+ QWidget (0x0x7fc66584e850) 0
+ primary-for QDialog (0x0x7fc66594fbc8)
+ QObject (0x0x7fc665630240) 0
+ primary-for QWidget (0x0x7fc66584e850)
+ QPaintDevice (0x0x7fc6656302a0) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7fc665630b40) 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 (0x0x7fc66594fd68) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7fc665644a10) 0
+ primary-for QWizardPage (0x0x7fc66594fd68)
+ QObject (0x0x7fc665630a80) 0
+ primary-for QWidget (0x0x7fc665644a10)
+ QPaintDevice (0x0x7fc665630ae0) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Class QQuickWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWidget::QPrivateSignal (0x0x7fc665630d80) 0 empty
+
+Vtable for QQuickWidget
+QQuickWidget::_ZTV12QQuickWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWidget)
+16 (int (*)(...))QQuickWidget::metaObject
+24 (int (*)(...))QQuickWidget::qt_metacast
+32 (int (*)(...))QQuickWidget::qt_metacall
+40 (int (*)(...))QQuickWidget::~QQuickWidget
+48 (int (*)(...))QQuickWidget::~QQuickWidget
+56 (int (*)(...))QQuickWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickWidget::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QQuickWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QQuickWidget::mousePressEvent
+176 (int (*)(...))QQuickWidget::mouseReleaseEvent
+184 (int (*)(...))QQuickWidget::mouseDoubleClickEvent
+192 (int (*)(...))QQuickWidget::mouseMoveEvent
+200 (int (*)(...))QQuickWidget::wheelEvent
+208 (int (*)(...))QQuickWidget::keyPressEvent
+216 (int (*)(...))QQuickWidget::keyReleaseEvent
+224 (int (*)(...))QQuickWidget::focusInEvent
+232 (int (*)(...))QQuickWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QQuickWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QQuickWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QQuickWidget::dragEnterEvent
+320 (int (*)(...))QQuickWidget::dragMoveEvent
+328 (int (*)(...))QQuickWidget::dragLeaveEvent
+336 (int (*)(...))QQuickWidget::dropEvent
+344 (int (*)(...))QQuickWidget::showEvent
+352 (int (*)(...))QQuickWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QQuickWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI12QQuickWidget)
+448 (int (*)(...))QQuickWidget::_ZThn16_N12QQuickWidgetD1Ev
+456 (int (*)(...))QQuickWidget::_ZThn16_N12QQuickWidgetD0Ev
+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 QQuickWidget
+ size=40 align=8
+ base size=40 base align=8
+QQuickWidget (0x0x7fc66594fdd0) 0
+ vptr=((& QQuickWidget::_ZTV12QQuickWidget) + 16)
+ QWidget (0x0x7fc665644a80) 0
+ primary-for QQuickWidget (0x0x7fc66594fdd0)
+ QObject (0x0x7fc665630cc0) 0
+ primary-for QWidget (0x0x7fc665644a80)
+ QPaintDevice (0x0x7fc665630d20) 16
+ vptr=((& QQuickWidget::_ZTV12QQuickWidget) + 448)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fc6656ecf60) 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 (0x0x7fc665715300) 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 (0x0x7fc6657154e0) 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 (0x0x7fc665715840) 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 (0x0x7fc665715a20) 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 (0x0x7fc665715d80) 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 (0x0x7fc665715f00) 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 (0x0x7fc665746240) 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 (0x0x7fc665746420) 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 (0x0x7fc665746780) 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 (0x0x7fc665746960) 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 (0x0x7fc665746cc0) 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 (0x0x7fc665746ea0) 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 (0x0x7fc665776240) 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 (0x0x7fc665776420) 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 (0x0x7fc665776780) 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 (0x0x7fc6653cb060) 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 (0x0x7fc6653cb3c0) 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 (0x0x7fc6653cb540) 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 (0x0x7fc6653cb8a0) 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 (0x0x7fc6653cba20) 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 (0x0x7fc6653cbd80) 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 (0x0x7fc6653cbf00) 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 (0x0x7fc6653fc2a0) 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 (0x0x7fc6653fc420) 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 (0x0x7fc6653fc780) 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 (0x0x7fc6653fc900) 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 (0x0x7fc6653fcc60) 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 (0x0x7fc6653fcde0) 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 (0x0x7fc66542a180) 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 (0x0x7fc66542a300) 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 (0x0x7fc66542a660) 0 empty
+
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt
index 48093d749a..ddd5f633e7 100644
--- a/tests/auto/cmake/CMakeLists.txt
+++ b/tests/auto/cmake/CMakeLists.txt
@@ -6,7 +6,7 @@
# `$qt_prefix/bin/qt-cmake ..` or `cmake -DCMAKE_PREFIX_PATH=/path/to/qt ..`
# 4) ctest # Run ctest
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(qtdeclarative_cmake_tests)
enable_testing()
@@ -53,12 +53,34 @@ endif()
_qt_internal_test_module_includes(${module_includes})
-# TODO: Plugin targets are not available in shared builds at the moment QTBUG-94066
-if(TARGET Qt::Qml AND NOT QT6_IS_SHARED_LIBS_BUILD)
- _qt_internal_test_expect_pass(test_plugins)
+if(TARGET Qt::Qml)
+ if(NOT CMAKE_CROSSCOMPILING)
+ _qt_internal_test_expect_pass(tooling_imports TESTNAME cmake_tooling_imports BINARY cmake_test)
+ set_tests_properties(cmake_tooling_imports PROPERTIES
+ FAIL_REGULAR_EXPRESSION "(Info|Warning|Error): [a-zA-Z]*\\.qml:[0-9]"
+ )
+ endif()
+ # TODO: Plugin targets are not available in shared builds at the moment QTBUG-94066
+ if(NOT QT6_IS_SHARED_LIBS_BUILD)
+ _qt_internal_test_expect_pass(test_plugins)
+ endif()
+ _qt_internal_test_expect_pass(empty_qmldir)
endif()
if(TARGET Qt::Quick)
- # _qt_internal_test_expect_pass(qtquickcompiler) # TODO: Replace with 6.2 qml module API
- # _qt_internal_test_expect_pass(qmlimportscanner) # TODO: Replace with 6.2 qml module API
+ if(NOT CMAKE_CROSSCOMPILING)
+ _qt_internal_test_expect_pass(qtquickcompiler BINARY qqc_test)
+ endif()
+ if(NOT QT6_IS_SHARED_LIBS_BUILD)
+ _qt_internal_test_expect_pass(test_import_static_shapes_plugin_resources
+ BINARY "${CMAKE_CTEST_COMMAND}"
+ BINARY_ARGS "-V"
+ )
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.21")
+ _qt_internal_test_expect_pass(qmlimportscanner
+ TESTNAME cmake_qmlimportscanner
+ BINARY qis_test
+ )
+ endif()
+ endif()
endif()
diff --git a/tests/auto/cmake/empty_qmldir/CMakeLists.txt b/tests/auto/cmake/empty_qmldir/CMakeLists.txt
new file mode 100644
index 0000000000..259adc2610
--- /dev/null
+++ b/tests/auto/cmake/empty_qmldir/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.16)
+project(empty_qmldir_test)
+
+find_package(Qt6 ${CMAKE_Core_MODULE_MAJOR_VERSION}.${CMAKE_Core_MODULE_MINOR_VERSION}
+ REQUIRED COMPONENTS Qml Gui Test
+)
+
+set(CMAKE_AUTOMOC ON)
+
+# Simplify finding the backing targets' DLLs on Windows
+if(WIN32)
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+
+qt_add_executable(empty_qmldir_test main.cpp)
+target_link_libraries(empty_qmldir_test PRIVATE Qt6::Test)
+if(ANDROID)
+ # Tests link to Gui by default beacuse it's needed for Android (QTBUG-83997) when
+ # using qt_internal_add_test() but not here where qt_add_executable() is used.
+ target_link_libraries(empty_qmldir_test PRIVATE Qt6::Gui)
+endif()
+
+qt_add_qml_module(empty_qmldir_test
+ URI Third
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ SOURCES
+ enemy.cpp
+ enemy.h
+ QML_FILES
+ flee.qml
+)
+
+# Ensure linting runs when building the default "all" target
+set_target_properties(all_qmllint PROPERTIES EXCLUDE_FROM_ALL FALSE)
diff --git a/tests/auto/cmake/empty_qmldir/enemy.cpp b/tests/auto/cmake/empty_qmldir/enemy.cpp
new file mode 100644
index 0000000000..31df68de6d
--- /dev/null
+++ b/tests/auto/cmake/empty_qmldir/enemy.cpp
@@ -0,0 +1,33 @@
+/****************************************************************************
+**
+** 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 "enemy.h"
+
+Enemy::Enemy(QObject *parent) : QObject(parent) { }
+
+#include "moc_enemy.cpp"
diff --git a/tests/auto/quick/shared/geometrytestutil.h b/tests/auto/cmake/empty_qmldir/enemy.h
index 2cf19ed7ff..e9d3706995 100644
--- a/tests/auto/quick/shared/geometrytestutil.h
+++ b/tests/auto/cmake/empty_qmldir/enemy.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** 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.
@@ -26,24 +26,23 @@
**
****************************************************************************/
-#ifndef QQUICKGEOMETRYTESTUTIL_H
-#define QQUICKGEOMETRYTESTUTIL_H
+#ifndef ENEMY_H
+#define ENEMY_H
-#include <QObject>
-#include <QVector>
-#include <QSize>
+#include <QtQml/qqml.h>
+#include <QtCore/qproperty.h>
-QT_FORWARD_DECLARE_CLASS(QQuickItem)
-
-class QSizeChangeListener : public QObject, public QVector<QSize>
+class Enemy : public QObject
{
Q_OBJECT
+ QML_NAMED_ELEMENT(Enemy)
+ Q_PROPERTY(QString name MEMBER name BINDABLE bindableName)
+
public:
- explicit QSizeChangeListener(QQuickItem *item);
-private slots:
- void onSizeChanged();
-private:
- QQuickItem *item;
+ Enemy(QObject *parent = nullptr);
+
+ QProperty<QString> name;
+ QBindable<QString> bindableName() { return QBindable<QString>(&name); }
};
-#endif // QQUICKGEOMETRYTESTUTIL_H
+#endif // ENEMY_H
diff --git a/tests/auto/cmake/empty_qmldir/flee.qml b/tests/auto/cmake/empty_qmldir/flee.qml
new file mode 100644
index 0000000000..3bc2b1ebbd
--- /dev/null
+++ b/tests/auto/cmake/empty_qmldir/flee.qml
@@ -0,0 +1,7 @@
+import QtQml
+import Third // Self import
+
+QtObject {
+ property int success: -11
+ property Enemy other: Enemy { name: "evil" }
+}
diff --git a/tests/auto/cmake/empty_qmldir/main.cpp b/tests/auto/cmake/empty_qmldir/main.cpp
new file mode 100644
index 0000000000..2f64641655
--- /dev/null
+++ b/tests/auto/cmake/empty_qmldir/main.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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$
+**
+****************************************************************************/
+
+#include <QtCore/qobject.h>
+#include <QtQml/qqml.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtTest/qtest.h>
+
+class tst_empty_qmldir : public QObject
+{
+ Q_OBJECT
+private slots:
+ void canSelfImport();
+};
+
+void tst_empty_qmldir::canSelfImport()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, QUrl("qrc:/flee.qml"));
+ QScopedPointer<QObject> obj(component.create());
+ QVERIFY2(!obj.isNull(), qPrintable(component.errorString()));
+ QCOMPARE(obj->property("success").toInt(), -11);
+ QObject *enemy = qvariant_cast<QObject *>(obj->property("other"));
+ QVERIFY(enemy != nullptr);
+ QCOMPARE(enemy->property("name").toString(), QStringLiteral("evil"));
+}
+
+QTEST_MAIN(tst_empty_qmldir)
+
+#include "main.moc"
diff --git a/tests/auto/cmake/qmlimportscanner/CMakeLists.txt b/tests/auto/cmake/qmlimportscanner/CMakeLists.txt
index 354b0f8dfc..405066e3cb 100644
--- a/tests/auto/cmake/qmlimportscanner/CMakeLists.txt
+++ b/tests/auto/cmake/qmlimportscanner/CMakeLists.txt
@@ -1,18 +1,20 @@
-
-cmake_minimum_required(VERSION 3.1)
+cmake_minimum_required(VERSION 3.21)
project(qis_test)
-find_package(Qt5Qml 5.0.0 REQUIRED)
-find_package(Qt5Gui 5.0.0 REQUIRED)
-find_package(Qt5Test 5.0.0 REQUIRED)
-find_package(Qt5QmlImportScanner REQUIRED)
-
-set(CMAKE_CXXFLAGS "${CMAKE_CXXFLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
+find_package(Qt6 REQUIRED COMPONENTS Core Test Qml)
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-add_executable(qis_test "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/qis_test.qrc")
-target_link_libraries(qis_test PRIVATE Qt5::Gui Qt5::Qml Qt5::Test)
-qt5_import_qml_plugins(qis_test)
+# We explicitly don't want to use qt_add_executable() here because we want to
+# manually invoke qt6_import_qml_plugins() ourselves later
+add_executable(qis_test main.cpp)
+target_link_libraries(qis_test PRIVATE Qt6::Test Qt6::Qml Qt6::Core)
+
+qt6_add_qml_module(qis_test
+ URI Test
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES main.qml
+)
+
+qt6_import_qml_plugins(qis_test)
diff --git a/tests/auto/cmake/qtquickcompiler/CMakeLists.txt b/tests/auto/cmake/qtquickcompiler/CMakeLists.txt
index 1eb4c4286c..c717ed01a3 100644
--- a/tests/auto/cmake/qtquickcompiler/CMakeLists.txt
+++ b/tests/auto/cmake/qtquickcompiler/CMakeLists.txt
@@ -1,17 +1,29 @@
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.16)
project(qqc_test)
-find_package(Qt6Qml 6.0.0 REQUIRED)
-find_package(Qt6Gui 6.0.0 REQUIRED)
-find_package(Qt6Test 6.0.0 REQUIRED)
-find_package(Qt6QuickCompiler)
+find_package(Qt6 ${CMAKE_Core_MODULE_MAJOR_VERSION}.${CMAKE_Core_MODULE_MINOR_VERSION}
+ REQUIRED COMPONENTS Qml Gui Test
+)
-set(CMAKE_CXXFLAGS "${CMAKE_CXXFLAGS} ${Qt6Core_EXECUTABLE_COMPILE_FLAGS}")
+set(CMAKE_AUTOMOC ON)
-qtquick_compiler_add_resources(RESOURCES "empty.qrc" "resources with space/qqc_test.qrc")
+qt_add_executable(qqc_test
+ # Absolute path needed to avoid using the copied file in the build dir.
+ # That would still work, but it should use the file in the source dir.
+ ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
+)
+target_link_libraries(qqc_test PRIVATE Qt6::Gui Qt6::Qml Qt6::Test)
-set(CMAKE_AUTOMOC ON)
+set_source_files_properties("resources with space/main.qml" PROPERTIES
+ QT_RESOURCE_ALIAS main.qml
+)
-add_executable(qqc_test "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp" ${RESOURCES})
-target_link_libraries(qqc_test Qt6::Gui Qt6::Qml Qt6::Test)
+qt_add_qml_module(qqc_test
+ URI Test
+ VERSION 1.0
+ QML_FILES
+ "resources with space/main.qml"
+ RESOURCES
+ main.cpp
+)
diff --git a/tests/auto/cmake/qtquickcompiler/main.cpp b/tests/auto/cmake/qtquickcompiler/main.cpp
index c357ef60e6..3cdf4cf40b 100644
--- a/tests/auto/cmake/qtquickcompiler/main.cpp
+++ b/tests/auto/cmake/qtquickcompiler/main.cpp
@@ -1,3 +1,30 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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$
+**
+****************************************************************************/
#include <QtCore>
#include <QtQml>
@@ -12,14 +39,13 @@ private slots:
void tst_QQC::packaging()
{
- QVERIFY(QFile::exists(":/main.qml"));
- QCOMPARE(QFileInfo(":/main.qml").size(), 0);
- QVERIFY(QFile::exists(":/main.cpp"));
- QVERIFY(QFileInfo(":/main.cpp").size() > 0);
-
+ QVERIFY(QFile::exists(":/Test/main.qml"));
+ QVERIFY(QFileInfo(":/Test/main.qml").size() > 0);
+ QVERIFY(QFile::exists(":/Test/main.cpp"));
+ QVERIFY(QFileInfo(":/Test/main.cpp").size() > 0);
QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:/main.qml"));
+ QQmlComponent component(&engine, QUrl("qrc:/Test/main.qml"));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
QCOMPARE(obj->property("success").toInt(), 42);
diff --git a/tests/auto/cmake/qtquickcompiler/resources with space/qqc_test.qrc b/tests/auto/cmake/qtquickcompiler/resources with space/qqc_test.qrc
deleted file mode 100644
index 63d8d1f37e..0000000000
--- a/tests/auto/cmake/qtquickcompiler/resources with space/qqc_test.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
-<file>./main.qml</file>
-<file alias="main.cpp">../main.cpp</file>
-</qresource>
-</RCC>
diff --git a/tests/auto/cmake/test_import_static_shapes_plugin_resources/CMakeLists.txt b/tests/auto/cmake/test_import_static_shapes_plugin_resources/CMakeLists.txt
new file mode 100644
index 0000000000..66beef0fa5
--- /dev/null
+++ b/tests/auto/cmake/test_import_static_shapes_plugin_resources/CMakeLists.txt
@@ -0,0 +1,45 @@
+cmake_minimum_required(VERSION 3.16)
+
+project(test_project LANGUAGES CXX)
+enable_testing()
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+find_package(Qt6 COMPONENTS REQUIRED Quick Test QuickTestUtilsPrivate)
+
+function(create_test_executable target)
+ qt_add_executable(${target}
+ MANUAL_FINALIZATION
+ tst_main.cpp
+ )
+ target_link_libraries(${target} PRIVATE
+ Qt::Qml
+ Qt::Quick
+ Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
+ Qt::Test
+ )
+
+ set(app_resource_files
+ "app.qml"
+ )
+
+ qt6_add_resources(${target} "app"
+ PREFIX
+ "/"
+ FILES
+ ${app_resource_files}
+ )
+
+ # Explicitly import qml plugins, regardless of lower CMake versions.
+ qt_import_qml_plugins(${target})
+
+ # Explicitly call finalizers, regardless of lower CMake versions.
+ qt_finalize_target(${target})
+
+ # Rune the app to ensure resources were linked and found, so there should be no qml errors.
+ add_test(test_${target} ${target})
+endfunction()
+
+create_test_executable(app)
diff --git a/tests/auto/cmake/test_import_static_shapes_plugin_resources/app.qml b/tests/auto/cmake/test_import_static_shapes_plugin_resources/app.qml
new file mode 100644
index 0000000000..0ca3bf250b
--- /dev/null
+++ b/tests/auto/cmake/test_import_static_shapes_plugin_resources/app.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+import QtQuick
+import QtQuick.Shapes
+
+Shape {
+ width: 200
+ height: 150
+ anchors.centerIn: parent
+ ShapePath {
+ strokeWidth: 4
+ strokeColor: "red"
+ fillGradient: LinearGradient {
+ x1: 20; y1: 20
+ x2: 180; y2: 130
+ GradientStop { position: 0; color: "blue" }
+ GradientStop { position: 0.2; color: "green" }
+ GradientStop { position: 0.4; color: "red" }
+ GradientStop { position: 0.6; color: "yellow" }
+ GradientStop { position: 1; color: "cyan" }
+ }
+ strokeStyle: ShapePath.DashLine
+ dashPattern: [ 1, 4 ]
+ startX: 20; startY: 20
+ PathLine { x: 180; y: 130 }
+ PathLine { x: 20; y: 130 }
+ PathLine { x: 20; y: 20 }
+ }
+}
diff --git a/tests/auto/cmake/test_import_static_shapes_plugin_resources/tst_main.cpp b/tests/auto/cmake/test_import_static_shapes_plugin_resources/tst_main.cpp
new file mode 100644
index 0000000000..ab05da961f
--- /dev/null
+++ b/tests/auto/cmake/test_import_static_shapes_plugin_resources/tst_main.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtGlobal>
+#include <QtCore/QScopeGuard>
+#include <QtCore/QTimer>
+#include <QtGui/QGuiApplication>
+#include <QtQml/QQmlEngine>
+#include <QtQuick/QQuickView>
+#include <QtTest/QTest>
+
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+
+static bool gotShaderErrorMessage = false;
+QtMessageHandler oldHandler = nullptr;
+
+void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+{
+ // If QuickShapesPrivate's resource object files that contain shaders are not linked to the
+ // the final executable, QRhiImplementation::sanityCheckGraphicsPipeline will issue a warning
+ // that we intercept.
+ if (type == QtWarningMsg && msg == QLatin1String("Empty shader passed to graphics pipeline")) {
+ gotShaderErrorMessage = true;
+ }
+
+ if (oldHandler)
+ oldHandler(type, context, msg);
+}
+
+class tstImportStaticShapesPluginResources : public QObject
+{
+ Q_OBJECT
+private slots:
+ void cleanup();
+ void loadApp();
+};
+
+void tstImportStaticShapesPluginResources::cleanup()
+{
+ if (oldHandler) {
+ qInstallMessageHandler(oldHandler);
+ oldHandler = nullptr;
+ }
+}
+
+void tstImportStaticShapesPluginResources::loadApp()
+{
+ gotShaderErrorMessage = false;
+ oldHandler = qInstallMessageHandler(messageHandler);
+
+ QQuickView view;
+ QVERIFY(QQuickTest::showView(view, QUrl("qrc:///app.qml")));
+ QCOMPARE(gotShaderErrorMessage, false);
+}
+
+QTEST_MAIN(tstImportStaticShapesPluginResources)
+#include "tst_main.moc"
diff --git a/tests/auto/cmake/test_plugins/CMakeLists.txt b/tests/auto/cmake/test_plugins/CMakeLists.txt
index 4d41ec693f..7fc0dea11e 100644
--- a/tests/auto/cmake/test_plugins/CMakeLists.txt
+++ b/tests/auto/cmake/test_plugins/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(check_for_existence_of_plugin_targets)
diff --git a/tests/auto/cmake/tooling_imports/CMakeLists.txt b/tests/auto/cmake/tooling_imports/CMakeLists.txt
new file mode 100644
index 0000000000..514f1ac949
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/CMakeLists.txt
@@ -0,0 +1,32 @@
+
+cmake_minimum_required(VERSION 3.16)
+project(cmake_test)
+
+find_package(Qt6 ${CMAKE_Core_MODULE_MAJOR_VERSION}.${CMAKE_Core_MODULE_MINOR_VERSION}
+ REQUIRED COMPONENTS Qml Gui Test
+)
+
+set(CMAKE_AUTOMOC ON)
+
+# Simplify finding the backing targets' DLLs on Windows
+if(WIN32)
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+
+add_subdirectory(First)
+add_subdirectory(Second)
+
+qt_add_executable(cmake_test main.cpp)
+target_link_libraries(cmake_test PRIVATE Qt6::Test Qt6::Gui)
+
+qt_add_qml_module(cmake_test
+ URI Test
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES
+ main.qml
+ Ttt.qml
+)
+
+# Ensure linting runs when building the default "all" target
+set_target_properties(all_qmllint PROPERTIES EXCLUDE_FROM_ALL FALSE)
diff --git a/tests/auto/cmake/tooling_imports/First/CMakeLists.txt b/tests/auto/cmake/tooling_imports/First/CMakeLists.txt
new file mode 100644
index 0000000000..64d3291612
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/First/CMakeLists.txt
@@ -0,0 +1,9 @@
+qt_add_qml_module(BackingFirst
+ URI First
+ VERSION 1.0
+ SOURCES
+ Neighbor.cpp
+ Neighbor.h
+ QML_FILES
+ DoSomething.qml
+)
diff --git a/tests/auto/cmake/tooling_imports/First/DoSomething.qml b/tests/auto/cmake/tooling_imports/First/DoSomething.qml
new file mode 100644
index 0000000000..82ee2b94f2
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/First/DoSomething.qml
@@ -0,0 +1,7 @@
+import QtQml 2.0
+import First // Self import
+
+QtObject {
+ property int success: 42
+ property Neighbor other
+}
diff --git a/tests/auto/cmake/tooling_imports/First/Neighbor.cpp b/tests/auto/cmake/tooling_imports/First/Neighbor.cpp
new file mode 100644
index 0000000000..38fedbaa6d
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/First/Neighbor.cpp
@@ -0,0 +1,33 @@
+/****************************************************************************
+**
+** 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 "Neighbor.h"
+
+Neighbor::Neighbor(QObject *parent) : QObject(parent) { }
+
+#include "moc_Neighbor.cpp"
diff --git a/tests/auto/quick/shared/geometrytestutil.cpp b/tests/auto/cmake/tooling_imports/First/Neighbor.h
index 07a755e9a5..ef6cc2d58b 100644
--- a/tests/auto/quick/shared/geometrytestutil.cpp
+++ b/tests/auto/cmake/tooling_imports/First/Neighbor.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** 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.
@@ -26,18 +26,18 @@
**
****************************************************************************/
-#include "geometrytestutil.h"
+#ifndef NEIGHBOR_H
+#define NEIGHBOR_H
-#include <QQuickItem>
+#include <QtQml/qqml.h>
-QSizeChangeListener::QSizeChangeListener(QQuickItem *item) :
- item(item)
+class Neighbor : public QObject
{
- connect(item, &QQuickItem::widthChanged, this, &QSizeChangeListener::onSizeChanged);
- connect(item, &QQuickItem::heightChanged, this, &QSizeChangeListener::onSizeChanged);
-}
+ Q_OBJECT
+ QML_NAMED_ELEMENT(Neighbor)
-void QSizeChangeListener::onSizeChanged()
-{
- append(QSize(item->width(), item->height()));
-}
+public:
+ Neighbor(QObject *parent = nullptr);
+};
+
+#endif // NEIGHBOR_H
diff --git a/tests/auto/cmake/tooling_imports/Second/CMakeLists.txt b/tests/auto/cmake/tooling_imports/Second/CMakeLists.txt
new file mode 100644
index 0000000000..e3513269fc
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/Second/CMakeLists.txt
@@ -0,0 +1,5 @@
+qt_add_qml_module(BackingSecond
+ URI Second
+ VERSION 1.0
+ QML_FILES CheckIt.qml
+)
diff --git a/tests/auto/cmake/tooling_imports/Second/CheckIt.qml b/tests/auto/cmake/tooling_imports/Second/CheckIt.qml
new file mode 100644
index 0000000000..6bf8659bfc
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/Second/CheckIt.qml
@@ -0,0 +1,7 @@
+import QtQml 2.0
+import First
+
+QtObject {
+ property DoSomething otherModule: DoSomething {}
+ property int dummy: otherModule.success + 13
+}
diff --git a/tests/auto/cmake/tooling_imports/Ttt.qml b/tests/auto/cmake/tooling_imports/Ttt.qml
new file mode 100644
index 0000000000..8fc36a40da
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/Ttt.qml
@@ -0,0 +1,3 @@
+import QtQml
+
+QtObject {}
diff --git a/tests/auto/cmake/tooling_imports/main.cpp b/tests/auto/cmake/tooling_imports/main.cpp
new file mode 100644
index 0000000000..65663f84cc
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/main.cpp
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtQml>
+#include <QtTest>
+
+class tst_cmake_qmllint : public QObject
+{
+ Q_OBJECT
+private slots:
+ void canImport();
+};
+
+void tst_cmake_qmllint::canImport()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, QUrl("qrc:/main.qml"));
+ QScopedPointer<QObject> obj(component.create());
+ QVERIFY2(!obj.isNull(), qPrintable(component.errorString()));
+ QCOMPARE(obj->property("result").toInt(), 97);
+}
+
+QTEST_MAIN(tst_cmake_qmllint)
+
+#include "main.moc"
diff --git a/tests/auto/cmake/tooling_imports/main.qml b/tests/auto/cmake/tooling_imports/main.qml
new file mode 100644
index 0000000000..cc2c49ad41
--- /dev/null
+++ b/tests/auto/cmake/tooling_imports/main.qml
@@ -0,0 +1,11 @@
+import QtQml 2.0
+import First
+import Second
+import Test // Self import
+
+QtObject {
+ property DoSomething firstModule: DoSomething{}
+ property CheckIt secondModule: CheckIt{}
+ property int result: firstModule.success + secondModule.dummy
+ property Ttt mine: Ttt{}
+}
diff --git a/tests/auto/core/CMakeLists.txt b/tests/auto/core/CMakeLists.txt
index 31413de9c4..a57498db91 100644
--- a/tests/auto/core/CMakeLists.txt
+++ b/tests/auto/core/CMakeLists.txt
@@ -14,3 +14,7 @@ qt_internal_add_test(tst_core
Qt::Qml
TESTDATA ${test_data}
)
+
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_core)
+endif()
diff --git a/tests/auto/particles/qquickage/CMakeLists.txt b/tests/auto/particles/qquickage/CMakeLists.txt
index ef1cb8fe45..82e5481a28 100644
--- a/tests/auto/particles/qquickage/CMakeLists.txt
+++ b/tests/auto/particles/qquickage/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickage
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickage.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickage
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickage/tst_qquickage.cpp b/tests/auto/particles/qquickage/tst_qquickage.cpp
index 3a2d4e3927..2b9916d46c 100644
--- a/tests/auto/particles/qquickage/tst_qquickage.cpp
+++ b/tests/auto/particles/qquickage/tst_qquickage.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickage : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickage() {}
+ tst_qquickage() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickangleddirection/CMakeLists.txt b/tests/auto/particles/qquickangleddirection/CMakeLists.txt
index a60dfa8d6b..6e6a5b42e9 100644
--- a/tests/auto/particles/qquickangleddirection/CMakeLists.txt
+++ b/tests/auto/particles/qquickangleddirection/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickangleddirection
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickangleddirection.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickangleddirection
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickangleddirection/tst_qquickangleddirection.cpp b/tests/auto/particles/qquickangleddirection/tst_qquickangleddirection.cpp
index 6186dc97de..66a39c1357 100644
--- a/tests/auto/particles/qquickangleddirection/tst_qquickangleddirection.cpp
+++ b/tests/auto/particles/qquickangleddirection/tst_qquickangleddirection.cpp
@@ -31,14 +31,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickangleddirection : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickangleddirection() {}
+ tst_qquickangleddirection() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickcumulativedirection/CMakeLists.txt b/tests/auto/particles/qquickcumulativedirection/CMakeLists.txt
index 0eecede9a5..4a81fb010c 100644
--- a/tests/auto/particles/qquickcumulativedirection/CMakeLists.txt
+++ b/tests/auto/particles/qquickcumulativedirection/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickcumulativedirection
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickcumulativedirection.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickcumulativedirection
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickcumulativedirection/tst_qquickcumulativedirection.cpp b/tests/auto/particles/qquickcumulativedirection/tst_qquickcumulativedirection.cpp
index c5c4bbb897..011ccf1ae7 100644
--- a/tests/auto/particles/qquickcumulativedirection/tst_qquickcumulativedirection.cpp
+++ b/tests/auto/particles/qquickcumulativedirection/tst_qquickcumulativedirection.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickcumulativedirection : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickcumulativedirection() {}
+ tst_qquickcumulativedirection() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickcustomaffector/CMakeLists.txt b/tests/auto/particles/qquickcustomaffector/CMakeLists.txt
index 7b09402ea4..f89bce3be0 100644
--- a/tests/auto/particles/qquickcustomaffector/CMakeLists.txt
+++ b/tests/auto/particles/qquickcustomaffector/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickcustomaffector
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickcustomaffector.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickcustomaffector
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickcustomaffector/tst_qquickcustomaffector.cpp b/tests/auto/particles/qquickcustomaffector/tst_qquickcustomaffector.cpp
index 213768bbb6..c912c82650 100644
--- a/tests/auto/particles/qquickcustomaffector/tst_qquickcustomaffector.cpp
+++ b/tests/auto/particles/qquickcustomaffector/tst_qquickcustomaffector.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickcustomaffector : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickcustomaffector() {}
+ tst_qquickcustomaffector() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickellipseextruder/CMakeLists.txt b/tests/auto/particles/qquickellipseextruder/CMakeLists.txt
index 4d432f78d0..33126d1541 100644
--- a/tests/auto/particles/qquickellipseextruder/CMakeLists.txt
+++ b/tests/auto/particles/qquickellipseextruder/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickellipseextruder
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickellipseextruder.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickellipseextruder
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickellipseextruder/tst_qquickellipseextruder.cpp b/tests/auto/particles/qquickellipseextruder/tst_qquickellipseextruder.cpp
index ec1659d486..56e3c457af 100644
--- a/tests/auto/particles/qquickellipseextruder/tst_qquickellipseextruder.cpp
+++ b/tests/auto/particles/qquickellipseextruder/tst_qquickellipseextruder.cpp
@@ -31,14 +31,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickellipseextruder : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickellipseextruder() {}
+ tst_qquickellipseextruder() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickfriction/CMakeLists.txt b/tests/auto/particles/qquickfriction/CMakeLists.txt
index 5e7e270d69..3883a1dba3 100644
--- a/tests/auto/particles/qquickfriction/CMakeLists.txt
+++ b/tests/auto/particles/qquickfriction/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickfriction
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickfriction.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickfriction
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickfriction/tst_qquickfriction.cpp b/tests/auto/particles/qquickfriction/tst_qquickfriction.cpp
index de535118f4..b840828fcd 100644
--- a/tests/auto/particles/qquickfriction/tst_qquickfriction.cpp
+++ b/tests/auto/particles/qquickfriction/tst_qquickfriction.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickfriction : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickfriction() {}
+ tst_qquickfriction() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickgravity/CMakeLists.txt b/tests/auto/particles/qquickgravity/CMakeLists.txt
index e555dd9f80..315c2b2129 100644
--- a/tests/auto/particles/qquickgravity/CMakeLists.txt
+++ b/tests/auto/particles/qquickgravity/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickgravity
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickgravity.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickgravity
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickgravity/tst_qquickgravity.cpp b/tests/auto/particles/qquickgravity/tst_qquickgravity.cpp
index dcc0c017e8..27e30e68df 100644
--- a/tests/auto/particles/qquickgravity/tst_qquickgravity.cpp
+++ b/tests/auto/particles/qquickgravity/tst_qquickgravity.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickgravity : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickgravity() {}
+ tst_qquickgravity() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickgroupgoal/CMakeLists.txt b/tests/auto/particles/qquickgroupgoal/CMakeLists.txt
index dbacb28d29..410189917b 100644
--- a/tests/auto/particles/qquickgroupgoal/CMakeLists.txt
+++ b/tests/auto/particles/qquickgroupgoal/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickgroupgoal
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickgroupgoal.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickgroupgoal
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickgroupgoal/tst_qquickgroupgoal.cpp b/tests/auto/particles/qquickgroupgoal/tst_qquickgroupgoal.cpp
index 6ede0eb968..86a63b1cfb 100644
--- a/tests/auto/particles/qquickgroupgoal/tst_qquickgroupgoal.cpp
+++ b/tests/auto/particles/qquickgroupgoal/tst_qquickgroupgoal.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickgroupgoal : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickgroupgoal() {}
+ tst_qquickgroupgoal() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickimageparticle/BLACKLIST b/tests/auto/particles/qquickimageparticle/BLACKLIST
index a615dcd6e6..8a9bd8d00c 100644
--- a/tests/auto/particles/qquickimageparticle/BLACKLIST
+++ b/tests/auto/particles/qquickimageparticle/BLACKLIST
@@ -1,16 +1,20 @@
# QTBUG-63055
[test_colored]
b2qt
+qnx
# QTBUG-63055
[test_colorVariance]
b2qt
+qnx
# QTBUG-63055
[test_deformed]
b2qt
+qnx
# QTBUG-63055
[test_sprite]
b2qt
+qnx
diff --git a/tests/auto/particles/qquickimageparticle/CMakeLists.txt b/tests/auto/particles/qquickimageparticle/CMakeLists.txt
index 03f6ea0ef8..668d9c484d 100644
--- a/tests/auto/particles/qquickimageparticle/CMakeLists.txt
+++ b/tests/auto/particles/qquickimageparticle/CMakeLists.txt
@@ -7,15 +7,12 @@
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- data/*)
+ data/* ../shared/*)
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickimageparticle
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickimageparticle.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickimageparticle
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickimageparticle/tst_qquickimageparticle.cpp b/tests/auto/particles/qquickimageparticle/tst_qquickimageparticle.cpp
index 32a8a9435c..06c0e898d3 100644
--- a/tests/auto/particles/qquickimageparticle/tst_qquickimageparticle.cpp
+++ b/tests/auto/particles/qquickimageparticle/tst_qquickimageparticle.cpp
@@ -30,8 +30,7 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
const double CONV_FACTOR = 0.017453292519943295;//Degrees to radians
@@ -39,7 +38,7 @@ class tst_qquickimageparticle : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickimageparticle() {}
+ tst_qquickimageparticle() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
~tst_qquickimageparticle();
private slots:
@@ -244,46 +243,50 @@ void tst_qquickimageparticle::test_deformed()
void tst_qquickimageparticle::test_tabled()
{
- QQuickView* view = createView(testFileUrl("tabled.qml"), 600);
- QQuickParticleSystem* system = view->rootObject()->findChild<QQuickParticleSystem*>("system");
- ensureAnimTime(600, system->m_animation);
-
- QVERIFY(extremelyFuzzyCompare(system->groupData[0]->size(), 500, 10));
- for (QQuickParticleData *d : qAsConst(system->groupData[0]->data)) {
- if (d->t == -1)
- continue; //Particle data unused
-
- QCOMPARE(d->x, 0.f);
- QCOMPARE(d->y, 0.f);
- QCOMPARE(d->vx, 0.f);
- QCOMPARE(d->vy, 0.f);
- QCOMPARE(d->ax, 0.f);
- QCOMPARE(d->ay, 0.f);
- QCOMPARE(d->lifeSpan, 0.5f);
- QCOMPARE(d->size, 32.f);
- QCOMPARE(d->endSize, 32.f);
- QVERIFY(myFuzzyLEQ(d->t, ((qreal)system->timeInt/1000.0)));
- QCOMPARE(d->color.r, (uchar)255);
- QCOMPARE(d->color.g, (uchar)255);
- QCOMPARE(d->color.b, (uchar)255);
- QCOMPARE(d->color.a, (uchar)255);
- QCOMPARE(d->xx, 1.0f);
- QCOMPARE(d->xy, 0.0f);
- QCOMPARE(d->yy, 1.0f);
- QCOMPARE(d->yx, 0.0f);
- QCOMPARE(d->rotation, 0.0f);
- QCOMPARE(d->rotationVelocity, 0.0f);
- QCOMPARE(d->autoRotate, (uchar)0);
- QCOMPARE(d->animX, 0.0f);
- QCOMPARE(d->animY, 0.0f);
- QCOMPARE(d->animWidth, 1.0f);
- QCOMPARE(d->animHeight, 1.0f);
- QCOMPARE(d->frameDuration, 1.0f);
- QCOMPARE(d->frameCount, 1.0f);
- QCOMPARE(d->animT, -1.0f);
- //TODO: This performance level doesn't alter particleData, but goes straight to shaders. Find something to test
- }
- delete view;
+ #if defined(Q_OS_LINUX)
+ QSKIP("Crashing on Ubuntu 22.04: QTBUG-107707");
+ #else
+ QQuickView* view = createView(testFileUrl("tabled.qml"), 600);
+ QQuickParticleSystem* system = view->rootObject()->findChild<QQuickParticleSystem*>("system");
+ ensureAnimTime(600, system->m_animation);
+
+ QVERIFY(extremelyFuzzyCompare(system->groupData[0]->size(), 500, 10));
+ for (QQuickParticleData *d : qAsConst(system->groupData[0]->data)) {
+ if (d->t == -1)
+ continue; //Particle data unused
+
+ QCOMPARE(d->x, 0.f);
+ QCOMPARE(d->y, 0.f);
+ QCOMPARE(d->vx, 0.f);
+ QCOMPARE(d->vy, 0.f);
+ QCOMPARE(d->ax, 0.f);
+ QCOMPARE(d->ay, 0.f);
+ QCOMPARE(d->lifeSpan, 0.5f);
+ QCOMPARE(d->size, 32.f);
+ QCOMPARE(d->endSize, 32.f);
+ QVERIFY(myFuzzyLEQ(d->t, ((qreal)system->timeInt/1000.0)));
+ QCOMPARE(d->color.r, (uchar)255);
+ QCOMPARE(d->color.g, (uchar)255);
+ QCOMPARE(d->color.b, (uchar)255);
+ QCOMPARE(d->color.a, (uchar)255);
+ QCOMPARE(d->xx, 1.0f);
+ QCOMPARE(d->xy, 0.0f);
+ QCOMPARE(d->yy, 1.0f);
+ QCOMPARE(d->yx, 0.0f);
+ QCOMPARE(d->rotation, 0.0f);
+ QCOMPARE(d->rotationVelocity, 0.0f);
+ QCOMPARE(d->autoRotate, (uchar)0);
+ QCOMPARE(d->animX, 0.0f);
+ QCOMPARE(d->animY, 0.0f);
+ QCOMPARE(d->animWidth, 1.0f);
+ QCOMPARE(d->animHeight, 1.0f);
+ QCOMPARE(d->frameDuration, 1.0f);
+ QCOMPARE(d->frameCount, 1.0f);
+ QCOMPARE(d->animT, -1.0f);
+ //TODO: This performance level doesn't alter particleData, but goes straight to shaders. Find something to test
+ }
+ delete view;
+ #endif
}
diff --git a/tests/auto/particles/qquickitemparticle/CMakeLists.txt b/tests/auto/particles/qquickitemparticle/CMakeLists.txt
index ff695eb8af..c76cc1cd67 100644
--- a/tests/auto/particles/qquickitemparticle/CMakeLists.txt
+++ b/tests/auto/particles/qquickitemparticle/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickitemparticle
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickitemparticle.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickitemparticle
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickitemparticle/tst_qquickitemparticle.cpp b/tests/auto/particles/qquickitemparticle/tst_qquickitemparticle.cpp
index 32fe1a63c4..57e2e324c4 100644
--- a/tests/auto/particles/qquickitemparticle/tst_qquickitemparticle.cpp
+++ b/tests/auto/particles/qquickitemparticle/tst_qquickitemparticle.cpp
@@ -32,14 +32,13 @@
#include <private/qquickparticleemitter_p.h>
#include <private/qquickimage_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickitemparticle : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickitemparticle() {}
+ tst_qquickitemparticle() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquicklineextruder/CMakeLists.txt b/tests/auto/particles/qquicklineextruder/CMakeLists.txt
index d7791103be..2de4abfa87 100644
--- a/tests/auto/particles/qquicklineextruder/CMakeLists.txt
+++ b/tests/auto/particles/qquicklineextruder/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicklineextruder
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquicklineextruder.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquicklineextruder
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquicklineextruder/tst_qquicklineextruder.cpp b/tests/auto/particles/qquicklineextruder/tst_qquicklineextruder.cpp
index cfab3f8aee..f1e21ec98c 100644
--- a/tests/auto/particles/qquicklineextruder/tst_qquicklineextruder.cpp
+++ b/tests/auto/particles/qquicklineextruder/tst_qquicklineextruder.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquicklineextruder : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquicklineextruder() {}
+ tst_qquicklineextruder() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickmaskextruder/CMakeLists.txt b/tests/auto/particles/qquickmaskextruder/CMakeLists.txt
index 0ea7f18f6d..35926389c4 100644
--- a/tests/auto/particles/qquickmaskextruder/CMakeLists.txt
+++ b/tests/auto/particles/qquickmaskextruder/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickmaskextruder
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickmaskextruder.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickmaskextruder
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickmaskextruder/tst_qquickmaskextruder.cpp b/tests/auto/particles/qquickmaskextruder/tst_qquickmaskextruder.cpp
index 8a80a93e3e..ec138809cf 100644
--- a/tests/auto/particles/qquickmaskextruder/tst_qquickmaskextruder.cpp
+++ b/tests/auto/particles/qquickmaskextruder/tst_qquickmaskextruder.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickmaskextruder : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickmaskextruder() {}
+ tst_qquickmaskextruder() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickparticlegroup/CMakeLists.txt b/tests/auto/particles/qquickparticlegroup/CMakeLists.txt
index 4d335b18d0..2f8d5e87de 100644
--- a/tests/auto/particles/qquickparticlegroup/CMakeLists.txt
+++ b/tests/auto/particles/qquickparticlegroup/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickparticlegroup
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickparticlegroup.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickparticlegroup
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickparticlegroup/tst_qquickparticlegroup.cpp b/tests/auto/particles/qquickparticlegroup/tst_qquickparticlegroup.cpp
index 8dcce6a73c..2e688fc625 100644
--- a/tests/auto/particles/qquickparticlegroup/tst_qquickparticlegroup.cpp
+++ b/tests/auto/particles/qquickparticlegroup/tst_qquickparticlegroup.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickparticlegroup : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickparticlegroup() {}
+ tst_qquickparticlegroup() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickparticlesystem/CMakeLists.txt b/tests/auto/particles/qquickparticlesystem/CMakeLists.txt
index 984a7350f0..1cc7dede47 100644
--- a/tests/auto/particles/qquickparticlesystem/CMakeLists.txt
+++ b/tests/auto/particles/qquickparticlesystem/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickparticlesystem
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickparticlesystem.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickparticlesystem
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickparticlesystem/tst_qquickparticlesystem.cpp b/tests/auto/particles/qquickparticlesystem/tst_qquickparticlesystem.cpp
index 705e47230c..00ab7bd044 100644
--- a/tests/auto/particles/qquickparticlesystem/tst_qquickparticlesystem.cpp
+++ b/tests/auto/particles/qquickparticlesystem/tst_qquickparticlesystem.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickparticlesystem : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickparticlesystem() {}
+ tst_qquickparticlesystem() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickpointattractor/CMakeLists.txt b/tests/auto/particles/qquickpointattractor/CMakeLists.txt
index 6dfdc085af..e43159edb7 100644
--- a/tests/auto/particles/qquickpointattractor/CMakeLists.txt
+++ b/tests/auto/particles/qquickpointattractor/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpointattractor
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickpointattractor.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickpointattractor
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickpointattractor/tst_qquickpointattractor.cpp b/tests/auto/particles/qquickpointattractor/tst_qquickpointattractor.cpp
index 8e63c1802b..3630371de5 100644
--- a/tests/auto/particles/qquickpointattractor/tst_qquickpointattractor.cpp
+++ b/tests/auto/particles/qquickpointattractor/tst_qquickpointattractor.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickpointattractor : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickpointattractor() {}
+ tst_qquickpointattractor() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickpointdirection/CMakeLists.txt b/tests/auto/particles/qquickpointdirection/CMakeLists.txt
index 73867c74bb..ccc31b2c1d 100644
--- a/tests/auto/particles/qquickpointdirection/CMakeLists.txt
+++ b/tests/auto/particles/qquickpointdirection/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpointdirection
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickpointdirection.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickpointdirection
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickpointdirection/tst_qquickpointdirection.cpp b/tests/auto/particles/qquickpointdirection/tst_qquickpointdirection.cpp
index ae5bfe406a..ae8860fcf7 100644
--- a/tests/auto/particles/qquickpointdirection/tst_qquickpointdirection.cpp
+++ b/tests/auto/particles/qquickpointdirection/tst_qquickpointdirection.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickpointdirection : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickpointdirection() {}
+ tst_qquickpointdirection() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickrectangleextruder/CMakeLists.txt b/tests/auto/particles/qquickrectangleextruder/CMakeLists.txt
index 9e48fd6d93..52c87db86d 100644
--- a/tests/auto/particles/qquickrectangleextruder/CMakeLists.txt
+++ b/tests/auto/particles/qquickrectangleextruder/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickrectangleextruder
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickrectangleextruder.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickrectangleextruder
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickrectangleextruder/tst_qquickrectangleextruder.cpp b/tests/auto/particles/qquickrectangleextruder/tst_qquickrectangleextruder.cpp
index 6447523cd1..d95c4bc464 100644
--- a/tests/auto/particles/qquickrectangleextruder/tst_qquickrectangleextruder.cpp
+++ b/tests/auto/particles/qquickrectangleextruder/tst_qquickrectangleextruder.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickrectangleextruder : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickrectangleextruder() {}
+ tst_qquickrectangleextruder() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickspritegoal/BLACKLIST b/tests/auto/particles/qquickspritegoal/BLACKLIST
index bd64621f77..f09c8912c6 100644
--- a/tests/auto/particles/qquickspritegoal/BLACKLIST
+++ b/tests/auto/particles/qquickspritegoal/BLACKLIST
@@ -1,3 +1,4 @@
# QTBUG-63057
[test_instantTransition]
b2qt
+qnx
diff --git a/tests/auto/particles/qquickspritegoal/CMakeLists.txt b/tests/auto/particles/qquickspritegoal/CMakeLists.txt
index 0f87615bb0..4fe39a3acd 100644
--- a/tests/auto/particles/qquickspritegoal/CMakeLists.txt
+++ b/tests/auto/particles/qquickspritegoal/CMakeLists.txt
@@ -7,15 +7,12 @@
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- data/*)
+ data/* ../shared/*)
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickspritegoal
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickspritegoal.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickspritegoal
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickspritegoal/tst_qquickspritegoal.cpp b/tests/auto/particles/qquickspritegoal/tst_qquickspritegoal.cpp
index 4f803b9b64..43fb3bafe7 100644
--- a/tests/auto/particles/qquickspritegoal/tst_qquickspritegoal.cpp
+++ b/tests/auto/particles/qquickspritegoal/tst_qquickspritegoal.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickspritegoal : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickspritegoal() {}
+ tst_qquickspritegoal() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquicktargetdirection/CMakeLists.txt b/tests/auto/particles/qquicktargetdirection/CMakeLists.txt
index 1bb462af66..bd6526c83b 100644
--- a/tests/auto/particles/qquicktargetdirection/CMakeLists.txt
+++ b/tests/auto/particles/qquicktargetdirection/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktargetdirection
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquicktargetdirection.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquicktargetdirection
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquicktargetdirection/tst_qquicktargetdirection.cpp b/tests/auto/particles/qquicktargetdirection/tst_qquicktargetdirection.cpp
index a96c6e15ef..7f9bc0815a 100644
--- a/tests/auto/particles/qquicktargetdirection/tst_qquicktargetdirection.cpp
+++ b/tests/auto/particles/qquicktargetdirection/tst_qquicktargetdirection.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquicktargetdirection : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquicktargetdirection() {}
+ tst_qquicktargetdirection() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquicktrailemitter/CMakeLists.txt b/tests/auto/particles/qquicktrailemitter/CMakeLists.txt
index e7eb6ab607..97065a258e 100644
--- a/tests/auto/particles/qquicktrailemitter/CMakeLists.txt
+++ b/tests/auto/particles/qquicktrailemitter/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktrailemitter
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquicktrailemitter.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquicktrailemitter
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquicktrailemitter/tst_qquicktrailemitter.cpp b/tests/auto/particles/qquicktrailemitter/tst_qquicktrailemitter.cpp
index a6b73e4f1d..9fce9a5b29 100644
--- a/tests/auto/particles/qquicktrailemitter/tst_qquicktrailemitter.cpp
+++ b/tests/auto/particles/qquicktrailemitter/tst_qquicktrailemitter.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquicktrailemitter : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquicktrailemitter() {}
+ tst_qquicktrailemitter() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickturbulence/CMakeLists.txt b/tests/auto/particles/qquickturbulence/CMakeLists.txt
index 166649214c..f538c04829 100644
--- a/tests/auto/particles/qquickturbulence/CMakeLists.txt
+++ b/tests/auto/particles/qquickturbulence/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickturbulence
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickturbulence.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickturbulence
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickturbulence/tst_qquickturbulence.cpp b/tests/auto/particles/qquickturbulence/tst_qquickturbulence.cpp
index 69d47ffa1f..597b0dddaa 100644
--- a/tests/auto/particles/qquickturbulence/tst_qquickturbulence.cpp
+++ b/tests/auto/particles/qquickturbulence/tst_qquickturbulence.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickturbulence : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickturbulence() {}
+ tst_qquickturbulence() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/particles/qquickwander/CMakeLists.txt b/tests/auto/particles/qquickwander/CMakeLists.txt
index 8ce66a2318..f634b8bff2 100644
--- a/tests/auto/particles/qquickwander/CMakeLists.txt
+++ b/tests/auto/particles/qquickwander/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickwander
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickwander.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickwander
Qt::QmlPrivate
Qt::QuickParticlesPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/particles/qquickwander/tst_qquickwander.cpp b/tests/auto/particles/qquickwander/tst_qquickwander.cpp
index 8df00184b4..ec45461501 100644
--- a/tests/auto/particles/qquickwander/tst_qquickwander.cpp
+++ b/tests/auto/particles/qquickwander/tst_qquickwander.cpp
@@ -30,14 +30,13 @@
#include "../shared/particlestestsshared.h"
#include <private/qquickparticlesystem_p.h>
#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickwander : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickwander() {}
+ tst_qquickwander() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/qml/CMakeLists.txt b/tests/auto/qml/CMakeLists.txt
index 9a674cd24a..5fe0b0950f 100644
--- a/tests/auto/qml/CMakeLists.txt
+++ b/tests/auto/qml/CMakeLists.txt
@@ -12,6 +12,12 @@ add_subdirectory(qjsvalueiterator)
add_subdirectory(qjsonbinding)
add_subdirectory(qqmlfile)
add_subdirectory(qqmlfileselector)
+
+# Limit set of tests to run for static Qt builds.
+if(QT_BUILD_MINIMAL_STATIC_TESTS)
+ return()
+endif()
+
add_subdirectory(qqmlcomponent)
add_subdirectory(qqmlconsole)
add_subdirectory(qqmlengine)
@@ -21,7 +27,9 @@ add_subdirectory(qqmlinfo)
add_subdirectory(qqmllistreference)
add_subdirectory(qqmllocale)
add_subdirectory(qqmlmetaobject)
-add_subdirectory(qqmlmoduleplugin)
+if(NOT ANDROID) # QTBUG-100003
+ add_subdirectory(qqmlmoduleplugin)
+endif()
add_subdirectory(qqmlnotifier)
add_subdirectory(qqmlqt)
add_subdirectory(qqmlxmlhttprequest)
@@ -30,10 +38,23 @@ add_subdirectory(qtqmlmodules)
add_subdirectory(qquickfolderlistmodel)
add_subdirectory(qqmlapplicationengine)
add_subdirectory(qqmlsettings)
-add_subdirectory(qmldiskcache)
+
+if(NOT INTEGRITY)
+# There's no mounted filesystem on INTEGRITY therefore skipping qmldiskcache
+ add_subdirectory(qmldiskcache)
+endif()
+
add_subdirectory(qqmlmetatype)
add_subdirectory(qmlcompiler_manual)
-add_subdirectory(qmlbasicapp)
+if(TARGET Qt::Quick)
+ # This test always creates static plugins. To avoid linker command line
+ # ordering issues, we need at least CMake 3.21 and we cannot include the
+ # test if qmlimportscanner is being built as part of the main project.
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21 AND
+ (QT_BUILD_STANDALONE_TESTS OR QT6_IS_SHARED_LIBS_BUILD))
+ add_subdirectory(qmlbasicapp)
+ endif()
+endif()
if(TARGET Qt::Widgets)
add_subdirectory(qjsengine)
add_subdirectory(qjsvalue)
@@ -42,19 +63,20 @@ endif()
if(QT_FEATURE_process AND QT_FEATURE_qml_debug)
add_subdirectory(debugger)
endif()
-if(QT_FEATURE_process AND NOT boot2qt)
+if(QT_FEATURE_process AND NOT CMAKE_CROSSCOMPILING)
add_subdirectory(qmlformat)
add_subdirectory(qmlimportscanner)
add_subdirectory(qmllint)
add_subdirectory(qmlplugindump)
endif()
-if(QT_FEATURE_library)
+if(QT_FEATURE_library AND NOT ANDROID)
+ # QTBUG-100169
add_subdirectory(qqmlextensionplugin)
endif()
if(QT_FEATURE_private_tests)
add_subdirectory(qqmlcpputils)
add_subdirectory(qqmldirparser)
- if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.19")
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.19" AND QT_FEATURE_process)
# Calls qt6_target_qml_sources() directly, which needs CMake 3.19+
add_subdirectory(qmlcachegen)
endif()
@@ -100,7 +122,9 @@ if(QT_FEATURE_private_tests)
add_subdirectory(qv4mm)
add_subdirectory(qv4identifiertable)
add_subdirectory(qv4regexp)
- add_subdirectory(ecmascripttests)
+ if(QT_FEATURE_process AND NOT QNX)
+ add_subdirectory(ecmascripttests)
+ endif()
add_subdirectory(bindingdependencyapi)
add_subdirectory(v4misc)
add_subdirectory(qqmldelegatemodel) # special case
diff --git a/tests/auto/qml/bindingdependencyapi/CMakeLists.txt b/tests/auto/qml/bindingdependencyapi/CMakeLists.txt
index 775160e4c5..12ca578d93 100644
--- a/tests/auto/qml/bindingdependencyapi/CMakeLists.txt
+++ b/tests/auto/qml/bindingdependencyapi/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_bindingdependencyapi
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_bindingdependencyapi.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/bindingdependencyapi/dummy_imports.qml b/tests/auto/qml/bindingdependencyapi/dummy_imports.qml
index b9a196e188..63d33cbea6 100644
--- a/tests/auto/qml/bindingdependencyapi/dummy_imports.qml
+++ b/tests/auto/qml/bindingdependencyapi/dummy_imports.qml
@@ -1,8 +1,7 @@
// This file exists for the sole purpose for qmlimportscanner to find
// which modules it needs to extract for deployment.
-// Otherwise, it fails to find the imports that are expressed in C++
-// code in tst_parserstress.cpp
+// Otherwise, it fails to find the imports that are expressed in C++.
-import QtQuick 2.0
+import QtQuick
-QtObject { } // This is needed in order to keep importscanner happy
+QtObject { }
diff --git a/tests/auto/qml/bindingdependencyapi/tst_bindingdependencyapi.cpp b/tests/auto/qml/bindingdependencyapi/tst_bindingdependencyapi.cpp
index 82c997a5b8..81162c2c8a 100644
--- a/tests/auto/qml/bindingdependencyapi/tst_bindingdependencyapi.cpp
+++ b/tests/auto/qml/bindingdependencyapi/tst_bindingdependencyapi.cpp
@@ -32,7 +32,6 @@
#include <private/qqmlbinding_p.h>
#include <QtQuick/private/qquicktext_p.h>
#include <QtQuick/private/qquickrectangle_p.h>
-#include "../../shared/util.h"
#include <qqmlcontext.h>
class tst_bindingdependencyapi : public QObject
@@ -49,6 +48,7 @@ private slots:
void testConditionalDependencies_data();
void testConditionalDependencies();
void testBindingLoop();
+ void testQproperty();
private:
bool findProperties(const QVector<QQmlProperty> &properties, QObject *obj, const QString &propertyName, const QVariant &value);
@@ -355,6 +355,36 @@ void tst_bindingdependencyapi::testBindingLoop()
delete rect;
}
+void tst_bindingdependencyapi::testQproperty()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine);
+ c.setData(QByteArray("import QtQuick 2.0\n"
+ "Item {\n"
+ "id: root\n"
+ "Text {\n"
+ "id: label\n"
+ "text: root.x\n"
+ "}\n"
+ "}"), QUrl());
+ QScopedPointer<QObject> root(c.create());
+ QVERIFY(!root.isNull());
+ QObject *text = root->findChildren<QQuickText *>().front();
+ QVERIFY(text);
+ auto data = QQmlData::get(text);
+ QVERIFY(data);
+ auto b = data->bindings;
+ QVERIFY(b);
+ auto binding = dynamic_cast<QQmlBinding*>(b);
+ QVERIFY(binding);
+ auto dependencies = binding->dependencies();
+ QCOMPARE(dependencies.size(), 1);
+ auto dependency = dependencies.front();
+ QVERIFY(dependency.isValid());
+ QCOMPARE(quintptr(dependency.object()), quintptr(root.get()));
+ QCOMPARE(dependency.property().name(), "x");
+}
+
QTEST_MAIN(tst_bindingdependencyapi)
#include "tst_bindingdependencyapi.moc"
diff --git a/tests/auto/qml/debugger/CMakeLists.txt b/tests/auto/qml/debugger/CMakeLists.txt
index b6558ac5c1..a8bb089e15 100644
--- a/tests/auto/qml/debugger/CMakeLists.txt
+++ b/tests/auto/qml/debugger/CMakeLists.txt
@@ -1,25 +1,29 @@
# Generated from debugger.pro.
add_subdirectory(qqmldebugjsserver)
-add_subdirectory(qdebugmessageservice)
-
add_subdirectory(qqmldebugtranslationservice)
-add_subdirectory(qqmldebugtranslationclient)
-
-add_subdirectory(qqmlenginedebugservice)
-add_subdirectory(qqmldebugjs)
-add_subdirectory(qqmlinspector)
-add_subdirectory(qqmlprofilerservice)
add_subdirectory(qpacketprotocol)
-add_subdirectory(qqmlenginedebuginspectorintegrationtest)
-add_subdirectory(qqmlenginecontrol)
-add_subdirectory(qqmldebuggingenabler)
add_subdirectory(qqmlnativeconnector)
-add_subdirectory(qqmldebugprocess)
-add_subdirectory(qqmlpreview)
+
+if(NOT (CMAKE_CROSSCOMPILING OR (MACOS AND TEST_architecture_arch STREQUAL "x86_64")))
+ add_subdirectory(qdebugmessageservice)
+ add_subdirectory(qqmldebugtranslationclient)
+ add_subdirectory(qqmlenginedebugservice)
+ add_subdirectory(qqmldebugjs)
+ add_subdirectory(qqmlinspector)
+ add_subdirectory(qqmlprofilerservice)
+ add_subdirectory(qqmlenginedebuginspectorintegrationtest)
+ add_subdirectory(qqmlenginecontrol)
+ add_subdirectory(qqmldebuggingenabler)
+ add_subdirectory(qqmldebugprocess)
+ add_subdirectory(qqmlpreview)
+endif()
+
if(QT_FEATURE_private_tests)
add_subdirectory(qqmldebugclient)
add_subdirectory(qqmldebuglocal)
- add_subdirectory(qqmldebugservice)
add_subdirectory(qv4debugger)
+ if(NOT (CMAKE_CROSSCOMPILING OR (MACOS AND TEST_architecture_arch STREQUAL "x86_64")))
+ add_subdirectory(qqmldebugservice)
+ endif()
endif()
diff --git a/tests/auto/qml/debugger/qdebugmessageservice/CMakeLists.txt b/tests/auto/qml/debugger/qdebugmessageservice/CMakeLists.txt
index 3ad886b0ad..f6c4af80d1 100644
--- a/tests/auto/qml/debugger/qdebugmessageservice/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qdebugmessageservice/CMakeLists.txt
@@ -12,19 +12,16 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qdebugmessageservice
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qdebugmessageservice.cpp
- INCLUDE_DIRECTORIES
- ../../../shared
- ../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Network
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp b/tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp
index ecee0db428..d0aeefdacc 100644
--- a/tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp
+++ b/tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp
@@ -27,7 +27,7 @@
****************************************************************************/
//QQmlDebugTest
-#include "debugutil_p.h"
+#include "../shared/debugutil_p.h"
#include <private/qqmldebugclient_p.h>
#include <private/qqmldebugconnection_p.h>
@@ -44,6 +44,9 @@ class tst_QDebugMessageService : public QQmlDebugTest
{
Q_OBJECT
+public:
+ tst_QDebugMessageService();
+
private slots:
void retrieveDebugOutput();
@@ -133,6 +136,11 @@ QList<QQmlDebugClient *> tst_QDebugMessageService::createClients()
return QList<QQmlDebugClient *>({m_client});
}
+tst_QDebugMessageService::tst_QDebugMessageService()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QDebugMessageService::retrieveDebugOutput()
{
QCOMPARE(QQmlDebugTest::connectTo(QLibraryInfo::path(QLibraryInfo::BinariesPath) + "/qml",
diff --git a/tests/auto/qml/debugger/qpacketprotocol/CMakeLists.txt b/tests/auto/qml/debugger/qpacketprotocol/CMakeLists.txt
index 3ab44c2670..28708ff48b 100644
--- a/tests/auto/qml/debugger/qpacketprotocol/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qpacketprotocol/CMakeLists.txt
@@ -6,12 +6,10 @@
qt_internal_add_test(tst_qpacketprotocol
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qpacketprotocol.cpp
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
@@ -19,6 +17,7 @@ qt_internal_add_test(tst_qpacketprotocol
Qt::GuiPrivate
Qt::Network
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
)
## Scopes:
diff --git a/tests/auto/qml/debugger/qqmldebugclient/CMakeLists.txt b/tests/auto/qml/debugger/qqmldebugclient/CMakeLists.txt
index 86009707a9..50089a4d57 100644
--- a/tests/auto/qml/debugger/qqmldebugclient/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmldebugclient/CMakeLists.txt
@@ -6,7 +6,6 @@
qt_internal_add_test(tst_qqmldebugclient
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
../shared/qqmldebugtestservice.cpp ../shared/qqmldebugtestservice.h
@@ -15,7 +14,6 @@ qt_internal_add_test(tst_qqmldebugclient
QT_QML_DEBUG
QT_QML_DEBUG_NO_WARNING
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
@@ -23,6 +21,7 @@ qt_internal_add_test(tst_qqmldebugclient
Qt::GuiPrivate
Qt::QmlDebugPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
)
## Scopes:
diff --git a/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/CMakeLists.txt b/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/CMakeLists.txt
index 8b3f0b6d5c..ae0f5f5b40 100644
--- a/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/CMakeLists.txt
@@ -6,12 +6,10 @@
qt_internal_add_test(tst_qqmldebuggingenabler
SOURCES
- ../../../../shared/util.cpp ../../../../shared/util.h
../../shared/debugutil.cpp ../../shared/debugutil_p.h
../../shared/qqmldebugprocess.cpp ../../shared/qqmldebugprocess_p.h
tst_qqmldebuggingenabler.cpp
INCLUDE_DIRECTORIES
- ../../../../shared
../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
@@ -19,6 +17,7 @@ qt_internal_add_test(tst_qqmldebuggingenabler
Qt::GuiPrivate
Qt::Qml
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
)
#### Keys ignored in scope 1:.:.:qqmldebuggingenabler.pro:<TRUE>:
diff --git a/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp b/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp
index a22ae6e7a0..163a9e2e7e 100644
--- a/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp
+++ b/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp
@@ -28,7 +28,7 @@
#include "debugutil_p.h"
#include "qqmldebugprocess_p.h"
-#include "../../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmldebugclient_p.h>
#include <private/qqmldebugconnection_p.h>
@@ -47,6 +47,9 @@ class tst_QQmlDebuggingEnabler : public QQmlDebugTest
{
Q_OBJECT
+public:
+ tst_QQmlDebuggingEnabler();
+
private slots:
void qmlscene_data();
void qmlscene();
@@ -91,6 +94,11 @@ void tst_QQmlDebuggingEnabler::data()
}
}
+tst_QQmlDebuggingEnabler::tst_QQmlDebuggingEnabler()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQmlDebuggingEnabler::qmlscene_data()
{
data();
diff --git a/tests/auto/qml/debugger/qqmldebugjs/CMakeLists.txt b/tests/auto/qml/debugger/qqmldebugjs/CMakeLists.txt
index 99a885589e..8741902c8e 100644
--- a/tests/auto/qml/debugger/qqmldebugjs/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmldebugjs/CMakeLists.txt
@@ -12,18 +12,17 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmldebugjs
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmldebugjs.cpp
INCLUDE_DIRECTORIES
- ../../../shared
- ../shared ../shared
+ ../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp b/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp
index 41c0c5ec00..82f76ca30d 100644
--- a/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp
+++ b/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp
@@ -28,7 +28,7 @@
#include "debugutil_p.h"
#include "qqmldebugprocess_p.h"
-#include "../../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmlenginedebugclient_p.h>
#include <private/qv4debugclient_p.h>
@@ -82,6 +82,9 @@ class tst_QQmlDebugJS : public QQmlDebugTest
{
Q_OBJECT
+public:
+ tst_QQmlDebugJS();
+
private slots:
void initTestCase() override;
@@ -175,6 +178,11 @@ private:
};
+tst_QQmlDebugJS::tst_QQmlDebugJS()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQmlDebugJS::initTestCase()
{
QQmlDebugTest::initTestCase();
diff --git a/tests/auto/qml/debugger/qqmldebuglocal/CMakeLists.txt b/tests/auto/qml/debugger/qqmldebuglocal/CMakeLists.txt
index 80836f5f6a..0458b076dc 100644
--- a/tests/auto/qml/debugger/qqmldebuglocal/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmldebuglocal/CMakeLists.txt
@@ -6,7 +6,6 @@
qt_internal_add_test(tst_qqmldebuglocal
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
../shared/qqmldebugtestservice.cpp ../shared/qqmldebugtestservice.h
@@ -14,7 +13,6 @@ qt_internal_add_test(tst_qqmldebuglocal
DEFINES
QT_QML_DEBUG_NO_WARNING
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
@@ -22,6 +20,7 @@ qt_internal_add_test(tst_qqmldebuglocal
Qt::GuiPrivate
Qt::QmlDebugPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
)
## Scopes:
diff --git a/tests/auto/qml/debugger/qqmldebugservice/CMakeLists.txt b/tests/auto/qml/debugger/qqmldebugservice/CMakeLists.txt
index 7434dc4286..1642c71d93 100644
--- a/tests/auto/qml/debugger/qqmldebugservice/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmldebugservice/CMakeLists.txt
@@ -12,7 +12,6 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmldebugservice
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
../shared/qqmldebugtestservice.cpp ../shared/qqmldebugtestservice.h
@@ -20,7 +19,6 @@ qt_internal_add_test(tst_qqmldebugservice
DEFINES
QT_QML_DEBUG_NO_WARNING
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
@@ -28,6 +26,7 @@ qt_internal_add_test(tst_qqmldebugservice
Qt::GuiPrivate
Qt::QmlDebugPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp b/tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp
index b90844bd10..d36ae80aa5 100644
--- a/tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp
+++ b/tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp
@@ -30,7 +30,7 @@
#include "qqmldebugtestservice.h"
#include "debugutil_p.h"
#include "qqmldebugprocess_p.h"
-#include "../../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmldebugclient_p.h>
#include <private/qqmldebugconnection_p.h>
@@ -51,6 +51,9 @@
class tst_QQmlDebugService : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_QQmlDebugService();
+
private:
QQmlDebugConnection *m_conn;
QQmlDebugTestService *m_service;
@@ -69,6 +72,11 @@ private slots:
void checkSupportForOldDataStreamVersion();
};
+tst_QQmlDebugService::tst_QQmlDebugService()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQmlDebugService::initTestCase()
{
QQmlDataTest::initTestCase();
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationclient/CMakeLists.txt b/tests/auto/qml/debugger/qqmldebugtranslationclient/CMakeLists.txt
index 8d7a9b38c2..699a6adc7e 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationclient/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmldebugtranslationclient/CMakeLists.txt
@@ -10,13 +10,11 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmldebugtranslationclient
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmldebugtranslationclient.cpp
INCLUDE_DIRECTORIES
../../../../../src/plugins/qmltooling/qmldbg_preview
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::QuickPrivate
@@ -25,6 +23,7 @@ qt_internal_add_test(tst_qqmldebugtranslationclient
Qt::GuiPrivate
Qt::Network
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationclient/tst_qqmldebugtranslationclient.cpp b/tests/auto/qml/debugger/qqmldebugtranslationclient/tst_qqmldebugtranslationclient.cpp
index 7bdf4a02f1..1c73eb8521 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationclient/tst_qqmldebugtranslationclient.cpp
+++ b/tests/auto/qml/debugger/qqmldebugtranslationclient/tst_qqmldebugtranslationclient.cpp
@@ -54,6 +54,10 @@ class tst_QQmlDebugTranslationClient : public QQmlDebugTest
{
Q_OBJECT
public:
+ tst_QQmlDebugTranslationClient()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+ {
+ }
private slots:
void init()
@@ -71,7 +75,7 @@ private slots:
{
QVersionedPacket<QQmlDebugConnector> packet;
m_debugTranslationClient->sendMessage(
- QQmlDebugTranslation::createMissingTranslationsRequest(packet));
+ QQmlDebugTranslation::createTranslationIssuesRequest(packet));
QTRY_VERIFY(m_debugTranslationClient->translationIssues.size() > 0);
}
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationservice/BLACKLIST b/tests/auto/qml/debugger/qqmldebugtranslationservice/BLACKLIST
new file mode 100644
index 0000000000..b572260e87
--- /dev/null
+++ b/tests/auto/qml/debugger/qqmldebugtranslationservice/BLACKLIST
@@ -0,0 +1,7 @@
+# QTBUG-100164
+[verifyCorrectNumberOfMissingTranslations]
+android
+[getElideWarnings]
+android
+[getElideWarningsWhenStateChanged]
+android
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationservice/CMakeLists.txt b/tests/auto/qml/debugger/qqmldebugtranslationservice/CMakeLists.txt
index 6c6ddcfb62..ae112c7c94 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationservice/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmldebugtranslationservice/CMakeLists.txt
@@ -10,7 +10,6 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmldebugtranslationservice
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmldebugtranslationservice.cpp
@@ -18,7 +17,6 @@ qt_internal_add_test(tst_qqmldebugtranslationservice
QT_QML_DEBUG
INCLUDE_DIRECTORIES
../../../../../src/plugins/qmltooling/qmldbg_preview
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::Quick
@@ -29,6 +27,7 @@ qt_internal_add_test(tst_qqmldebugtranslationservice
Qt::Network
Qt::Qml
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.qm b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.qm
index 8d8064cc55..75ecfc87f3 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.qm
+++ b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.qm
Binary files differ
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.ts b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.ts
index e8d675ec0d..a4e8e96c57 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.ts
+++ b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_es.ts
@@ -2,16 +2,26 @@
<!DOCTYPE TS>
<TS version="2.1" language="es_ES">
<context>
- <name>test</name>
- <message>
- <location filename="../test.qml" line="43"/>
- <source>hello</source>
+ <name></name>
+ <message id="TRID_1">
+ <source>TRID_1</source>
<translation>hola</translation>
</message>
- <message>
- <location filename="../test.qml" line="49"/>
- <source>short</source>
- <translation type="unfinished"></translation>
+ <message id="TRID_2">
+ <source>TRID_2</source>
+ <translation>long text in spanish</translation>
+ </message>
+ <message id="TRID_3">
+ <source>TRID_3</source>
+ <translation>spanish</translation>
+ </message>
+ <message id="TRID_4">
+ <source>TRID_4</source>
+ <translation>has it</translation>
+ </message>
+ <message id="TRID_5">
+ <source>TRID_5</source>
+ <translation>all !</translation>
</message>
</context>
</TS>
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.qm b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.qm
index 273539d28a..4bc491c34f 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.qm
+++ b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.qm
Binary files differ
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.ts b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.ts
index fd4b8f5649..b64fee2744 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.ts
+++ b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/i18n/qml_fr.ts
@@ -2,15 +2,25 @@
<!DOCTYPE TS>
<TS version="2.1" language="fr_FR">
<context>
- <name>test</name>
- <message>
- <location filename="../test.qml" line="43"/>
- <source>hello</source>
+ <name></name>
+ <message id="TRID_1">
+ <source>TRID_1</source>
<translation>bonjour</translation>
</message>
- <message>
- <location filename="../test.qml" line="49"/>
- <source>short</source>
+ <message id="TRID_2">
+ <source>TRID_2</source>
+ <translation>french misses some</translation>
+ </message>
+ <message id="TRID_3">
+ <source>TRID_3</source>
+ <translation></translation>
+ </message>
+ <message id="TRID_4">
+ <source>TRID_4</source>
+ <translation>TRID_4</translation>
+ </message>
+ <message id="TRID_5">
+ <source>TRID_5</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/test.qml b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/test.qml
index 325d8cdca5..1834ed3772 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationservice/data/test.qml
+++ b/tests/auto/qml/debugger/qqmldebugtranslationservice/data/test.qml
@@ -26,40 +26,48 @@
**
****************************************************************************/
-import QtQuick 2.0
+import QtQuick
-
-Item {
+Rectangle {
id: root
- width: 360
- height: 360
+ width: 130
+ height: 200
property int widthFactor: 7
Column {
+ anchors.fill: parent
Text {
id: text1
- text: qsTr("hello")
- width: root.width / widthFactor
+ width: parent.width;
+ text: qsTrId("TRID_1")
}
Text {
id: text2
- text: qsTr("short")
- width: root.width / widthFactor
+ width: 100;
+ text: qsTrId("TRID_2")
}
Text {
id: text3
- text: "long not translated text"
- width: root.width / widthFactor
+ width: parent.width;
+ text: qsTrId("TRID_3")
+ }
+ Text {
+ id: text4
+ width: parent.width;
+ text: qsTrId("TRID_4")
+ }
+ Text {
+ id: text5
+ width: parent.width;
+ text: qsTrId("TRID_5")
+ }
+ Text {
+ id: text6
+ width: parent.width;
+ text: "way too long not translated text that should elide but not be marked"
}
}
- // this is necessary to have the test working for different font sizes and dpi settings
- Text {
- id: originHelloTextToGetTheNecessaryWidth
- text: "short"
- opacity: 0
- anchors.bottom: root.bottom
- onWidthChanged: root.width = originHelloTextToGetTheNecessaryWidth.width * widthFactor
- }
+
states: [
State {
name: "BiggerFontState"
@@ -79,10 +87,6 @@ Item {
font.pointSize: 20
}
- PropertyChanges {
- target: originHelloTextToGetTheNecessaryWidth
- font.pointSize: 20
- }
},
State {
name: "WayBiggerFontState"
@@ -101,11 +105,6 @@ Item {
target: text3
font.pointSize: 30
}
-
- PropertyChanges {
- target: originHelloTextToGetTheNecessaryWidth
- font.pointSize: 30
- }
}
]
}
diff --git a/tests/auto/qml/debugger/qqmldebugtranslationservice/tst_qqmldebugtranslationservice.cpp b/tests/auto/qml/debugger/qqmldebugtranslationservice/tst_qqmldebugtranslationservice.cpp
index b2b0ee4661..6d9be9deab 100644
--- a/tests/auto/qml/debugger/qqmldebugtranslationservice/tst_qqmldebugtranslationservice.cpp
+++ b/tests/auto/qml/debugger/qqmldebugtranslationservice/tst_qqmldebugtranslationservice.cpp
@@ -61,6 +61,7 @@ class tst_QQmlDebugTranslationService : public QQmlDebugTest
Q_OBJECT
public:
tst_QQmlDebugTranslationService()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
{
}
@@ -71,8 +72,6 @@ private slots:
m_view.setSource((testFileUrl(QMLFILE)));
QTRY_VERIFY2(m_view.status() == QQuickView::Ready, "Failed to load QML file");
- m_view.show();
- QVERIFY(QTest::qWaitForWindowActive(&m_view));
initQtHooks();
QVERIFY(hooks->qt_qmlDebugEnableService(qPrintable(QQmlDebugTranslationServiceImpl::s_key)));
}
@@ -83,146 +82,80 @@ private slots:
QVERIFY(currentDebugServiceMessage().isEmpty());
}
- void changeLanguage(const QString &language = QLocale::system().uiLanguages().first())
+ void verifyMissingAllTranslationsForMissingLanguage()
{
- // only necessary for visual debugging
- // QTest::qWait(500);
-
- QVersionedPacket<QQmlDebugConnector> packet;
- sendMessageToService(createChangeLanguageRequest(packet, dataDirectoryUrl(), language));
-
- // check without any eventloop cycle it should be still empty
- QCOMPARE(currentDebugServiceMessage(), QByteArray());
+ changeLanguage("ru");
+ auto translationIssues = getTranslationIssues();
- QVersionedPacket<QQmlDebugConnector> expectedReply;
- expectedReply << Reply::LanguageChanged;
- QCOMPARE(currentReply().at(0), expectedReply.data());
- // clear buffer explicit, because it is used in other test methods as helper method aswell
- hooks->qt_qmlDebugClearBuffer();
- QVERIFY(currentDebugServiceMessage().isEmpty());
+ QCOMPARE(translationIssues.length(), getTranslatableTextOccurrences().count());
+ QCOMPARE(translationIssues.at(0).language, "ru ru-RU ru-Cyrl-RU");
}
- void streamTranslationIssues()
+ void verifyCorrectNumberOfMissingTranslations()
{
- TranslationIssue issue;
- issue.type = TranslationIssue::Type::Missing;
- CodeMarker codeMarker;
- codeMarker.url = "url";
- codeMarker.line = 8;
- codeMarker.column = 9;
- issue.codeMarker = codeMarker;
- issue.language = "language";
- QVersionedPacket<QQmlDebugConnector> writePacket;
- writePacket << Reply::MissingTranslations
- << QVector<TranslationIssue>{issue};
- Reply replyType;
- QVector<TranslationIssue> replyTranslationIssues;
- QVersionedPacket<QQmlDebugConnector> readPacket(writePacket.data());
- readPacket >> replyType;
+ changeLanguage("fr");
- readPacket >> replyTranslationIssues;
+ auto translationIssues = getTranslationIssues();
- QCOMPARE(replyTranslationIssues.at(0), issue);
+ QCOMPARE(translationIssues.length(), 3);
+ QCOMPARE(translationIssues.at(0).language, "fr fr-FR fr-Latn-FR");
}
- void missingAllTranslations()
+ void verifyCorrectNumberOfTranslatableTextOccurrences()
{
- changeLanguage("ru");
-
- QVersionedPacket<QQmlDebugConnector> packet;
- sendMessageToService(createMissingTranslationsRequest(packet));
- const QList<QByteArray> replyMessages = currentReply();
-
- TranslationIssue firstMissingTranslationLine;
- firstMissingTranslationLine.type = TranslationIssue::Type::Missing;
- CodeMarker codeMarker;
- codeMarker.url = testFileUrl(QMLFILE);
- codeMarker.line = 41;
- codeMarker.column = 19;
- firstMissingTranslationLine.codeMarker = codeMarker;
- firstMissingTranslationLine.language = "ru ru-RU ru-Cyrl-RU";
- TranslationIssue secondMissingTranslationLine;
- secondMissingTranslationLine.type = TranslationIssue::Type::Missing;
- codeMarker.url = testFileUrl(QMLFILE);
- codeMarker.line = 46;
- codeMarker.column = 19;
- secondMissingTranslationLine.codeMarker = codeMarker;
- secondMissingTranslationLine.language = "ru ru-RU ru-Cyrl-RU";
- QVersionedPacket<QQmlDebugConnector> expectedReply;
- expectedReply << Reply::MissingTranslations
- << QVector<TranslationIssue>{firstMissingTranslationLine, secondMissingTranslationLine};
-
- QVERIFY2(replyMessages.at(0) == expectedReply.data(), qPrintable(debugReply(replyMessages)));
+ QCOMPARE(getTranslatableTextOccurrences().length(), 5);
}
- void missingOneTranslation()
+ void verifyCorrectNumberOfStates()
{
- changeLanguage("fr");
-
- QVersionedPacket<QQmlDebugConnector> packet;
- sendMessageToService(createMissingTranslationsRequest(packet));
- const QList<QByteArray> replyMessages = currentReply();
-
-
- TranslationIssue missingTranslationLine;
- missingTranslationLine.type = TranslationIssue::Type::Missing;
- CodeMarker codeMarker;
- codeMarker.url = testFileUrl(QMLFILE);
- codeMarker.line = 46;
- codeMarker.column = 19;
- missingTranslationLine.codeMarker = codeMarker;
- missingTranslationLine.language = "fr fr-FR fr-Latn-FR";
- QVersionedPacket<QQmlDebugConnector> expectedReply;
- expectedReply << Reply::MissingTranslations
- << QVector<TranslationIssue>{missingTranslationLine};
-
- QVERIFY2(replyMessages.at(0) == expectedReply.data(), qPrintable(debugReply(replyMessages)));
+ QCOMPARE(getStates().length(), 2);
}
- void getTranslatableTextOccurrences()
+ void getElideWarnings()
{
-
QVersionedPacket<QQmlDebugConnector> packet;
- sendMessageToService(createTranslatableTextOccurrencesRequest(packet));
- QVersionedPacket<QQmlDebugConnector> readPacket(currentReply().at(0));
+ sendMessageToService(createWatchTextElidesRequest(packet));
- Reply replyType;
- QVector<QmlElement> replyQmlElementList;
- readPacket >> replyType;
- readPacket >> replyQmlElementList;
- QCOMPARE(replyQmlElementList.count(), 2);
+ changeLanguage("es");
+ auto translationIssues = getTranslationIssues();
+
+ int elideWarningCount = 0;
+ for (auto issue : translationIssues) {
+ if (issue.type == TranslationIssue::Type::Elided) {
+ elideWarningCount++;
+ }
+ }
+ QCOMPARE(elideWarningCount, 1);
}
- void getStates()
+ void getElideWarningsWhenStateChanged()
{
-
QVersionedPacket<QQmlDebugConnector> packet;
- sendMessageToService(createStateListRequest(packet));
- QVersionedPacket<QQmlDebugConnector> readPacket(currentReply().at(0));
+ sendMessageToService(createWatchTextElidesRequest(packet));
- Reply replyType;
- QVector<QmlState> replyStateList;
- readPacket >> replyType;
- readPacket >> replyStateList;
- QCOMPARE(replyStateList.count(), 2);
+ changeLanguage("es");
+
+ sendMessageToService(createChangeStateRequest(packet, "WayBiggerFontState"));
+
+ auto translationIssues = getTranslationIssues();
+
+ int elideWarningCount = 0;
+ for (auto issue : translationIssues) {
+ if (issue.type == TranslationIssue::Type::Elided) {
+ elideWarningCount++;
+ }
+ }
+ QCOMPARE(elideWarningCount, 1);
}
void loopThroughAllStates()
{
+ QVector<QmlState> stateList = getStates();
- QVersionedPacket<QQmlDebugConnector> packet;
- sendMessageToService(createStateListRequest(packet));
- QVersionedPacket<QQmlDebugConnector> readPacket(currentReply().at(0));
-
- Reply replyType;
- QVector<QmlState> replyStateList;
- readPacket >> replyType;
- readPacket >> replyStateList;
- QCOMPARE(replyStateList.count(), 2);
+ QCOMPARE(stateList.length(), 2);
- for (int i = 0; i < replyStateList.count(); i++) {
- auto stateName = replyStateList.at(i).name;
- hooks->qt_qmlDebugClearBuffer();
+ for (int i = 0; i < stateList.count(); i++) {
+ auto stateName = stateList.at(i).name;
QVersionedPacket<QQmlDebugConnector> packet;
sendMessageToService(createChangeStateRequest(packet, stateName));
@@ -238,121 +171,61 @@ private slots:
}
}
- void getElideWarning()
+private:
+
+ QVector<QmlElement> getTranslatableTextOccurrences()
{
+ QVersionedPacket<QQmlDebugConnector> packet;
+ sendMessageToService(createTranslatableTextOccurrencesRequest(packet));
+ QVersionedPacket<QQmlDebugConnector> readPacket(currentReply().at(0));
- changeLanguage("fr");
+ Reply replyType;
+ QVector<QmlElement> qmlElementList;
+ readPacket >> replyType;
+ readPacket >> qmlElementList;
- QVersionedPacket<QQmlDebugConnector> packet;
- sendMessageToService(createWatchTextElidesRequest(packet));
- const QList<QByteArray> replyMessages = currentReply();
-
-
- const QByteArray reply1 = replyMessages.at(0);
-
- TranslationIssue elidedeTextLine;
- elidedeTextLine.type = TranslationIssue::Type::Elided;
- CodeMarker codeMarker;
- codeMarker.url = testFileUrl(QMLFILE);
- codeMarker.line = 41;
- codeMarker.column = 19;
- elidedeTextLine.codeMarker = codeMarker;
- elidedeTextLine.language = "fr fr-FR fr-Latn-FR";
- QVersionedPacket<QQmlDebugConnector> expectedTextElidedReply;
- expectedTextElidedReply << Reply::TextElided << elidedeTextLine;
-
- Reply replyType1;
- TranslationIssue replyTranslationIssue;
- QVersionedPacket<QQmlDebugConnector> readPacket1(reply1);
- readPacket1 >> replyType1;
- readPacket1 >> replyTranslationIssue;
- QVERIFY2(reply1 == expectedTextElidedReply.data(), qPrintable(debugReply(replyMessages)));
-
- {
- gotMessage = false;
- auto handler = qInstallMessageHandler(messageHandler);
- auto guard = qScopeGuard([&]() { qInstallMessageHandler(handler); });
-
- packet.clear();
- sendMessageToService(createDisableWatchTextElidesRequest(packet));
- QTRY_VERIFY(gotMessage);
- }
+ return qmlElementList;
}
- void getElideWarningsWhenStateChanged()
+ QVector<QmlState> getStates()
{
- // it is only eliding in fr
- changeLanguage("fr");
QVersionedPacket<QQmlDebugConnector> packet;
- sendMessageToService(createWatchTextElidesRequest(packet));
- const QString stateName("BiggerFontState");
-
- packet.clear();
-
- sendMessageToService(createChangeStateRequest(packet, stateName));
-
- QList<QByteArray> replyMessagesWithElideWarnings;
-
- QByteArray stateChangedReply;
- while (stateChangedReply.isEmpty()) {
- for (const auto &reply : currentReply()) {
- QVersionedPacket<QQmlDebugConnector> packet(reply);
- Reply replyType;
- packet >> replyType;
-
- if (replyType == Reply::StateChanged)
- stateChangedReply = reply;
- else
- replyMessagesWithElideWarnings.append(replyMessagesWithElideWarnings);
- }
- hooks->qt_qmlDebugClearBuffer();
- }
+ sendMessageToService(createStateListRequest(packet));
+ auto replies = currentReply();
+ QVersionedPacket<QQmlDebugConnector> readPacket(replies.at(0));
- TranslationIssue expectedTranslationIssue;
- expectedTranslationIssue.type = TranslationIssue::Type::Elided;
- CodeMarker codeMarker;
- codeMarker.url = testFileUrl(QMLFILE);
- codeMarker.line = 41;
- codeMarker.column = 19;
- expectedTranslationIssue.codeMarker = codeMarker;
- expectedTranslationIssue.language = "fr fr-FR fr-Latn-FR";
-
- // text size is calculated many times, so it could be that we get
- // the same warning many times
- for (const QByteArray &message : replyMessagesWithElideWarnings) {
- Reply replyType;
- TranslationIssue translationIssue;
- QVersionedPacket<QQmlDebugConnector> readPacket1(message);
- readPacket1 >> replyType;
- readPacket1 >> translationIssue;
- QCOMPARE(replyType, Reply::TextElided);
- QVERIFY2(expectedTranslationIssue == translationIssue,
- qPrintable(debugReply(replyMessagesWithElideWarnings)));
+ Reply replyType;
+ QVector<QmlState> stateList;
+ readPacket >> replyType;
+ readPacket >> stateList;
- }
+ return stateList;
+ }
- QVersionedPacket<QQmlDebugConnector> expectedStateChangedReply;
- expectedStateChangedReply << Reply::StateChanged << stateName;
+ void changeLanguage(const QString &language = QLocale::system().uiLanguages().first())
+ {
+ QVersionedPacket<QQmlDebugConnector> packet;
+ sendMessageToService(createChangeLanguageRequest(packet, dataDirectoryUrl(), language));
+ QVersionedPacket<QQmlDebugConnector> readPacket(currentReply().at(0));
- Reply replyType2;
- QString stateNameReply;
- QVersionedPacket<QQmlDebugConnector> readPacket2(stateChangedReply);
- readPacket2 >> replyType2 >> stateNameReply;
- QCOMPARE(stateChangedReply, expectedStateChangedReply.data());
+ // Use this for visual debugging
+ // QTest::qWait(500);
+ }
- {
- gotMessage = false;
- auto handler = qInstallMessageHandler(messageHandler);
- auto guard = qScopeGuard([&]() { qInstallMessageHandler(handler); });
+ QVector<TranslationIssue> getTranslationIssues()
+ {
+ QVersionedPacket<QQmlDebugConnector> packet;
+ sendMessageToService(createTranslationIssuesRequest(packet));
+ QVersionedPacket<QQmlDebugConnector> readPacket(currentReply().at(0));
- packet.clear();
- sendMessageToService(createDisableWatchTextElidesRequest(packet));
+ Reply replyType;
+ QVector<TranslationIssue> translationIssues;
+ readPacket >> replyType;
+ readPacket >> translationIssues;
- QTRY_VERIFY(gotMessage);
- }
+ return translationIssues;
}
-private:
QByteArray debugServiceMessage(const QByteArray &data)
{
QByteArray message;
@@ -380,10 +253,17 @@ private:
}
void sendMessageToService(const QByteArray &message)
{
+ clearBuffer();
hooks->qt_qmlDebugSendDataToService(
qPrintable(QQmlDebugTranslationServiceImpl::s_key), message.toHex());
}
+ void clearBuffer()
+ {
+ hooks->qt_qmlDebugClearBuffer();
+ QCoreApplication::processEvents();
+ }
+
QByteArray currentDebugServiceMessage()
{
return QByteArray::fromRawData(*hooks->qt_qmlDebugMessageBuffer, *hooks->qt_qmlDebugMessageLength);
@@ -424,12 +304,10 @@ private:
return "LanguageChanged";
case Reply::StateChanged:
return "StateChanged";
- case Reply::MissingTranslations:
- return "MissingTranslations";
+ case Reply::TranslationIssues:
+ return "TranslationIssues";
case Reply::TranslatableTextOccurrences:
return "TranslatableTextOccurrences";
- case Reply::TextElided:
- return "TextElided";
default:
Q_ASSERT_X(false, "not implemented", "not implemented");
}
@@ -442,7 +320,7 @@ private:
QVersionedPacket<QQmlDebugConnector> readPacket(message);
readPacket >> replyType;
debugString.append(replyTypeToString(replyType));
- if (replyType == Reply::MissingTranslations) {
+ if (replyType == Reply::TranslationIssues) {
QVector<TranslationIssue> translationIssues;
readPacket >> translationIssues;
QStringList translationIssueStrings;
@@ -457,42 +335,10 @@ private:
debugString.append(translationIssuesString.arg(QString::number(translationIssues.size()),
translationIssueStrings.join("; ")));
}
- if (replyType == Reply::TextElided) {
- TranslationIssue translationIssue;
- readPacket >> translationIssue;
- debugString.append(QString(" %1 ").arg(translationIssue.toDebugString()));
- }
}
return debugString;
}
- QString missingRussionTranslationWarningLine42() const
- {
- const QString fileUrl(testFileUrl(QMLFILE).toString());
- return QString("%1:42:19: QQmlDebugTranslationService: In locale ru ru-RU ru-Cyrl-RU translation is missing.").arg(fileUrl);
- }
- QString missingFranceTranslationWarningLine47() const
- {
- const QString fileUrl(testFileUrl(QMLFILE).toString());
- return QString("%1:47:19: QQmlDebugTranslationService: In locale fr fr-FR fr-Latn-FR translation is missing.").arg(fileUrl);
- }
- QString missingSpainTranslationWarningLine47() const
- {
- const QString fileUrl(testFileUrl(QMLFILE).toString());
- return QString("%1:47:19: QQmlDebugTranslationService: In locale es es-ES es-Latn-ES translation is missing.").arg(fileUrl);
- }
- QString missingRussionTranslationWarningLine47() const
- {
- const QString fileUrl(testFileUrl(QMLFILE).toString());
- return QString("%1:47:19: QQmlDebugTranslationService: In locale ru ru-RU ru-Cyrl-RU translation is missing.").arg(fileUrl);
- }
-
- QString franceElideWarningMessageLine42() const
- {
- return QString(
- "%1:42:19: QQmlDebugTranslationService: In locale fr fr-FR fr-Latn-FR the translated text is eliding."
- ).arg(testFileUrl(QMLFILE).toString());
- }
QQuickView m_view;
QmlState m_currentState;
diff --git a/tests/auto/qml/debugger/qqmlenginecontrol/CMakeLists.txt b/tests/auto/qml/debugger/qqmlenginecontrol/CMakeLists.txt
index 63eda146ea..faa80f16e4 100644
--- a/tests/auto/qml/debugger/qqmlenginecontrol/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmlenginecontrol/CMakeLists.txt
@@ -12,18 +12,17 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlenginecontrol
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmlenginecontrol.cpp
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmlenginecontrol/tst_qqmlenginecontrol.cpp b/tests/auto/qml/debugger/qqmlenginecontrol/tst_qqmlenginecontrol.cpp
index 05abab737e..b209a9e059 100644
--- a/tests/auto/qml/debugger/qqmlenginecontrol/tst_qqmlenginecontrol.cpp
+++ b/tests/auto/qml/debugger/qqmlenginecontrol/tst_qqmlenginecontrol.cpp
@@ -27,7 +27,7 @@
****************************************************************************/
#include "debugutil_p.h"
-#include "../../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmldebugclient_p.h>
#include <private/qqmldebugconnection_p.h>
@@ -47,7 +47,8 @@ public slots:
void blockEngine(int engineId, const QString &name);
};
-QQmlEngineBlocker::QQmlEngineBlocker(QQmlEngineControlClient *parent): QObject(parent)
+QQmlEngineBlocker::QQmlEngineBlocker(QQmlEngineControlClient *parent)
+ : QObject(parent)
{
connect(parent, &QQmlEngineControlClient::engineAboutToBeAdded,
this, &QQmlEngineBlocker::blockEngine);
@@ -65,6 +66,9 @@ class tst_QQmlEngineControl : public QQmlDebugTest
{
Q_OBJECT
+public:
+ tst_QQmlEngineControl();
+
private:
ConnectResult connectTo(const QString &testFile, bool restrictServices);
QList<QQmlDebugClient *> createClients() override;
@@ -79,6 +83,11 @@ private slots:
void stopEngine();
};
+tst_QQmlEngineControl::tst_QQmlEngineControl()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+{
+}
+
QQmlDebugTest::ConnectResult tst_QQmlEngineControl::connectTo(const QString &file,
bool restrictServices)
{
diff --git a/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/CMakeLists.txt b/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/CMakeLists.txt
index e2553e1abc..f48c9a942b 100644
--- a/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/CMakeLists.txt
@@ -12,18 +12,17 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlenginedebuginspectorintegration
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmlenginedebuginspectorintegration.cpp
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp b/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp
index 34c6faf4ae..094d3daeb4 100644
--- a/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp
+++ b/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp
@@ -27,7 +27,7 @@
****************************************************************************/
#include "../shared/debugutil_p.h"
-#include "../../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmldebugconnection_p.h>
#include <private/qqmlenginedebugclient_p.h>
@@ -45,6 +45,9 @@ class tst_QQmlEngineDebugInspectorIntegration : public QQmlDebugTest
{
Q_OBJECT
+public:
+ tst_QQmlEngineDebugInspectorIntegration();
+
private:
ConnectResult init(bool restrictServices);
QList<QQmlDebugClient *> createClients() override;
@@ -85,6 +88,11 @@ QQmlEngineDebugObjectReference tst_QQmlEngineDebugInspectorIntegration::findRoot
return m_engineDebugClient->object();
}
+tst_QQmlEngineDebugInspectorIntegration::tst_QQmlEngineDebugInspectorIntegration()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+{
+}
+
QQmlDebugTest::ConnectResult tst_QQmlEngineDebugInspectorIntegration::init(bool restrictServices)
{
return QQmlDebugTest::connectTo(
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/CMakeLists.txt b/tests/auto/qml/debugger/qqmlenginedebugservice/CMakeLists.txt
index 4c3b449cb4..e632f91548 100644
--- a/tests/auto/qml/debugger/qqmlenginedebugservice/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/CMakeLists.txt
@@ -4,22 +4,28 @@
## tst_qqmlenginedebugservice Test:
#####################################################################
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
qt_internal_add_test(tst_qqmlenginedebugservice
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmlenginedebugservice.cpp
DEFINES
QT_QML_DEBUG_NO_WARNING
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::QmlDebugPrivate
Qt::QmlPrivate
Qt::Quick
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
## Scopes:
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/data/complexItem.qml b/tests/auto/qml/debugger/qqmlenginedebugservice/data/complexItem.qml
new file mode 100644
index 0000000000..ae8b681013
--- /dev/null
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/data/complexItem.qml
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import Test 1.0
+Item {
+ id: root
+ width: 10; height: 20; scale: blueRect.scale;
+ Rectangle { id: blueRect; width: 500; height: 600; color: "blue"; }
+ Text { font.bold: true; color: blueRect.color; }
+ MouseArea {
+ onEntered: { console.log('hello') }
+ }
+ property variant varObj
+ property variant varObjList: []
+ property variant varObjMap
+ property variant simpleVar: 10.05
+ Component.onCompleted: {
+ varObj = blueRect;
+ var list = varObjList;
+ list[0] = blueRect;
+ varObjList = list;
+ var map = new Object;
+ map.rect = blueRect;
+ varObjMap = map;
+ }
+ NonScriptPropertyElement {
+ }
+}
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/data/customTypes.qml b/tests/auto/qml/debugger/qqmlenginedebugservice/data/customTypes.qml
new file mode 100644
index 0000000000..21c0ee84ba
--- /dev/null
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/data/customTypes.qml
@@ -0,0 +1,31 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import Backend 1.0
+CustomTypes {
+}
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/data/emptyItem.qml b/tests/auto/qml/debugger/qqmlenginedebugservice/data/emptyItem.qml
new file mode 100644
index 0000000000..9bff34e1e5
--- /dev/null
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/data/emptyItem.qml
@@ -0,0 +1,31 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+Item {
+}
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/data/itemWithFunctions.qml b/tests/auto/qml/debugger/qqmlenginedebugservice/data/itemWithFunctions.qml
new file mode 100644
index 0000000000..ba1617cb37
--- /dev/null
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/data/itemWithFunctions.qml
@@ -0,0 +1,34 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+Item {
+ function myMethodNoArgs() { return 3; }
+ function myMethod(a) { return a + 9; }
+ function myMethodIndirect() { myMethod(3); }
+}
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/data/jsonTest.qml b/tests/auto/qml/debugger/qqmlenginedebugservice/data/jsonTest.qml
new file mode 100644
index 0000000000..53cae7a271
--- /dev/null
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/data/jsonTest.qml
@@ -0,0 +1,31 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import JsonTest 1.0
+JsonTest {
+}
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/data/rectangleWithTransitions.qml b/tests/auto/qml/debugger/qqmlenginedebugservice/data/rectangleWithTransitions.qml
new file mode 100644
index 0000000000..5447c1577a
--- /dev/null
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/data/rectangleWithTransitions.qml
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+Rectangle {
+ id: rootRect
+ width: 100
+ states: [
+ State {
+ name: "state1"
+ PropertyChanges {
+ target: rootRect
+ width: 200
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ from: "*"
+ to: "state1"
+ PropertyAnimation {
+ target: rootRect
+ property: "width"
+ duration: 100
+ }
+ }
+ ]
+}
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp b/tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp
index a87a77180f..9d6daa2cd1 100644
--- a/tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp
@@ -27,7 +27,7 @@
****************************************************************************/
#include "debugutil_p.h"
-#include "../../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmlbinding_p.h>
#include <private/qqmlboundsignal_p.h>
@@ -119,11 +119,16 @@ private:
};
-class tst_QQmlEngineDebugService : public QObject
+class tst_QQmlEngineDebugService : public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQmlEngineDebugService() : m_conn(nullptr), m_dbg(nullptr), m_engine(nullptr), m_rootItem(nullptr) {}
+ tst_QQmlEngineDebugService()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , m_conn(nullptr)
+ , m_dbg(nullptr)
+ , m_engine(nullptr)
+ , m_rootItem(nullptr) {}
private:
QQmlEngineDebugObjectReference findRootObject(int context = 0,
@@ -146,7 +151,7 @@ private:
QObjectList m_components;
private slots:
- void initTestCase();
+ void initTestCase() override;
void cleanupTestCase();
void watch_property();
@@ -327,93 +332,34 @@ void tst_QQmlEngineDebugService::getContexts()
void tst_QQmlEngineDebugService::initTestCase()
{
+ QQmlDataTest::initTestCase();
+
qmlRegisterType<NonScriptProperty>("Test", 1, 0, "NonScriptPropertyElement");
QTest::ignoreMessage(QtDebugMsg, "QML Debugger: Waiting for connection on port 3768...");
m_engine = new QQmlEngine(this);
- QList<QByteArray> qml;
- qml << "import QtQuick 2.0\n"
- "import Test 1.0\n"
- "Item {"
- "id: root\n"
- "width: 10; height: 20; scale: blueRect.scale;"
- "Rectangle { id: blueRect; width: 500; height: 600; color: \"blue\"; }"
- "Text { font.bold: true; color: blueRect.color; }"
- "MouseArea {"
- "onEntered: { console.log('hello') }"
- "}"
- "property variant varObj\n"
- "property variant varObjList: []\n"
- "property variant varObjMap\n"
- "property variant simpleVar: 10.05\n"
- "Component.onCompleted: {\n"
- "varObj = blueRect;\n"
- "var list = varObjList;\n"
- "list[0] = blueRect;\n"
- "varObjList = list;\n"
- "var map = new Object;\n"
- "map.rect = blueRect;\n"
- "varObjMap = map;\n"
- "}\n"
- "NonScriptPropertyElement {\n"
- "}\n"
- "}";
-
- // add second component to test multiple root contexts
- qml << "import QtQuick 2.0\n"
- "Item {}";
-
- // and a third to test methods
- qml << "import QtQuick 2.0\n"
- "Item {"
- "function myMethodNoArgs() { return 3; }\n"
- "function myMethod(a) { return a + 9; }\n"
- "function myMethodIndirect() { myMethod(3); }\n"
- "}";
-
- // and a fourth to test states
- qml << "import QtQuick 2.0\n"
- "Rectangle {\n"
- "id:rootRect\n"
- "width:100\n"
- "states: [\n"
- "State {\n"
- "name:\"state1\"\n"
- "PropertyChanges {\n"
- "target:rootRect\n"
- "width:200\n"
- "}\n"
- "}\n"
- "]\n"
- "transitions: [\n"
- "Transition {\n"
- "from:\"*\"\n"
- "to:\"state1\"\n"
- "PropertyAnimation {\n"
- "target:rootRect\n"
- "property:\"width\"\n"
- "duration:100\n"
- "}\n"
- "}\n"
- "]\n"
- "}\n"
- ;
-
- // test non-streamable properties
qmlRegisterType<CustomTypes>("Backend", 1, 0, "CustomTypes");
- qml << "import Backend 1.0\n"
- "CustomTypes {}"
- ;
-
qmlRegisterType<JsonTest>("JsonTest", 1, 0, "JsonTest");
- qml << "import JsonTest 1.0\n"
- "JsonTest {}"
- ;
- for (int i=0; i<qml.count(); i++) {
- QQmlComponent component(m_engine);
- component.setData(qml[i], QUrl::fromLocalFile(""));
+ // The contents of these files was previously hardcoded as QList<QByteArray>
+ // directly in this test, but that fails on Android, because the required
+ // dependencies are not deployed. When the contents is moved to separate
+ // files, qmlimportscanner is capable of providing all the necessary
+ // dependencies.
+ // Note that the order of the files in this list matters! The test-cases
+ // expect Qml components to be created is certain order.
+ constexpr const char *fileNames[] = {
+ "complexItem.qml",
+ "emptyItem.qml",
+ "itemWithFunctions.qml",
+ "rectangleWithTransitions.qml",
+ "customTypes.qml",
+ "jsonTest.qml"
+ };
+
+ for (auto file : fileNames) {
+ QQmlComponent component(m_engine, testFileUrl(file));
QVERIFY(component.isReady()); // fails if bad syntax
m_components << qobject_cast<QQuickItem*>(component.create());
}
@@ -752,8 +698,8 @@ void tst_QQmlEngineDebugService::queryObject()
// check source as defined in main()
QQmlEngineDebugFileReference source = obj.source;
- QCOMPARE(source.url, QUrl::fromLocalFile(""));
- QCOMPARE(source.lineNumber, 3);
+ QCOMPARE(source.url, testFileUrl("complexItem.qml"));
+ QCOMPARE(source.lineNumber, 31); // because of license header
QCOMPARE(source.columnNumber, 1);
// generically test all properties, children and childrens' properties
@@ -831,7 +777,7 @@ void tst_QQmlEngineDebugService::queryObjectsForLocation()
// check source as defined in main()
QQmlEngineDebugFileReference source = obj.source;
- QCOMPARE(source.url, QUrl(fileName));
+ QCOMPARE(source.url, testFileUrl(fileName));
QCOMPARE(source.lineNumber, lineNumber);
QCOMPARE(source.columnNumber, columnNumber);
diff --git a/tests/auto/qml/debugger/qqmlinspector/CMakeLists.txt b/tests/auto/qml/debugger/qqmlinspector/CMakeLists.txt
index 3303c7d110..4c5ae11084 100644
--- a/tests/auto/qml/debugger/qqmlinspector/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmlinspector/CMakeLists.txt
@@ -12,18 +12,17 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlinspector
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmlinspector.cpp
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp b/tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp
index 1c72242703..90a10f6dcd 100644
--- a/tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp
+++ b/tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp
@@ -28,7 +28,7 @@
#include "../shared/debugutil_p.h"
#include "../shared/qqmldebugprocess_p.h"
-#include "../../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmldebugconnection_p.h>
#include <private/qqmlinspectorclient_p.h>
@@ -45,6 +45,9 @@ class tst_QQmlInspector : public QQmlDebugTest
{
Q_OBJECT
+public:
+ tst_QQmlInspector();
+
private:
ConnectResult startQmlProcess(const QString &qmlFile, bool restrictMode = true);
void checkAnimationSpeed(int targetMillisPerDegree);
@@ -61,6 +64,11 @@ private slots:
void showAppOnTop();
};
+tst_QQmlInspector::tst_QQmlInspector()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+{
+}
+
QQmlDebugTest::ConnectResult tst_QQmlInspector::startQmlProcess(const QString &qmlFile,
bool restrictServices)
{
diff --git a/tests/auto/qml/debugger/qqmlpreview/CMakeLists.txt b/tests/auto/qml/debugger/qqmlpreview/CMakeLists.txt
index aef78fe28e..2672d0d008 100644
--- a/tests/auto/qml/debugger/qqmlpreview/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmlpreview/CMakeLists.txt
@@ -15,18 +15,17 @@ list(APPEND test_data "data/zoom.qml")
qt_internal_add_test(tst_qqmlpreview
SOURCES
../../../../../src/plugins/qmltooling/qmldbg_preview/qqmlpreviewblacklist.cpp ../../../../../src/plugins/qmltooling/qmldbg_preview/qqmlpreviewblacklist.h
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmlpreview.cpp
INCLUDE_DIRECTORIES
../../../../../src/plugins/qmltooling/qmldbg_preview
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp b/tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp
index 8d24c9fc52..cc48e43c08 100644
--- a/tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp
+++ b/tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp
@@ -45,6 +45,9 @@ class tst_QQmlPreview : public QQmlDebugTest
{
Q_OBJECT
+public:
+ tst_QQmlPreview();
+
private:
ConnectResult startQmlProcess(const QString &qmlFile);
void serveRequest(const QString &path);
@@ -71,6 +74,11 @@ private slots:
void fps();
};
+tst_QQmlPreview::tst_QQmlPreview()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+{
+}
+
QQmlDebugTest::ConnectResult tst_QQmlPreview::startQmlProcess(const QString &qmlFile)
{
return QQmlDebugTest::connectTo(QLibraryInfo::path(QLibraryInfo::BinariesPath) + "/qml",
diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/CMakeLists.txt b/tests/auto/qml/debugger/qqmlprofilerservice/CMakeLists.txt
index 394e4aa08d..3d57619bbb 100644
--- a/tests/auto/qml/debugger/qqmlprofilerservice/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qqmlprofilerservice/CMakeLists.txt
@@ -12,17 +12,16 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlprofilerservice
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
../shared/debugutil.cpp ../shared/debugutil_p.h
../shared/qqmldebugprocess.cpp ../shared/qqmldebugprocess_p.h
tst_qqmlprofilerservice.cpp
INCLUDE_DIRECTORIES
- ../../../shared
../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::QmlDebugPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
index 2b564e48ad..54ba3f2a27 100644
--- a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
+++ b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
@@ -28,7 +28,7 @@
#include "debugutil_p.h"
#include "qqmldebugprocess_p.h"
-#include "../../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmlprofilerclient_p.h>
#include <private/qqmldebugconnection_p.h>
@@ -45,8 +45,8 @@ class QQmlProfilerTestClient : public QQmlProfilerEventReceiver
Q_OBJECT
public:
- QQmlProfilerTestClient(QQmlDebugConnection *connection) :
- client(new QQmlProfilerClient(connection, this))
+ QQmlProfilerTestClient(QQmlDebugConnection *connection)
+ : client(new QQmlProfilerClient(connection, this))
{
connect(client.data(), &QQmlProfilerClient::traceStarted,
this, &QQmlProfilerTestClient::startTrace);
@@ -180,6 +180,9 @@ class tst_QQmlProfilerService : public QQmlDebugTest
{
Q_OBJECT
+public:
+ tst_QQmlProfilerService();
+
private:
enum MessageListType {
MessageListQML,
@@ -246,6 +249,11 @@ private:
#define VERIFY(type, position, expected, checks, numbers) \
QVERIFY(verify(type, position, expected, checks, numbers))
+tst_QQmlProfilerService::tst_QQmlProfilerService()
+ : QQmlDebugTest(QT_QMLTEST_DATADIR)
+{
+}
+
QQmlDebugTest::ConnectResult tst_QQmlProfilerService::connectTo(
bool block, const QString &file, bool recordFromStart, uint flushInterval,
bool restrictServices, const QString &executable)
diff --git a/tests/auto/qml/debugger/qv4debugger/CMakeLists.txt b/tests/auto/qml/debugger/qv4debugger/CMakeLists.txt
index f106208737..92565f55c1 100644
--- a/tests/auto/qml/debugger/qv4debugger/CMakeLists.txt
+++ b/tests/auto/qml/debugger/qv4debugger/CMakeLists.txt
@@ -4,6 +4,24 @@
## tst_qv4debugger Test:
#####################################################################
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_add_library(testCppTypes STATIC)
+qt_autogen_tools_initial_setup(testCppTypes)
+target_link_libraries(testCppTypes PRIVATE Qt::Qml Qt::QmlPrivate Qt::Quick)
+
+qt6_add_qml_module(testCppTypes
+ VERSION 1.0
+ URI TestTypes
+ SOURCES
+ commontypes.h
+)
+qt_autogen_tools_initial_setup(testCppTypesplugin)
+
qt_internal_add_test(tst_qv4debugger
SOURCES
../../../../../src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.cpp ../../../../../src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.h
@@ -18,7 +36,20 @@ qt_internal_add_test(tst_qv4debugger
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
+ testCppTypesplugin
+ TESTDATA ${test_data}
)
## Scopes:
#####################################################################
+
+qt_internal_extend_target(tst_qv4debugger CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+ )
+
+qt_internal_extend_target(tst_qv4debugger CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+ )
diff --git a/tests/auto/qml/debugger/qv4debugger/commontypes.h b/tests/auto/qml/debugger/qv4debugger/commontypes.h
new file mode 100644
index 0000000000..01b2125ae3
--- /dev/null
+++ b/tests/auto/qml/debugger/qv4debugger/commontypes.h
@@ -0,0 +1,20 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef COMMONTYPES_H
+#define COMMONTYPES_H
+
+#include <QtQuick/qquickitem.h>
+#include <QtQml/qqmlregistration.h>
+#include <QtQml/private/qv4engine_p.h>
+
+class MyType : public QQuickItem
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ MyType(QQuickItem *parent = nullptr) : QQuickItem(parent) {}
+ Q_INVOKABLE void name(QQmlV4Function*) const {}
+};
+
+#endif // COMMONTYPES_H
diff --git a/tests/auto/qml/debugger/qv4debugger/data/conditionalBreakPointInQml.qml b/tests/auto/qml/debugger/qv4debugger/data/conditionalBreakPointInQml.qml
new file mode 100644
index 0000000000..ceb4edbe7a
--- /dev/null
+++ b/tests/auto/qml/debugger/qv4debugger/data/conditionalBreakPointInQml.qml
@@ -0,0 +1,9 @@
+import QtQml 2.0
+QtObject {
+ id: root
+ property int foo: 42
+ property bool success: false
+ Component.onCompleted: {
+ success = true; // break here
+ }
+}
diff --git a/tests/auto/qml/debugger/qv4debugger/data/qtbug_107607.qml b/tests/auto/qml/debugger/qv4debugger/data/qtbug_107607.qml
new file mode 100644
index 0000000000..a7758de8a8
--- /dev/null
+++ b/tests/auto/qml/debugger/qv4debugger/data/qtbug_107607.qml
@@ -0,0 +1,10 @@
+import QtQuick
+import TestTypes
+MyType {
+ objectName: "patron"
+ Item {
+ Component.onCompleted: {
+ console.log("Hallo Welt");
+ }
+ }
+} \ No newline at end of file
diff --git a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
index 610665146b..b9b2fd6b69 100644
--- a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
+++ b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
@@ -25,6 +25,7 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtTest/QtTest>
#include "qv4datacollector.h"
@@ -40,10 +41,13 @@
#include <private/qv4string_p.h>
#include <private/qqmlbuiltinfunctions_p.h>
#include <private/qqmldebugservice_p.h>
+#include <QtQml/qqmlextensionplugin.h>
using namespace QV4;
using namespace QV4::Debugging;
+Q_IMPORT_QML_PLUGIN(TestTypesPlugin);
+
typedef QV4::ReturnedValue (*InjectedFunction)(const FunctionObject *b, const QV4::Value *, const QV4::Value *, int);
Q_DECLARE_METATYPE(InjectedFunction)
@@ -200,7 +204,15 @@ public slots:
ExpressionEvalJob job(debugger->engine(), request.frameNr, request.context,
request.expression, &collector);
debugger->runInEngine(&job);
- m_expressionResults << job.returnValue();
+ const QJsonObject& result = job.returnValue();
+ m_expressionResults << result;
+
+ if (request.shouldLookup) {
+ QJsonArray handles {result.value("handle").toInt()};
+ ValueLookupJob job(handles, &collector);
+ debugger->runInEngine(&job);
+ m_lookupResults << job.returnValue();
+ }
}
if (m_captureContextInfo)
@@ -273,10 +285,14 @@ public:
QString expression;
int frameNr;
int context;
+ bool shouldLookup = false;
};
+
+
QVector<ExpressionRequest> m_expressionRequests;
QV4Debugger::Speed m_resumeSpeed;
QList<QJsonObject> m_expressionResults;
+ QList<QJsonObject> m_lookupResults;
QV4Debugger *m_debugger;
// Utility methods:
@@ -289,10 +305,13 @@ public:
}
};
-class tst_qv4debugger : public QObject
+class tst_qv4debugger : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qv4debugger();
+
private slots:
void init();
void cleanup();
@@ -327,7 +346,7 @@ private slots:
void readThis();
void signalParameters();
-
+ void debuggerNoCrash();
private:
QV4Debugger *debugger() const
{
@@ -489,7 +508,7 @@ void tst_qv4debugger::conditionalBreakPoint()
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 3);
+ QCOMPARE(frame0.size(), 2);
QVERIFY(frame0.contains("i"));
QCOMPARE(frame0.value("i").toInt(), 11);
}
@@ -507,24 +526,17 @@ void tst_qv4debugger::conditionalBreakPointInQml()
debuggerAgent->addDebugger(v4Debugger);
debuggerAgent->moveToThread(debugThread.data());
- QQmlComponent component(&engine);
- component.setData("import QtQml 2.0\n"
- "QtObject {\n"
- " id: root\n"
- " property int foo: 42\n"
- " property bool success: false\n"
- " Component.onCompleted: {\n"
- " success = true;\n" // breakpoint here
- " }\n"
- "}\n", QUrl("test.qml"));
+ const QString qmlFileName("conditionalBreakPointInQml.qml");
+ const QString qmlFilePath(testFile(qmlFileName));
+ QQmlComponent component(&engine, qmlFilePath);
- v4Debugger->addBreakPoint("test.qml", 7, "root.foo == 42");
+ v4Debugger->addBreakPoint(qmlFileName, 7, "root.foo == 42");
QScopedPointer<QObject> obj(component.create());
QCOMPARE(obj->property("success").toBool(), true);
QCOMPARE(debuggerAgent->m_statesWhenPaused.count(), 1);
- QCOMPARE(debuggerAgent->m_statesWhenPaused.at(0).fileName, QStringLiteral("test.qml"));
+ QCOMPARE(debuggerAgent->m_statesWhenPaused.at(0).fileName, qmlFileName);
QCOMPARE(debuggerAgent->m_statesWhenPaused.at(0).lineNumber, 7);
debugThread->quit();
@@ -545,7 +557,7 @@ void tst_qv4debugger::readArguments()
QVERIFY(m_debuggerAgent->m_wasPaused);
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 5);
+ QCOMPARE(frame0.size(), 4);
QVERIFY(frame0.contains(QStringLiteral("a")));
QCOMPARE(frame0.type(QStringLiteral("a")), QStringLiteral("number"));
QCOMPARE(frame0.value(QStringLiteral("a")).toDouble(), 1.0);
@@ -568,7 +580,7 @@ void tst_qv4debugger::readComplicatedArguments()
QVERIFY(m_debuggerAgent->m_wasPaused);
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 2);
+ QCOMPARE(frame0.size(), 1);
QVERIFY(frame0.contains(QStringLiteral("a")));
QCOMPARE(frame0.type(QStringLiteral("a")), QStringLiteral("number"));
QCOMPARE(frame0.value(QStringLiteral("a")).toInt(), 12);
@@ -591,7 +603,7 @@ void tst_qv4debugger::readLocals()
QVERIFY(m_debuggerAgent->m_wasPaused);
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 7); // locals and parameters
+ QCOMPARE(frame0.size(), 6); // locals and parameters
QVERIFY(frame0.contains("c"));
QCOMPARE(frame0.type("c"), QStringLiteral("number"));
QCOMPARE(frame0.value("c").toDouble(), 3.0);
@@ -619,7 +631,7 @@ void tst_qv4debugger::readObject()
QVERIFY(m_debuggerAgent->m_wasPaused);
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 3);
+ QCOMPARE(frame0.size(), 2);
QVERIFY(frame0.contains("b"));
QCOMPARE(frame0.type("b"), QStringLiteral("object"));
QJsonObject b = frame0.rawValue("b");
@@ -680,7 +692,7 @@ void tst_qv4debugger::readContextInAllFrames()
for (int i = 0; i < 12; ++i) {
const TestAgent::NamedRefs &scope = m_debuggerAgent->m_capturedScope.at(i);
- QCOMPARE(scope.size(), 3);
+ QCOMPARE(scope.size(), 2);
QVERIFY(scope.contains("n"));
QCOMPARE(scope.type("n"), QStringLiteral("number"));
QCOMPARE(scope.value("n").toDouble(), i + 1.0);
@@ -944,6 +956,44 @@ void tst_qv4debugger::signalParameters()
QCOMPARE(obj->property("resultCallbackExternal").toString(), QLatin1String("unset"));
}
+void tst_qv4debugger::debuggerNoCrash()
+{
+ QQmlEngine engine;
+ QV4::ExecutionEngine *v4 = engine.handle();
+ QPointer<QV4Debugger> v4Debugger = new QV4Debugger(v4);
+ v4->setDebugger(v4Debugger.data());
+
+ QScopedPointer<QThread> debugThread(new QThread);
+ debugThread->start();
+ QScopedPointer<TestAgent> debuggerAgent(new TestAgent(v4));
+ debuggerAgent->addDebugger(v4Debugger);
+ debuggerAgent->moveToThread(debugThread.data());
+
+ const QString qmlFileName("qtbug_107607.qml");
+ const QString qmlFilePath(testFile(qmlFileName));
+ QQmlComponent component(&engine, qmlFilePath);
+
+ TestAgent::ExpressionRequest request;
+ request.expression = "this.parent";
+ request.frameNr = 0;
+ request.context = -1;
+ request.shouldLookup = true;
+ debuggerAgent->m_expressionRequests << request;
+ v4Debugger->addBreakPoint(qmlFileName, 7);
+
+ QScopedPointer<QObject> obj(component.create());
+
+ QVERIFY(debuggerAgent->m_lookupResults.size() > 0);
+ const QJsonObject result = debuggerAgent->m_lookupResults[0];
+ const QJsonArray properties = result["0"].toObject().value("properties").toArray();
+ QCOMPARE(properties[0].toObject().value("value").toString(), QStringLiteral("patron"));
+
+ debugThread->quit();
+ debugThread->wait();
+}
+
+tst_qv4debugger::tst_qv4debugger() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
+
QTEST_MAIN(tst_qv4debugger)
#include "tst_qv4debugger.moc"
diff --git a/tests/auto/qml/debugger/shared/debugutil.cpp b/tests/auto/qml/debugger/shared/debugutil.cpp
index 3787f34bc2..4598e288c7 100644
--- a/tests/auto/qml/debugger/shared/debugutil.cpp
+++ b/tests/auto/qml/debugger/shared/debugutil.cpp
@@ -34,6 +34,11 @@
#include <QtCore/qeventloop.h>
#include <QtCore/qtimer.h>
+QQmlDebugTest::QQmlDebugTest(const char *qmlTestDataDir)
+ : QQmlDataTest(qmlTestDataDir)
+{
+}
+
bool QQmlDebugTest::waitForSignal(QObject *receiver, const char *member, int timeout) {
QEventLoop loop;
QTimer timer;
diff --git a/tests/auto/qml/debugger/shared/debugutil_p.h b/tests/auto/qml/debugger/shared/debugutil_p.h
index ad24eaa7f8..e19f59d3f2 100644
--- a/tests/auto/qml/debugger/shared/debugutil_p.h
+++ b/tests/auto/qml/debugger/shared/debugutil_p.h
@@ -40,7 +40,7 @@
// We mean it.
//
-#include <../../../shared/util.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qqmldebugclient_p.h>
class QQmlDebugProcess;
@@ -48,6 +48,9 @@ class QQmlDebugTest : public QQmlDataTest
{
Q_OBJECT
public:
+ QQmlDebugTest(const char *qmlTestDataDir);
+
+public:
static bool waitForSignal(QObject *receiver, const char *member, int timeout = 5000);
static QList<QQmlDebugClient *> createOtherClients(QQmlDebugConnection *connection);
static QString clientStateString(const QQmlDebugClient *client);
diff --git a/tests/auto/qml/ecmascripttests/CMakeLists.txt b/tests/auto/qml/ecmascripttests/CMakeLists.txt
index 78e1c97e91..078881c41a 100644
--- a/tests/auto/qml/ecmascripttests/CMakeLists.txt
+++ b/tests/auto/qml/ecmascripttests/CMakeLists.txt
@@ -13,4 +13,6 @@ qt_internal_add_test(tst_ecmascripttests
)
set_property(TEST tst_ecmascripttests APPEND PROPERTY ENVIRONMENT "QTEST_FUNCTION_TIMEOUT=900000")
-add_subdirectory(qjstest)
+if(NOT CMAKE_CROSSCOMPILING)
+ add_subdirectory(qjstest)
+endif()
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index 6b743ba433..82d80f7f03 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -600,7 +600,6 @@ language/statements/class/definition/methods-gen-yield-as-literal-property-name.
language/statements/class/definition/methods-gen-yield-as-property-name.js fails
language/statements/class/definition/methods-named-eval-arguments.js fails
language/statements/class/definition/prototype-property.js fails
-language/statements/class/definition/setters-prop-desc.js fails
language/statements/class/definition/setters-restricted-ids.js fails
language/statements/class/definition/this-access-restriction-2.js fails
language/statements/class/definition/this-access-restriction.js fails
diff --git a/tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp b/tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp
index 24633d9c6d..9037ed0c92 100644
--- a/tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp
+++ b/tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp
@@ -393,9 +393,7 @@ void Test262Runner::loadTestExpectations()
return;
}
- int line = 0;
while (!file.atEnd()) {
- ++line;
QByteArray line = file.readLine().trimmed();
if (line.startsWith('#') || line.isEmpty())
continue;
@@ -440,9 +438,7 @@ void Test262Runner::updateTestExpectations()
QTemporaryFile updatedExpectations;
updatedExpectations.open();
- int line = 0;
while (!file.atEnd()) {
- ++line;
QByteArray originalLine = file.readLine();
QByteArray line = originalLine.trimmed();
if (line.startsWith('#') || line.isEmpty()) {
diff --git a/tests/auto/qml/parserstress/CMakeLists.txt b/tests/auto/qml/parserstress/CMakeLists.txt
index 2d2f3df4c3..4505dab1da 100644
--- a/tests/auto/qml/parserstress/CMakeLists.txt
+++ b/tests/auto/qml/parserstress/CMakeLists.txt
@@ -18,8 +18,12 @@ qt_internal_add_test(tst_parserstress
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
- TESTDATA ${test_data}
+ TESTDATA ${test_data} "dummy_imports.qml"
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_parserstress)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/parserstress/dummy_imports.qml b/tests/auto/qml/parserstress/dummy_imports.qml
index b9a196e188..63d33cbea6 100644
--- a/tests/auto/qml/parserstress/dummy_imports.qml
+++ b/tests/auto/qml/parserstress/dummy_imports.qml
@@ -1,8 +1,7 @@
// This file exists for the sole purpose for qmlimportscanner to find
// which modules it needs to extract for deployment.
-// Otherwise, it fails to find the imports that are expressed in C++
-// code in tst_parserstress.cpp
+// Otherwise, it fails to find the imports that are expressed in C++.
-import QtQuick 2.0
+import QtQuick
-QtObject { } // This is needed in order to keep importscanner happy
+QtObject { }
diff --git a/tests/auto/qml/qjsengine/CMakeLists.txt b/tests/auto/qml/qjsengine/CMakeLists.txt
index 3488a73a25..86efc2c0c2 100644
--- a/tests/auto/qml/qjsengine/CMakeLists.txt
+++ b/tests/auto/qml/qjsengine/CMakeLists.txt
@@ -28,7 +28,7 @@ qt_internal_add_test(tst_qjsengine
Qt::Widgets
LIBRARIES # special case
Threads::Threads # special case
- TESTDATA ${test_data}
+ TESTDATA ${test_data} "dummy_imports.qml"
)
# Resources:
@@ -62,6 +62,10 @@ qt_internal_add_resource(tst_qjsengine "qmake_immediate"
${qmake_immediate_resource_files}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qjsengine)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qjsengine/dummy_imports.qml b/tests/auto/qml/qjsengine/dummy_imports.qml
index 8d86f3583b..afe2b33adf 100644
--- a/tests/auto/qml/qjsengine/dummy_imports.qml
+++ b/tests/auto/qml/qjsengine/dummy_imports.qml
@@ -1,8 +1,7 @@
// This file exists for the sole purpose for qmlimportscanner to find
// which modules it needs to extract for deployment.
-// Otherwise, it fails to find the imports that are expressed in C++
-// code in tst_parserstress.cpp
+// Otherwise, it fails to find the imports that are expressed in C++.
-import QtQml 2.0
+import QtQml
-QtObject { } // This is needed in order to keep importscanner happy
+QtObject { }
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index 1cc48bd73b..a5e8713700 100644
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -105,6 +105,7 @@ private slots:
void valueConversion_RegularExpression();
void castWithMultipleInheritance();
void collectGarbage();
+ void collectGarbageNestedWrappersTwoEngines();
void gcWithNestedDataStructure();
void stacktrace();
void numberParsing_data();
@@ -264,11 +265,13 @@ private slots:
void triggerBackwardJumpWithDestructuring();
void arrayConcatOnSparseArray();
+ void concatAfterUnshift();
void sortSparseArray();
void compileBrokenRegexp();
void sortNonStringArray();
void iterateInvalidProxy();
void applyOnHugeArray();
+ void reflectApplyOnHugeArray();
void tostringRecursionCheck();
void arrayIncludesWithLargeArray();
@@ -278,6 +281,8 @@ private slots:
void uiLanguage();
void urlObject();
+ void thisInConstructor();
+ void forOfAndGc();
public:
Q_INVOKABLE QJSValue throwingCppMethod1();
@@ -855,7 +860,11 @@ void tst_QJSEngine::newQObjectRace()
{
void run() override
{
- for (int i=0;i<1000;++i)
+ int newObjectCount = 1000;
+#if defined(Q_OS_QNX)
+ newObjectCount = 256;
+#endif
+ for (int i=0;i<newObjectCount;++i)
{
QJSEngine e;
auto obj = e.newQObject(new QObject);
@@ -1841,6 +1850,44 @@ void tst_QJSEngine::collectGarbage()
QVERIFY(ptr.isNull());
}
+class TestObjectContainer : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QObject *dummy MEMBER m_dummy CONSTANT)
+
+public:
+ TestObjectContainer() : m_dummy(new QObject(this)) {}
+
+private:
+ QObject *m_dummy;
+};
+
+void tst_QJSEngine::collectGarbageNestedWrappersTwoEngines()
+{
+ QJSEngine engine1;
+ QJSEngine engine2;
+
+ TestObjectContainer container;
+ QQmlEngine::setObjectOwnership(&container, QQmlEngine::CppOwnership);
+
+ engine1.globalObject().setProperty("foobar", engine1.newQObject(&container));
+ engine2.globalObject().setProperty("foobar", engine2.newQObject(&container));
+
+ engine1.evaluate("foobar.dummy.baz = 42");
+ engine2.evaluate("foobar.dummy.baz = 43");
+
+ QCOMPARE(engine1.evaluate("foobar.dummy.baz").toInt(), 42);
+ QCOMPARE(engine2.evaluate("foobar.dummy.baz").toInt(), 43);
+
+ engine1.collectGarbage();
+ engine2.collectGarbage();
+
+ // The GC should not collect dummy object wrappers neither in engine1 nor engine2, we
+ // verify that by checking whether the baz property still has its previous value.
+ QCOMPARE(engine1.evaluate("foobar.dummy.baz").toInt(), 42);
+ QCOMPARE(engine2.evaluate("foobar.dummy.baz").toInt(), 43);
+}
+
void tst_QJSEngine::gcWithNestedDataStructure()
{
// The GC must be able to traverse deeply nested objects, otherwise this
@@ -5148,6 +5195,23 @@ void tst_QJSEngine::arrayConcatOnSparseArray()
QVERIFY(value.property(i).isUndefined());
}
+void tst_QJSEngine::concatAfterUnshift()
+{
+ QJSEngine engine;
+ const auto value = engine.evaluate(uR"(
+ (function() {
+ let test = ['val2']
+ test.unshift('val1')
+ test = test.concat([])
+ return test
+ })()
+ )"_qs);
+ QVERIFY2(!value.isError(), qPrintable(value.toString()));
+ QVERIFY(value.isArray());
+ QCOMPARE(value.property(0).toString(), u"val1"_qs);
+ QCOMPARE(value.property(1).toString(), u"val2"_qs);
+}
+
void tst_QJSEngine::sortSparseArray()
{
QJSEngine engine;
@@ -5264,12 +5328,28 @@ void tst_QJSEngine::applyOnHugeArray()
QCOMPARE(value.toString(), "RangeError: Array too large for apply().");
}
+
+void tst_QJSEngine::reflectApplyOnHugeArray()
+{
+ QQmlEngine engine;
+ const QJSValue value = engine.evaluate(R"(
+(function(){
+const v1 = [];
+const v3 = [];
+v3.length = 3900000000;
+Reflect.apply(v1.reverse,v1,v3);
+})()
+ )");
+ QVERIFY(value.isError());
+ QCOMPARE(value.toString(), QLatin1String("RangeError: Invalid array length."));
+}
+
void tst_QJSEngine::typedArraySet()
{
QJSEngine engine;
const auto value = engine.evaluate(
"(function() {"
- " var length = 0xffffffe;"
+ " var length = 0xfffffe0;"
" var offset = 0xfffffff0;"
" var e1;"
" var e2;"
@@ -5418,6 +5498,97 @@ void tst_QJSEngine::urlObject()
QCOMPARE(result2, url);
}
+void tst_QJSEngine::thisInConstructor()
+{
+ QJSEngine engine;
+ const QJSValue result = engine.evaluate(R"((function() {
+ let a = undefined;
+ class Bugtest {
+ constructor() {
+ (() => {
+ if (true) {
+ a = this;
+ }
+ })();
+ }
+ };
+ new Bugtest();
+ return a;
+ })())");
+ QVERIFY(!result.isUndefined());
+ QVERIFY(result.isObject());
+}
+
+void tst_QJSEngine::forOfAndGc()
+{
+ // We want to guard against the iterator of a for..of loop leaving the result unprotected from
+ // garbage collection. It should be possible to construct a pure JS test case, but due to the
+ // vaguaries of garbage collection it's hard to reliably trigger the crash. This test is the
+ // best I could come up with.
+
+ QQmlEngine engine;
+ QQmlComponent c(&engine);
+ c.setData(R"(
+ import QtQml
+
+ QtObject {
+ id: counter
+ property int count: 0
+
+ property DelegateModel model: DelegateModel {
+ id: filesModel
+
+ model: ListModel {
+ Component.onCompleted: {
+ for (let idx = 0; idx < 50; idx++)
+ append({"i" : idx})
+ }
+ }
+
+ groups: [
+ DelegateModelGroup {
+ name: "selected"
+ }
+ ]
+
+ function getSelected() {
+ for (let i = 0; i < items.count; ++i) {
+ var item = items.get(i)
+ for (let el of item.groups) {
+ if (el === "selected")
+ ++counter.count
+ }
+ }
+ }
+
+ property bool bSelect: true
+ function selectAll() {
+ for (let i = 0; i < items.count; ++i) {
+ if (bSelect && !items.get(i).inSelected)
+ items.addGroups(i, 1, ["selected"])
+ else
+ items.removeGroups(i, 1, ["selected"])
+ getSelected()
+ }
+ bSelect = !bSelect
+ }
+ }
+
+ property Timer timer: Timer {
+ running: true
+ interval: 1
+ repeat: true
+ onTriggered: filesModel.selectAll()
+ }
+ }
+ )", QUrl());
+
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+
+ QTRY_VERIFY(o->property("count").toInt() > 32768);
+}
+
QTEST_MAIN(tst_QJSEngine)
#include "tst_qjsengine.moc"
diff --git a/tests/auto/qml/qjsmanagedvalue/CMakeLists.txt b/tests/auto/qml/qjsmanagedvalue/CMakeLists.txt
index 3e466d8e2e..2449b9a320 100644
--- a/tests/auto/qml/qjsmanagedvalue/CMakeLists.txt
+++ b/tests/auto/qml/qjsmanagedvalue/CMakeLists.txt
@@ -10,7 +10,12 @@ qt_internal_add_test(tst_qjsmanagedvalue
PUBLIC_LIBRARIES
Qt::Qml
Qt::QmlPrivate
+ TESTDATA "dummy_imports.qml"
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qjsmanagedvalue)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qjsmanagedvalue/dummy_imports.qml b/tests/auto/qml/qjsmanagedvalue/dummy_imports.qml
new file mode 100644
index 0000000000..afe2b33adf
--- /dev/null
+++ b/tests/auto/qml/qjsmanagedvalue/dummy_imports.qml
@@ -0,0 +1,7 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQml
+
+QtObject { }
diff --git a/tests/auto/qml/qjsonbinding/CMakeLists.txt b/tests/auto/qml/qjsonbinding/CMakeLists.txt
index 1704e4e790..b85fd7b99c 100644
--- a/tests/auto/qml/qjsonbinding/CMakeLists.txt
+++ b/tests/auto/qml/qjsonbinding/CMakeLists.txt
@@ -12,14 +12,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qjsonbinding
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qjsonbinding.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Qml
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qjsonbinding/tst_qjsonbinding.cpp b/tests/auto/qml/qjsonbinding/tst_qjsonbinding.cpp
index 05e1ce8b6b..4c12f6d44c 100644
--- a/tests/auto/qml/qjsonbinding/tst_qjsonbinding.cpp
+++ b/tests/auto/qml/qjsonbinding/tst_qjsonbinding.cpp
@@ -27,7 +27,7 @@
****************************************************************************/
#include <QtTest/QtTest>
#include <QtQml/QtQml>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
Q_DECLARE_METATYPE(QJsonValue::Type)
@@ -55,7 +55,7 @@ class tst_qjsonbinding : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qjsonbinding() {}
+ tst_qjsonbinding() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void cppJsConversion_data();
@@ -77,6 +77,9 @@ private slots:
void writeProperty_javascriptExpression_data();
void writeProperty_javascriptExpression();
+ void cyclicStringify();
+ void recursiveStringify();
+
private:
QByteArray readAsUtf8(const QString &fileName);
static QJsonValue valueFromJson(const QByteArray &json);
@@ -514,6 +517,43 @@ void tst_qjsonbinding::writeProperty_javascriptExpression()
QCOMPARE(ret.toString(), expectedJson);
}
+void tst_qjsonbinding::cyclicStringify()
+{
+ QJSEngine e;
+ const QString program = QStringLiteral(R"(
+ var a = {};
+ a.a = a;
+ JSON.stringify(a);
+ )");
+
+ QJSValue result = e.evaluate(program);
+ QVERIFY(result.isError());
+ QCOMPARE(result.errorType(), QJSValue::TypeError);
+ QVERIFY(result.toString().contains(QLatin1String("Cannot convert circular structure to JSON")));
+}
+
+void tst_qjsonbinding::recursiveStringify()
+{
+ QJSEngine e;
+ const QString program = QStringLiteral(R"(
+ function create() {
+ var a = {}
+ Object.defineProperty(a, "a", {
+ enumerable: true,
+ get: function() { return create(); }
+ });
+ return a;
+ }
+
+ JSON.stringify(create());
+ )");
+
+ QJSValue result = e.evaluate(program);
+ QVERIFY(result.isError());
+ QCOMPARE(result.errorType(), QJSValue::RangeError);
+ QVERIFY(result.toString().contains(QLatin1String("Maximum call stack size exceeded")));
+}
+
QTEST_MAIN(tst_qjsonbinding)
#include "tst_qjsonbinding.moc"
diff --git a/tests/auto/qml/qjsvalue/CMakeLists.txt b/tests/auto/qml/qjsvalue/CMakeLists.txt
index bb00f3221a..b8ee79713c 100644
--- a/tests/auto/qml/qjsvalue/CMakeLists.txt
+++ b/tests/auto/qml/qjsvalue/CMakeLists.txt
@@ -22,7 +22,12 @@ qt_internal_add_test(tst_qjsvalue
Qt::Widgets
LIBRARIES # special case
Threads::Threads # special case
+ TESTDATA "dummy_imports.qml"
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qjsvalue)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qjsvalue/dummy_imports.qml b/tests/auto/qml/qjsvalue/dummy_imports.qml
new file mode 100644
index 0000000000..afe2b33adf
--- /dev/null
+++ b/tests/auto/qml/qjsvalue/dummy_imports.qml
@@ -0,0 +1,7 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQml
+
+QtObject { }
diff --git a/tests/auto/qml/qmlbasicapp/BasicExtension/CMakeLists.txt b/tests/auto/qml/qmlbasicapp/BasicExtension/CMakeLists.txt
index 6aad55abdc..a08c71a294 100644
--- a/tests/auto/qml/qmlbasicapp/BasicExtension/CMakeLists.txt
+++ b/tests/auto/qml/qmlbasicapp/BasicExtension/CMakeLists.txt
@@ -1,7 +1,7 @@
qt_add_library(additional_qml_module STATIC)
qt_autogen_tools_initial_setup(additional_qml_module)
-qt_add_plugin(additional_qml_module_plugin STATIC TYPE qml_plugin CLASS_NAME BasicExtension)
+qt_add_plugin(additional_qml_module_plugin STATIC PLUGIN_TYPE qml_plugin CLASS_NAME BasicExtension)
qt_autogen_tools_initial_setup(additional_qml_module_plugin)
qt6_add_qml_module(additional_qml_module
@@ -11,4 +11,9 @@ qt6_add_qml_module(additional_qml_module
URI "BasicExtension"
QML_FILES
Extension.qml
+ More.ui.qml
+ Less.js
+ ESModule.mjs
+ lowerCase.js
+ lowerCaseModule.mjs
)
diff --git a/tests/auto/qml/qmlbasicapp/BasicExtension/ESModule.mjs b/tests/auto/qml/qmlbasicapp/BasicExtension/ESModule.mjs
new file mode 100644
index 0000000000..e1424dc501
--- /dev/null
+++ b/tests/auto/qml/qmlbasicapp/BasicExtension/ESModule.mjs
@@ -0,0 +1 @@
+export function eee() { return "eee" }
diff --git a/tests/auto/qml/qmlbasicapp/BasicExtension/Less.js b/tests/auto/qml/qmlbasicapp/BasicExtension/Less.js
new file mode 100644
index 0000000000..a808d7be27
--- /dev/null
+++ b/tests/auto/qml/qmlbasicapp/BasicExtension/Less.js
@@ -0,0 +1 @@
+function bar() { return "bar" }
diff --git a/tests/auto/qml/qmlbasicapp/BasicExtension/More.ui.qml b/tests/auto/qml/qmlbasicapp/BasicExtension/More.ui.qml
new file mode 100644
index 0000000000..014d794229
--- /dev/null
+++ b/tests/auto/qml/qmlbasicapp/BasicExtension/More.ui.qml
@@ -0,0 +1,3 @@
+import QtQml
+
+QtObject { objectName: "ui.qml" }
diff --git a/tests/auto/qml/qmlbasicapp/BasicExtension/lowerCase.js b/tests/auto/qml/qmlbasicapp/BasicExtension/lowerCase.js
new file mode 100644
index 0000000000..9d90c9c6f1
--- /dev/null
+++ b/tests/auto/qml/qmlbasicapp/BasicExtension/lowerCase.js
@@ -0,0 +1 @@
+function a() { return "a" }
diff --git a/tests/auto/qml/qmlbasicapp/BasicExtension/lowerCaseModule.mjs b/tests/auto/qml/qmlbasicapp/BasicExtension/lowerCaseModule.mjs
new file mode 100644
index 0000000000..f35813109c
--- /dev/null
+++ b/tests/auto/qml/qmlbasicapp/BasicExtension/lowerCaseModule.mjs
@@ -0,0 +1 @@
+export function fff() { return "fff" }
diff --git a/tests/auto/qml/qmlbasicapp/CMakeLists.txt b/tests/auto/qml/qmlbasicapp/CMakeLists.txt
index a52cf72923..269cc35980 100644
--- a/tests/auto/qml/qmlbasicapp/CMakeLists.txt
+++ b/tests/auto/qml/qmlbasicapp/CMakeLists.txt
@@ -9,13 +9,22 @@ qt_internal_add_test(tst_qmlbasicapp
qt6_add_qml_module(tst_qmlbasicapp
VERSION 1.0
URI "BasicApp"
- NO_CREATE_PLUGIN_TARGET
QML_FILES
main.qml
)
add_subdirectory(BasicExtension)
-target_link_libraries(tst_qmlbasicapp PRIVATE additional_qml_module additional_qml_module_plugin)
-
add_subdirectory(TimeExample)
-add_dependencies(tst_qmlbasicapp qmlqtimeexample qmlqtimeexampleplugin)
+
+if(QT6_IS_SHARED_LIBS_BUILD)
+ # Plugins are static, but qt6_import_qml_plugins() can't be used because
+ # it does nothing for shared builds. Import and link the plugins manually.
+ target_sources(tst_qmlbasicapp PRIVATE manual_imports.cpp)
+ target_link_libraries(tst_qmlbasicapp PRIVATE
+ additional_qml_module_plugin
+ qmlqtimeexampleplugin
+ )
+else()
+ # For fully static builds, let qmlimportscanner take care of everything
+ qt6_import_qml_plugins(tst_qmlbasicapp)
+endif()
diff --git a/tests/auto/qml/qmlbasicapp/TimeExample/CMakeLists.txt b/tests/auto/qml/qmlbasicapp/TimeExample/CMakeLists.txt
index 2e55d6c47c..91bc6dc89e 100644
--- a/tests/auto/qml/qmlbasicapp/TimeExample/CMakeLists.txt
+++ b/tests/auto/qml/qmlbasicapp/TimeExample/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_library(qmlqtimeexample STATIC)
+qt6_add_library(qmlqtimeexample STATIC)
qt_autogen_tools_initial_setup(qmlqtimeexample)
qt6_add_qml_module(qmlqtimeexample
VERSION 1.0
diff --git a/tests/auto/qml/qmlbasicapp/TimeExample/timemodel.h b/tests/auto/qml/qmlbasicapp/TimeExample/timemodel.h
index 62827dac5e..75e7d3704c 100644
--- a/tests/auto/qml/qmlbasicapp/TimeExample/timemodel.h
+++ b/tests/auto/qml/qmlbasicapp/TimeExample/timemodel.h
@@ -55,6 +55,7 @@
#include <QtCore/qdatetime.h>
#include <QtCore/qbasictimer.h>
#include <QtCore/qcoreapplication.h>
+#include <QtCore/qproperty.h>
class TimeModel : public QObject
{
diff --git a/tests/auto/qml/qmlbasicapp/main.qml b/tests/auto/qml/qmlbasicapp/main.qml
index 85dfa394d2..a01b56d35d 100644
--- a/tests/auto/qml/qmlbasicapp/main.qml
+++ b/tests/auto/qml/qmlbasicapp/main.qml
@@ -57,4 +57,7 @@ Clock { // this class is defined in QML (Clock.qml)
hours: time.hour
minutes: time.minute
property Extension extension // from BasicExtension
+ property More more: More {}
+ property string fromESModule: ESModule.eee()
+ property string fromJSFile: Less.bar()
}
diff --git a/tests/auto/qml/qmlbasicapp/manual_imports.cpp b/tests/auto/qml/qmlbasicapp/manual_imports.cpp
new file mode 100644
index 0000000000..9e585105d4
--- /dev/null
+++ b/tests/auto/qml/qmlbasicapp/manual_imports.cpp
@@ -0,0 +1,32 @@
+/****************************************************************************
+**
+** 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 <QtQml/qqmlextensionplugin.h>
+
+Q_IMPORT_QML_PLUGIN(TimeExamplePlugin)
+Q_IMPORT_QML_PLUGIN(BasicExtension)
diff --git a/tests/auto/qml/qmlbasicapp/tst_qmlbasicapp.cpp b/tests/auto/qml/qmlbasicapp/tst_qmlbasicapp.cpp
index e2fb42bf2b..a6c6e4accd 100644
--- a/tests/auto/qml/qmlbasicapp/tst_qmlbasicapp.cpp
+++ b/tests/auto/qml/qmlbasicapp/tst_qmlbasicapp.cpp
@@ -27,7 +27,6 @@
****************************************************************************/
#include <QQmlEngine>
-#include <QtQml/qqmlextensionplugin.h>
#include <QQmlComponent>
#include <QObject>
#include <qtest.h>
@@ -45,6 +44,9 @@ private slots:
void tst_basicapp::loadComponent()
{
QQmlEngine engine;
+#ifdef Q_OS_ANDROID
+ engine.addImportPath(":/");
+#endif
QQmlComponent c(&engine, QStringLiteral("qrc:/BasicApp/main.qml"));
QVERIFY2(c.isReady(), qPrintable(c.errorString()));
QScopedPointer o(c.create());
@@ -58,6 +60,13 @@ void tst_basicapp::loadComponent()
const int minute = o->property("minutes").toInt();
QVERIFY(minute >= time.minute() - 1);
QVERIFY(minute <= time.minute() + 1);
+
+ QObject *more = qvariant_cast<QObject*>(o->property("more"));
+ QVERIFY(more);
+ QCOMPARE(more->objectName(), QStringLiteral("ui.qml"));
+
+ QCOMPARE(o->property("fromESModule").toString(), QStringLiteral("eee"));
+ QCOMPARE(o->property("fromJSFile").toString(), QStringLiteral("bar"));
}
void tst_basicapp::resourceFiles()
@@ -77,10 +86,13 @@ void tst_basicapp::resourceFiles()
void tst_basicapp::fileSystemFiles()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("This test is not valid for Android, because the files can exist only as resources.");
+#endif
const QString basedir = QCoreApplication::applicationDirPath();
- QVERIFY(QFile::exists(basedir + QStringLiteral("/main.qml")));
- QVERIFY(QFile::exists(basedir + QStringLiteral("/qmldir")));
- QVERIFY(QFile::exists(basedir + QStringLiteral("/tst_qmlbasicapp.qmltypes")));
+ QVERIFY(QFile::exists(basedir + QStringLiteral("/BasicApp/main.qml")));
+ QVERIFY(QFile::exists(basedir + QStringLiteral("/BasicApp/qmldir")));
+ QVERIFY(QFile::exists(basedir + QStringLiteral("/BasicApp/tst_qmlbasicapp.qmltypes")));
QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample/Clock.qml")));
QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample/center.png")));
@@ -93,8 +105,13 @@ void tst_basicapp::fileSystemFiles()
void tst_basicapp::qmldirContents()
{
+#ifdef Q_OS_ANDROID
+ const QString basedir = QStringLiteral(":"); // Use qrc resource path on Android
+#else
+ const QString basedir = QCoreApplication::applicationDirPath();
+#endif
{
- QFile qmldir(QCoreApplication::applicationDirPath() + "/qmldir");
+ QFile qmldir(basedir + "/BasicApp/qmldir");
QVERIFY(qmldir.open(QIODevice::ReadOnly));
const QByteArray contents = qmldir.readAll();
QVERIFY(contents.contains("module BasicApp"));
@@ -109,7 +126,7 @@ void tst_basicapp::qmldirContents()
}
{
- QFile qmldir(QCoreApplication::applicationDirPath() + "/TimeExample/qmldir");
+ QFile qmldir(basedir + "/TimeExample/qmldir");
QVERIFY(qmldir.open(QIODevice::ReadOnly));
const QByteArray contents = qmldir.readAll();
QVERIFY(contents.contains("module TimeExample"));
@@ -124,9 +141,18 @@ void tst_basicapp::qmldirContents()
QVERIFY(qmldirInResources.open(QIODevice::ReadOnly));
QCOMPARE(qmldirInResources.readAll(), contents);
}
-}
-Q_IMPORT_QML_PLUGIN(BasicExtension)
+ {
+ QFile qmldir(basedir + "/BasicExtension/qmldir");
+ QVERIFY(qmldir.open(QIODevice::ReadOnly));
+ const QByteArray contents = qmldir.readAll();
+ QVERIFY(contents.contains("More 1.0 More.ui.qml"));
+ QVERIFY(contents.contains("Less.js"));
+ QVERIFY(contents.contains("ESModule.mjs"));
+ QVERIFY(!contents.contains("lowerCase.js"));
+ QVERIFY(!contents.contains("lowerCaseModule.mjs"));
+ }
+}
QTEST_MAIN(tst_basicapp)
#include "tst_qmlbasicapp.moc"
diff --git a/tests/auto/qml/qmlcachegen/CMakeLists.txt b/tests/auto/qml/qmlcachegen/CMakeLists.txt
index 3848e79971..7f22c14f92 100644
--- a/tests/auto/qml/qmlcachegen/CMakeLists.txt
+++ b/tests/auto/qml/qmlcachegen/CMakeLists.txt
@@ -12,22 +12,19 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qmlcachegen
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qmlcachegen.cpp
- INCLUDE_DIRECTORIES
- ../../shared
+ scriptstringprops.h
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
qt6_add_qml_module(tst_qmlcachegen
URI cachegentest
VERSION 1.0
- NO_CREATE_PLUGIN_TARGET
- NO_GENERATE_PLUGIN_SOURCE
)
set(qmake_workerscripts_test_qml_files
@@ -103,6 +100,7 @@ set(qmake_immediate_qml_files
"data/script.mjs"
"data/utils.mjs"
"data/versionchecks.qml"
+ "data/scriptstring.qml"
)
qt6_target_qml_sources(tst_qmlcachegen
@@ -155,3 +153,8 @@ qt_internal_extend_target(tst_qmlcachegen CONDITION NOT ANDROID AND NOT IOS
DEFINES
QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
)
+
+qt_internal_extend_target(tst_qmlcachegen CONDITION CMAKE_CROSSCOMPILING
+ DEFINES
+ QTEST_CROSS_COMPILED
+)
diff --git a/tests/auto/qml/qmlcachegen/data/scriptstring.qml b/tests/auto/qml/qmlcachegen/data/scriptstring.qml
new file mode 100644
index 0000000000..64c73ccdbc
--- /dev/null
+++ b/tests/auto/qml/qmlcachegen/data/scriptstring.qml
@@ -0,0 +1,9 @@
+import cachegentest
+
+ScriptStringProps {
+ undef: undefined
+ nul: null
+ str: "hello"
+ num: 42
+ bol: true
+}
diff --git a/tests/auto/qml/qmlcachegen/scriptstringprops.h b/tests/auto/qml/qmlcachegen/scriptstringprops.h
new file mode 100644
index 0000000000..e471da92b5
--- /dev/null
+++ b/tests/auto/qml/qmlcachegen/scriptstringprops.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef SCRIPT_STRING_PROPS_H
+#define SCRIPT_STRING_PROPS_H
+
+#include <QObject>
+#include <QQmlScriptString>
+#include <qqml.h>
+
+class ScriptStringProps :public QObject
+{
+ Q_OBJECT
+ QML_ELEMENT
+
+ Q_PROPERTY(QQmlScriptString undef READ undef WRITE setUndef NOTIFY undefChanged)
+ Q_PROPERTY(QQmlScriptString nul READ nul WRITE setNul NOTIFY nulChanged)
+ Q_PROPERTY(QQmlScriptString str READ str WRITE setStr NOTIFY strChanged)
+ Q_PROPERTY(QQmlScriptString num READ num WRITE setNum NOTIFY numChanged)
+ Q_PROPERTY(QQmlScriptString bol READ bol WRITE setBol NOTIFY bolChanged)
+
+public:
+ const QQmlScriptString &undef() const;
+ void setUndef(const QQmlScriptString &newUndef);
+
+ const QQmlScriptString &nul() const;
+ void setNul(const QQmlScriptString &newNul);
+
+ const QQmlScriptString &str() const;
+ void setStr(const QQmlScriptString &newStr);
+
+ const QQmlScriptString &num() const;
+ void setNum(const QQmlScriptString &newNum);
+
+ const QQmlScriptString &bol() const;
+ void setBol(const QQmlScriptString &newBol);
+signals:
+ void undefChanged();
+
+ void nulChanged();
+
+ void strChanged();
+
+ void numChanged();
+
+ void bolChanged();
+
+public:
+ QQmlScriptString m_undef;
+ QQmlScriptString m_nul;
+ QQmlScriptString m_str;
+ QQmlScriptString m_num;
+ QQmlScriptString m_bol;
+};
+
+#endif
diff --git a/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp b/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
index 8fdfecb379..a2639bc532 100644
--- a/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
+++ b/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
@@ -37,14 +37,21 @@
#include <QLoggingCategory>
#include <private/qqmlcomponent_p.h>
#include <private/qqmlscriptdata_p.h>
+#include <private/qv4compileddata_p.h>
#include <qtranslator.h>
+#include <qqmlscriptstring.h>
+#include <QString>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include "scriptstringprops.h"
class tst_qmlcachegen: public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qmlcachegen();
+
private slots:
void initTestCase() override;
@@ -78,6 +85,9 @@ private slots:
void parameterAdjustment();
void inlineComponent();
void posthocRequired();
+
+ void scriptStringCachegenInteraction();
+ void saveableUnitPointer();
};
// A wrapper around QQmlComponent to ensure the temporary reference counts
@@ -104,6 +114,10 @@ public:
static bool generateCache(const QString &qmlFileName, QByteArray *capturedStderr = nullptr)
{
+#if defined(QTEST_CROSS_COMPILED)
+ QTest::qFail("You cannot call qmlcachegen on the target.", __FILE__, __LINE__);
+ return false;
+#endif
QProcess proc;
if (capturedStderr == nullptr)
proc.setProcessChannelMode(QProcess::ForwardedChannels);
@@ -122,6 +136,11 @@ static bool generateCache(const QString &qmlFileName, QByteArray *capturedStderr
return proc.exitCode() == 0;
}
+tst_qmlcachegen::tst_qmlcachegen()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qmlcachegen::initTestCase()
{
qputenv("QML_FORCE_DISK_CACHE", "1");
@@ -137,6 +156,10 @@ void tst_qmlcachegen::initTestCase()
void tst_qmlcachegen::loadGeneratedFile()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QTemporaryDir tempDir;
QVERIFY(tempDir.isValid());
@@ -199,6 +222,10 @@ public:
void tst_qmlcachegen::translationExpressionSupport()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QTemporaryDir tempDir;
QVERIFY(tempDir.isValid());
@@ -244,6 +271,10 @@ void tst_qmlcachegen::translationExpressionSupport()
void tst_qmlcachegen::signalHandlerParameters()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QTemporaryDir tempDir;
QVERIFY(tempDir.isValid());
@@ -307,6 +338,10 @@ void tst_qmlcachegen::signalHandlerParameters()
void tst_qmlcachegen::errorOnArgumentsInSignalHandler()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QTemporaryDir tempDir;
QVERIFY(tempDir.isValid());
@@ -332,6 +367,10 @@ void tst_qmlcachegen::errorOnArgumentsInSignalHandler()
void tst_qmlcachegen::aheadOfTimeCompilation()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QTemporaryDir tempDir;
QVERIFY(tempDir.isValid());
@@ -372,21 +411,33 @@ void tst_qmlcachegen::versionChecksForAheadOfTimeUnits()
Q_ASSERT(!temporaryModifiedCachedUnit);
QQmlMetaType::CachedUnitLookupError error = QQmlMetaType::CachedUnitLookupError::NoError;
+ QLoggingCategory::setFilterRules("qt.qml.diskcache.debug=true");
const QQmlPrivate::CachedQmlUnit *originalUnit = QQmlMetaType::findCachedCompilationUnit(
QUrl("qrc:/data/versionchecks.qml"), &error);
+ QLoggingCategory::setFilterRules(QString());
QVERIFY(originalUnit);
QV4::CompiledData::Unit *tweakedUnit = (QV4::CompiledData::Unit *)malloc(originalUnit->qmlData->unitSize);
memcpy(reinterpret_cast<void *>(tweakedUnit),
reinterpret_cast<const void *>(originalUnit->qmlData),
originalUnit->qmlData->unitSize);
tweakedUnit->version = QV4_DATA_STRUCTURE_VERSION - 1;
- temporaryModifiedCachedUnit = new QQmlPrivate::CachedQmlUnit{tweakedUnit, nullptr, nullptr};
- auto testHandler = [](const QUrl &url) -> const QQmlPrivate::CachedQmlUnit * {
+ const auto testHandler = [](const QUrl &url) -> const QQmlPrivate::CachedQmlUnit * {
if (url == QUrl("qrc:/data/versionchecks.qml"))
return temporaryModifiedCachedUnit;
return nullptr;
};
+
+ const auto dropModifiedUnit = qScopeGuard([&testHandler]() {
+ Q_ASSERT(temporaryModifiedCachedUnit);
+ free(const_cast<QV4::CompiledData::Unit *>(temporaryModifiedCachedUnit->qmlData));
+ delete temporaryModifiedCachedUnit;
+ temporaryModifiedCachedUnit = nullptr;
+
+ QQmlMetaType::removeCachedUnitLookupFunction(testHandler);
+ });
+
+ temporaryModifiedCachedUnit = new QQmlPrivate::CachedQmlUnit{tweakedUnit, nullptr, nullptr};
QQmlMetaType::prependCachedUnitLookupFunction(testHandler);
{
@@ -400,13 +451,6 @@ void tst_qmlcachegen::versionChecksForAheadOfTimeUnits()
CleanlyLoadingComponent component(&engine, QUrl("qrc:/data/versionchecks.qml"));
QCOMPARE(component.status(), QQmlComponent::Ready);
}
-
- Q_ASSERT(temporaryModifiedCachedUnit);
- free(const_cast<QV4::CompiledData::Unit *>(temporaryModifiedCachedUnit->qmlData));
- delete temporaryModifiedCachedUnit;
- temporaryModifiedCachedUnit = nullptr;
-
- QQmlMetaType::removeCachedUnitLookupFunction(testHandler);
}
void tst_qmlcachegen::retainedResources()
@@ -444,6 +488,10 @@ void tst_qmlcachegen::workerScripts()
void tst_qmlcachegen::functionExpressions()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QTemporaryDir tempDir;
QVERIFY(tempDir.isValid());
@@ -541,6 +589,10 @@ void tst_qmlcachegen::qrcScriptImport()
void tst_qmlcachegen::fsScriptImport()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QTemporaryDir tempDir;
QVERIFY(tempDir.isValid());
@@ -666,6 +718,10 @@ void tst_qmlcachegen::reproducibleCache_data()
void tst_qmlcachegen::reproducibleCache()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QFETCH(QString, filePath);
QFile file(filePath);
@@ -697,6 +753,10 @@ void tst_qmlcachegen::parameterAdjustment()
void tst_qmlcachegen::inlineComponent()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
QByteArray errors;
bool ok = generateCache(testFile("inlineComponentWithId.qml"), &errors);
QVERIFY2(ok, errors);
@@ -709,6 +769,10 @@ void tst_qmlcachegen::inlineComponent()
void tst_qmlcachegen::posthocRequired()
{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
bool ok = generateCache(testFile("posthocrequired.qml"));
QVERIFY(ok);
QQmlEngine engine;
@@ -718,6 +782,125 @@ void tst_qmlcachegen::posthocRequired()
QVERIFY(component.errorString().contains(QStringLiteral("Required property x was not initialized")));
}
+void tst_qmlcachegen::scriptStringCachegenInteraction()
+{
+#if defined(QTEST_CROSS_COMPILED)
+ QSKIP("Cannot call qmlcachegen on cross-compiled target.");
+#endif
+
+ bool ok = generateCache(testFile("scriptstring.qml"));
+ QVERIFY(ok);
+ QQmlEngine engine;
+ CleanlyLoadingComponent component(&engine, testFileUrl("scriptstring.qml"));
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(!root.isNull(), qPrintable(component.errorString()));
+ auto scripty = qobject_cast<ScriptStringProps *>(root.get());
+ QVERIFY(scripty);
+
+ QVERIFY(scripty->m_undef.isUndefinedLiteral());
+ QVERIFY(scripty->m_nul.isNullLiteral());
+ QCOMPARE(scripty->m_str.stringLiteral(), u"hello"_qs);
+ QCOMPARE(scripty->m_num.numberLiteral(&ok), 42);
+ ok = false;
+ scripty->m_bol.booleanLiteral(&ok);
+ QVERIFY(ok);
+}
+
+void tst_qmlcachegen::saveableUnitPointer()
+{
+ QV4::CompiledData::Unit unit;
+ unit.flags = QV4::CompiledData::Unit::StaticData | QV4::CompiledData::Unit::IsJavascript;
+ const auto flags = unit.flags;
+
+ QV4::CompiledData::SaveableUnitPointer pointer(&unit);
+
+ QVERIFY(pointer.saveToDisk<char>([](const char *, quint32) { return true; }));
+ QCOMPARE(unit.flags, flags);
+}
+
+const QQmlScriptString &ScriptStringProps::undef() const
+{
+ return m_undef;
+}
+
+
+
+void ScriptStringProps::setUndef(const QQmlScriptString &newUndef)
+{
+ if (m_undef == newUndef)
+ return;
+ m_undef = newUndef;
+ emit undefChanged();
+}
+
+
+
+const QQmlScriptString &ScriptStringProps::nul() const
+{
+ return m_nul;
+}
+
+
+
+void ScriptStringProps::setNul(const QQmlScriptString &newNul)
+{
+ if (m_nul == newNul)
+ return;
+ m_nul = newNul;
+ emit nulChanged();
+}
+
+
+
+const QQmlScriptString &ScriptStringProps::str() const
+{
+ return m_str;
+}
+
+
+
+void ScriptStringProps::setStr(const QQmlScriptString &newStr)
+{
+ if (m_str == newStr)
+ return;
+ m_str = newStr;
+ emit strChanged();
+}
+
+
+
+const QQmlScriptString &ScriptStringProps::num() const
+{
+ return m_num;
+}
+
+
+
+void ScriptStringProps::setNum(const QQmlScriptString &newNum)
+{
+ if (m_num == newNum)
+ return;
+ m_num = newNum;
+ emit numChanged();
+}
+
+
+
+const QQmlScriptString &ScriptStringProps::bol() const
+{
+ return m_bol;
+}
+
+
+
+void ScriptStringProps::setBol(const QQmlScriptString &newBol)
+{
+ if (m_bol == newBol)
+ return;
+ m_bol = newBol;
+ emit bolChanged();
+}
+
QTEST_GUILESS_MAIN(tst_qmlcachegen)
#include "tst_qmlcachegen.moc"
diff --git a/tests/auto/qml/qmlcompiler_manual/CMakeLists.txt b/tests/auto/qml/qmlcompiler_manual/CMakeLists.txt
index ebd207e94b..92ba3fc122 100644
--- a/tests/auto/qml/qmlcompiler_manual/CMakeLists.txt
+++ b/tests/auto/qml/qmlcompiler_manual/CMakeLists.txt
@@ -6,20 +6,18 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qmlcompiler_manual
SOURCES
- ../../shared/util.cpp ../../shared/util.h
testclasses.h
tst_qmlcompiler_manual.cpp
- INCLUDE_DIRECTORIES
- ../../shared
LIBRARIES
Qt::CorePrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
qt6_add_qml_module(tst_qmlcompiler_manual
VERSION 1.0
URI "QmltcManualTests"
- NO_CREATE_PLUGIN_TARGET
QML_FILES
${test_data}
)
diff --git a/tests/auto/qml/qmlcompiler_manual/tst_qmlcompiler_manual.cpp b/tests/auto/qml/qmlcompiler_manual/tst_qmlcompiler_manual.cpp
index ae90aaa34d..a42dc52556 100644
--- a/tests/auto/qml/qmlcompiler_manual/tst_qmlcompiler_manual.cpp
+++ b/tests/auto/qml/qmlcompiler_manual/tst_qmlcompiler_manual.cpp
@@ -38,7 +38,7 @@
#include <private/qqmlengine_p.h>
#include <private/qqmltypedata_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <array>
#include <memory>
@@ -47,6 +47,9 @@ class tst_qmlcompiler_manual : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qmlcompiler_manual();
+
private slots:
void cppBinding();
void signalHandlers();
@@ -163,6 +166,11 @@ HelloWorld::HelloWorld(QQmlEngine *e, QObject *parent)
QUrl HelloWorld::url = QUrl(); // workaround
+tst_qmlcompiler_manual::tst_qmlcompiler_manual()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qmlcompiler_manual::cppBinding()
{
QQmlEngine e;
diff --git a/tests/auto/qml/qmldiskcache/dummy_imports.qml b/tests/auto/qml/qmldiskcache/dummy_imports.qml
index b9a196e188..63d33cbea6 100644
--- a/tests/auto/qml/qmldiskcache/dummy_imports.qml
+++ b/tests/auto/qml/qmldiskcache/dummy_imports.qml
@@ -1,8 +1,7 @@
// This file exists for the sole purpose for qmlimportscanner to find
// which modules it needs to extract for deployment.
-// Otherwise, it fails to find the imports that are expressed in C++
-// code in tst_parserstress.cpp
+// Otherwise, it fails to find the imports that are expressed in C++.
-import QtQuick 2.0
+import QtQuick
-QtObject { } // This is needed in order to keep importscanner happy
+QtObject { }
diff --git a/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp b/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
index 593eea3e3a..d84aaaeba3 100644
--- a/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
+++ b/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
@@ -65,6 +65,7 @@ private slots:
void cppRegisteredSingletonDependency();
void cacheModuleScripts();
void reuseStaticMappings();
+ void invalidateSaveLoadCache();
private:
QDir m_qmlCacheDirectory;
@@ -346,7 +347,7 @@ void tst_qmldiskcache::regenerateAfterChange()
const QV4::CompiledData::Object *obj = qmlUnit->objectAt(0);
QCOMPARE(quint32(obj->nBindings), quint32(1));
- QCOMPARE(quint32(obj->bindingTable()->type), quint32(QV4::CompiledData::Binding::Type_Script));
+ QCOMPARE(obj->bindingTable()->type(), QV4::CompiledData::Binding::Type_Script);
QCOMPARE(quint32(obj->bindingTable()->value.compiledScriptIndex), quint32(0));
QCOMPARE(quint32(testUnit->functionTableSize), quint32(1));
@@ -374,7 +375,7 @@ void tst_qmldiskcache::regenerateAfterChange()
const QV4::CompiledData::Object *obj = qmlUnit->objectAt(0);
QCOMPARE(quint32(obj->nBindings), quint32(2));
- QCOMPARE(quint32(obj->bindingTable()->type), quint32(QV4::CompiledData::Binding::Type_Number));
+ QCOMPARE(obj->bindingTable()->type(), QV4::CompiledData::Binding::Type_Number);
const QV4::Value value(testUnit->constants()[obj->bindingTable()->value.constantValueIndex]);
QCOMPARE(value.doubleValue(), double(42));
@@ -418,7 +419,7 @@ void tst_qmldiskcache::registerImportForImplicitComponent()
const QV4::CompiledData::Object *obj = qmlUnit->objectAt(0);
QCOMPARE(quint32(obj->nBindings), quint32(1));
- QCOMPARE(quint32(obj->bindingTable()->type), quint32(QV4::CompiledData::Binding::Type_Object));
+ QCOMPARE(obj->bindingTable()->type(), QV4::CompiledData::Binding::Type_Object);
const QV4::CompiledData::Object *implicitComponent = qmlUnit->objectAt(obj->bindingTable()->value.objectIndex);
QCOMPARE(testUnit->stringAtInternal(implicitComponent->inheritedTypeNameIndex), QStringLiteral("QmlInternals.") + componentType.elementName());
@@ -550,6 +551,7 @@ void tst_qmldiskcache::recompileAfterChange()
CleanlyLoadingComponent component(&engine, testCompiler.testFilePath);
QScopedPointer<TypeVersion2> obj(qobject_cast<TypeVersion2*>(component.create()));
QVERIFY(!obj.isNull());
+ qDebug() << obj->property("x");
QVERIFY(QFileInfo(testCompiler.cacheFilePath).lastModified() > initialCacheTimeStamp);
}
}
@@ -1030,6 +1032,112 @@ void tst_qmldiskcache::reuseStaticMappings()
QCOMPARE(testCompiler.unitData(), data1);
}
+class AParent : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int x MEMBER x)
+public:
+ AParent(QObject *parent = nullptr) : QObject(parent) {}
+ int x = 25;
+};
+
+class BParent : public QObject
+{
+ Q_OBJECT
+
+ // Insert y before x, to change the property index of x
+ Q_PROPERTY(int y MEMBER y)
+
+ Q_PROPERTY(int x MEMBER x)
+public:
+ BParent(QObject *parent = nullptr) : QObject(parent) {}
+ int y = 13;
+ int x = 25;
+};
+
+static QString writeTempFile(
+ const QTemporaryDir &tempDir, const QString &fileName, const char *contents) {
+ QFile f(tempDir.path() + '/' + fileName);
+ const bool ok = f.open(QIODevice::WriteOnly | QIODevice::Truncate);
+ Q_ASSERT(ok);
+ f.write(contents);
+ return f.fileName();
+};
+
+void tst_qmldiskcache::invalidateSaveLoadCache()
+{
+ qmlRegisterType<AParent>("Base", 1, 0, "Parent");
+ QQmlEngine e;
+
+ // If you store a CU to a .qmlc file at run time, the .qmlc file will contain
+ // alias entries with the encodedMetaPropertyIndex pre-resolved. That's in
+ // contrast to .qmlc files generated ahead of time. Exploit that to cause
+ // a need to recompile the file.
+
+ QTemporaryDir tempDir;
+ const QString fileName = writeTempFile(
+ tempDir, QLatin1String("a.qml"),
+ "import Base\nParent { id: self; property alias z: self.x }");
+ const QUrl url = QUrl::fromLocalFile(fileName);
+ waitForFileSystem();
+
+ {
+ QQmlComponent a(&e, url);
+ QVERIFY2(a.isReady(), qPrintable(a.errorString()));
+ QScopedPointer<QObject> ao(a.create());
+ QVERIFY(!ao.isNull());
+ AParent *ap = qobject_cast<AParent *>(ao.data());
+ QCOMPARE(ap->property("z").toInt(), ap->x);
+ }
+
+ QString errorString;
+ QQmlRefPointer<QV4::ExecutableCompilationUnit> oldUnit
+ = QV4::ExecutableCompilationUnit::create();
+ QVERIFY2(oldUnit->loadFromDisk(url, QFileInfo(fileName).lastModified(), &errorString), qPrintable(errorString));
+
+ // Produce a checksum mismatch.
+ e.clearComponentCache();
+ qmlClearTypeRegistrations();
+ qmlRegisterType<BParent>("Base", 1, 0, "Parent");
+
+ {
+ QQmlComponent b(&e, url);
+ QVERIFY2(b.isReady(), qPrintable(b.errorString()));
+ QScopedPointer<QObject> bo(b.create());
+ QVERIFY(!bo.isNull());
+ BParent *bp = qobject_cast<BParent *>(bo.data());
+ QCOMPARE(bp->property("z").toInt(), bp->x);
+ }
+
+ // Make it recompile again.
+ e.clearComponentCache();
+ {
+ QFile file(fileName);
+ file.open(QIODevice::WriteOnly | QIODevice::Append);
+ file.write(" ");
+ }
+ waitForFileSystem();
+
+ {
+ QQmlComponent b(&e, url);
+ QVERIFY2(b.isReady(), qPrintable(b.errorString()));
+ QScopedPointer<QObject> bo(b.create());
+ QVERIFY(!bo.isNull());
+ BParent *bp = qobject_cast<BParent *>(bo.data());
+ QCOMPARE(bp->property("z").toInt(), bp->x);
+ }
+
+ // Verify that the mapped unit data is actually different now.
+ // The cache should have been invalidated after all.
+ // So, now we should be able to load a freshly written CU.
+
+ QQmlRefPointer<QV4::ExecutableCompilationUnit> unit
+ = QV4::ExecutableCompilationUnit::create();
+ QVERIFY2(unit->loadFromDisk(url, QFileInfo(fileName).lastModified(), &errorString), qPrintable(errorString));
+
+ QVERIFY(unit->unitData() != oldUnit->unitData());
+}
+
QTEST_MAIN(tst_qmldiskcache)
#include "tst_qmldiskcache.moc"
diff --git a/tests/auto/qml/qmlformat/CMakeLists.txt b/tests/auto/qml/qmlformat/CMakeLists.txt
index 8d5133ccf7..6716a509e1 100644
--- a/tests/auto/qml/qmlformat/CMakeLists.txt
+++ b/tests/auto/qml/qmlformat/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qmlformat
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qmlformat.cpp
DEFINES
SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::TestPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qmlformat/data/Annotations.formatted.qml b/tests/auto/qml/qmlformat/data/Annotations.formatted.qml
index 2fccb05e6e..ca58c90ecf 100644
--- a/tests/auto/qml/qmlformat/data/Annotations.formatted.qml
+++ b/tests/auto/qml/qmlformat/data/Annotations.formatted.qml
@@ -42,7 +42,6 @@ Item {
@Annotate {
}
anchors.fill: parent
-
@AnnotateMore {
property int x: 5
}
@@ -57,7 +56,6 @@ Item {
anchors.fill: parent
legend.alignment: Qt.AlignBottom
antialiasing: true
-
@ExtraAnnotation {
signal pippo
}
@@ -90,7 +88,6 @@ Item {
value: 6.8
}
}
-
@SignalAnnotation {
implicit: true
}
@@ -101,7 +98,6 @@ Item {
function foo(x) {
return 42;
}
-
@BindingAnn {
bType: 1
}
@@ -125,7 +121,6 @@ Item {
duration: 34
}
}
-
@SuperComplete {
binding: late
}
diff --git a/tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml b/tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml
index 48a1acf483..8b181f607e 100644
--- a/tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml
+++ b/tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml
@@ -55,7 +55,6 @@ Item {
// More orphans
property variant some_array_literal: [30, 20, Math["PI"], [4, 3, 2], "foo", 0.3]
-
property bool something_computed: function (x) {
const PI = 3, DAYS_PER_YEAR = 365.25;
var x = 3 + 2;
@@ -129,6 +128,7 @@ Item {
}()
default property bool some_default_bool: 500 % 5 !== 0 // some_default_bool
+
myFavouriteThings: [
// This is an orphan
@@ -147,9 +147,7 @@ Item {
Text {
text: "Bla"
-
signal boo(int count, int times, real duration)
-
required property string batman
}
diff --git a/tests/auto/qml/qmlformat/data/Example1.formatted.qml b/tests/auto/qml/qmlformat/data/Example1.formatted.qml
index a679e8a010..cb8865d94e 100644
--- a/tests/auto/qml/qmlformat/data/Example1.formatted.qml
+++ b/tests/auto/qml/qmlformat/data/Example1.formatted.qml
@@ -55,7 +55,6 @@ Item {
// More orphans
property variant some_array_literal: [30, 20, Math["PI"], [4, 3, 2], "foo", 0.3]
-
property bool something_computed: function (x) {
const PI = 3, DAYS_PER_YEAR = 365.25;
var x = 3 + 2;
@@ -129,6 +128,7 @@ Item {
}()
default property bool some_default_bool: 500 % 5 !== 0 // some_default_bool
+
myFavouriteThings: [
// This is an orphan
@@ -147,9 +147,7 @@ Item {
Text {
text: "Bla"
-
signal boo(int count, int times, real duration)
-
required property string batman
}
diff --git a/tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml b/tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml
index 34b3467cb4..ef964f6f60 100644
--- a/tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml
+++ b/tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml
@@ -55,7 +55,6 @@ Item {
// More orphans
property variant some_array_literal: [30, 20, Math["PI"], [4, 3, 2], "foo", 0.3]
-
property bool something_computed: function (x) {
const PI = 3, DAYS_PER_YEAR = 365.25;
var x = 3 + 2;
@@ -129,6 +128,7 @@ Item {
}()
default property bool some_default_bool: 500 % 5 !== 0 // some_default_bool
+
myFavouriteThings: [
// This is an orphan
@@ -147,9 +147,7 @@ Item {
Text {
text: "Bla"
-
signal boo(int count, int times, real duration)
-
required property string batman
}
diff --git a/tests/auto/qml/qmlformat/data/ecmaScriptClassInQml.formatted.qml b/tests/auto/qml/qmlformat/data/ecmaScriptClassInQml.formatted.qml
new file mode 100644
index 0000000000..edbb12c6e6
--- /dev/null
+++ b/tests/auto/qml/qmlformat/data/ecmaScriptClassInQml.formatted.qml
@@ -0,0 +1,37 @@
+import QtQuick
+
+Item {
+
+ function f() {
+ var count = 0;
+ class Person {
+ constructor(name){
+ this._name = name;
+ }
+ }
+ class Employee extends Person {
+ constructor(name, age){
+ super(name);
+ this._name = name;
+ this._age = age;
+ ++count;
+ }
+
+ doWork(){}
+
+ /* do we get the comment? */ get name(){
+ return this._name.toUpperCase();
+ }
+
+ set name(newName){
+ if (newName) {
+ this._name = newName;
+ }
+ }
+
+ static get count(){
+ return count;
+ }
+ }
+ }
+}
diff --git a/tests/auto/qml/qmlformat/data/ecmaScriptClassInQml.qml b/tests/auto/qml/qmlformat/data/ecmaScriptClassInQml.qml
new file mode 100644
index 0000000000..268859d3cc
--- /dev/null
+++ b/tests/auto/qml/qmlformat/data/ecmaScriptClassInQml.qml
@@ -0,0 +1,45 @@
+import QtQuick
+
+Item {
+
+function f() {
+
+var count = 0;
+
+class Person {
+ constructor(name) {
+ this._name = name
+ }
+}
+
+class Employee extends Person{
+
+
+ constructor(name, age) {
+ super(name);
+ this._name = name;
+ this._age = age;
+ ++count;
+ }
+
+ doWork() {
+
+ }
+
+ get /* do we get the comment? */ name() {
+ return this._name.toUpperCase();
+ }
+
+ set name(newName){
+ if(newName){
+ this._name = newName;
+ }
+ }
+
+ static get count() { return count;}
+}
+
+
+}
+
+} \ No newline at end of file
diff --git a/tests/auto/qml/qmlformat/data/largeBindings.formatted.qml b/tests/auto/qml/qmlformat/data/largeBindings.formatted.qml
index 70283dade6..879bf297b2 100644
--- a/tests/auto/qml/qmlformat/data/largeBindings.formatted.qml
+++ b/tests/auto/qml/qmlformat/data/largeBindings.formatted.qml
@@ -7,6 +7,7 @@ QtObject {
var x = 300;
console.log(x);
}
+
small1: 3
small2: foo
smallButNeedsBraces: if (foo) {
diff --git a/tests/auto/qml/qmlformat/data/nestedFunctions.formatted.qml b/tests/auto/qml/qmlformat/data/nestedFunctions.formatted.qml
index 522e844201..5536ecf513 100644
--- a/tests/auto/qml/qmlformat/data/nestedFunctions.formatted.qml
+++ b/tests/auto/qml/qmlformat/data/nestedFunctions.formatted.qml
@@ -3,6 +3,7 @@ Item {
function nested() {}
foo();
}
+
function b() {
function nested() {}
bar();
diff --git a/tests/auto/qml/qmlformat/data/readOnlyProps.formatted.qml b/tests/auto/qml/qmlformat/data/readOnlyProps.formatted.qml
index 3084ab7951..354f2ba979 100644
--- a/tests/auto/qml/qmlformat/data/readOnlyProps.formatted.qml
+++ b/tests/auto/qml/qmlformat/data/readOnlyProps.formatted.qml
@@ -6,7 +6,6 @@ QtObject {
id: test
signal foo
}
-
// End comment
// Testing UiArrayBinding
diff --git a/tests/auto/qml/qmlformat/data/statesAndTransitions.formatted.qml b/tests/auto/qml/qmlformat/data/statesAndTransitions.formatted.qml
index f72e9d8195..40cf5068da 100644
--- a/tests/auto/qml/qmlformat/data/statesAndTransitions.formatted.qml
+++ b/tests/auto/qml/qmlformat/data/statesAndTransitions.formatted.qml
@@ -1,5 +1,6 @@
QtObject {
id: foo
+
states: [
State {
}
diff --git a/tests/auto/qml/qmlformat/data/verbatimString.formatted.qml b/tests/auto/qml/qmlformat/data/verbatimString.formatted.qml
index 65539b538a..84abe38f88 100644
--- a/tests/auto/qml/qmlformat/data/verbatimString.formatted.qml
+++ b/tests/auto/qml/qmlformat/data/verbatimString.formatted.qml
@@ -1,8 +1,6 @@
Item {
property string verbatim1: 'A "verbatim" string!'
-
property string verbatim2: "A 'verbatim' string\u2757"
-
property string verbatim3: `400 + 300 is ${400 + 300}.
mutliline`
diff --git a/tests/auto/qml/qmlformat/tst_qmlformat.cpp b/tests/auto/qml/qmlformat/tst_qmlformat.cpp
index f9cf4deafb..843c078f8c 100644
--- a/tests/auto/qml/qmlformat/tst_qmlformat.cpp
+++ b/tests/auto/qml/qmlformat/tst_qmlformat.cpp
@@ -33,13 +33,15 @@
#include <QString>
#include <QTemporaryDir>
#include <QtTest/private/qemulationdetector_p.h>
-
-#include <util.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class TestQmlformat: public QQmlDataTest
{
Q_OBJECT
+public:
+ TestQmlformat();
+
private Q_SLOTS:
void initTestCase() override;
@@ -64,6 +66,11 @@ private:
bool isInvalidFile(const QFileInfo &fileName) const;
};
+TestQmlformat::TestQmlformat()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void TestQmlformat::initTestCase()
{
QQmlDataTest::initTestCase();
@@ -245,6 +252,9 @@ void TestQmlformat::testFormat_data()
<< "emptyObject.formatted.qml" << QStringList {};
QTest::newRow("arrow functions") << "arrowFunctions.qml"
<< "arrowFunctions.formatted.qml" << QStringList {};
+ QTest::newRow("ecmaScriptClassInQml")
+ << "ecmaScriptClassInQml.qml"
+ << "ecmaScriptClassInQml.formatted.qml" << QStringList {};
}
void TestQmlformat::testFormat()
diff --git a/tests/auto/qml/qmlimportscanner/CMakeLists.txt b/tests/auto/qml/qmlimportscanner/CMakeLists.txt
index ec69f00516..7439910294 100644
--- a/tests/auto/qml/qmlimportscanner/CMakeLists.txt
+++ b/tests/auto/qml/qmlimportscanner/CMakeLists.txt
@@ -12,12 +12,10 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qmlimportscanner
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qmlimportscanner.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -35,8 +33,9 @@ qt_internal_extend_target(tst_qmlimportscanner CONDITION NOT ANDROID AND NOT IOS
)
# special case begin
+string(TOLOWER "${QT_LIBINFIX}" infix_lowercase)
qt_internal_extend_target(tst_qmlimportscanner CONDITION DEFINED QT_LIBINFIX
DEFINES
- LIBINFIX=${QT_LIBINFIX}
+ LIBINFIX=${infix_lowercase}
)
# special case end
diff --git a/tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json b/tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json
index f8ac3438f9..51b1033a9c 100644
--- a/tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json
+++ b/tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json
@@ -6,6 +6,7 @@
},
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -14,6 +15,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -22,6 +24,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -30,6 +33,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json b/tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json
index 92d6797bec..e0c37d24c4 100644
--- a/tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json
+++ b/tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json
@@ -6,6 +6,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -14,6 +15,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -22,6 +24,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json b/tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json
index ceed744ea4..e4135c559c 100644
--- a/tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json
+++ b/tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json
@@ -6,6 +6,7 @@
},
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -14,6 +15,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -22,6 +24,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -30,6 +33,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/Drawer.qml.json b/tests/auto/qml/qmlimportscanner/data/Drawer.qml.json
index 4eac05306a..424c6ca8ee 100644
--- a/tests/auto/qml/qmlimportscanner/data/Drawer.qml.json
+++ b/tests/auto/qml/qmlimportscanner/data/Drawer.qml.json
@@ -1,6 +1,7 @@
[
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -9,6 +10,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -17,6 +19,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/Imports.json b/tests/auto/qml/qmlimportscanner/data/Imports.json
index 1a1850163d..16b7376713 100644
--- a/tests/auto/qml/qmlimportscanner/data/Imports.json
+++ b/tests/auto/qml/qmlimportscanner/data/Imports.json
@@ -6,6 +6,7 @@
},
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -14,6 +15,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -22,6 +24,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -30,6 +33,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json b/tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json
index d647f7f9ae..bd9faec18c 100644
--- a/tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json
+++ b/tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json
@@ -2,6 +2,7 @@
{
"classname": "QtQuick2Plugin",
"name": "QtQuick",
+ "linkTarget": "Qt6::qtquick2plugin",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
"relativePath": "QtQuick",
@@ -15,6 +16,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -23,6 +25,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -31,6 +34,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json b/tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json
index f7bddd6a91..d132b676ec 100644
--- a/tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json
+++ b/tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json
@@ -1,6 +1,7 @@
[
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -9,6 +10,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -17,6 +19,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -25,6 +28,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/Simple.qml.json b/tests/auto/qml/qmlimportscanner/data/Simple.qml.json
index f7bddd6a91..d132b676ec 100644
--- a/tests/auto/qml/qmlimportscanner/data/Simple.qml.json
+++ b/tests/auto/qml/qmlimportscanner/data/Simple.qml.json
@@ -1,6 +1,7 @@
[
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -9,6 +10,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -17,6 +19,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -25,6 +28,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/Singleton.json b/tests/auto/qml/qmlimportscanner/data/Singleton.json
index ca1d0b2d4d..5600cfc6a2 100644
--- a/tests/auto/qml/qmlimportscanner/data/Singleton.json
+++ b/tests/auto/qml/qmlimportscanner/data/Singleton.json
@@ -6,6 +6,7 @@
},
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -14,6 +15,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -22,6 +24,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -30,6 +33,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/Things.json b/tests/auto/qml/qmlimportscanner/data/Things.json
index e50902152e..1245539b57 100644
--- a/tests/auto/qml/qmlimportscanner/data/Things.json
+++ b/tests/auto/qml/qmlimportscanner/data/Things.json
@@ -7,6 +7,7 @@
},
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -15,6 +16,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -23,6 +25,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -31,6 +34,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/With/Module/A.qml b/tests/auto/qml/qmlimportscanner/data/With/Module/A.qml
new file mode 100644
index 0000000000..8fc36a40da
--- /dev/null
+++ b/tests/auto/qml/qmlimportscanner/data/With/Module/A.qml
@@ -0,0 +1,3 @@
+import QtQml
+
+QtObject {}
diff --git a/tests/auto/qml/qmlimportscanner/data/With/Module/qmldir b/tests/auto/qml/qmlimportscanner/data/With/Module/qmldir
new file mode 100644
index 0000000000..2338864432
--- /dev/null
+++ b/tests/auto/qml/qmlimportscanner/data/With/Module/qmldir
@@ -0,0 +1,3 @@
+module Module
+
+A 1.0 A.qml
diff --git a/tests/auto/qml/qmlimportscanner/data/WithOut/Module/A.qml b/tests/auto/qml/qmlimportscanner/data/WithOut/Module/A.qml
new file mode 100644
index 0000000000..8fc36a40da
--- /dev/null
+++ b/tests/auto/qml/qmlimportscanner/data/WithOut/Module/A.qml
@@ -0,0 +1,3 @@
+import QtQml
+
+QtObject {}
diff --git a/tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json b/tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json
index cbd409266d..737b90fcc6 100644
--- a/tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json
+++ b/tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json
@@ -1,6 +1,7 @@
[
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -13,6 +14,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -21,6 +23,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/localImport.qml.json b/tests/auto/qml/qmlimportscanner/data/localImport.qml.json
index e50902152e..1245539b57 100644
--- a/tests/auto/qml/qmlimportscanner/data/localImport.qml.json
+++ b/tests/auto/qml/qmlimportscanner/data/localImport.qml.json
@@ -7,6 +7,7 @@
},
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -15,6 +16,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -23,6 +25,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -31,6 +34,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json b/tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json
index f7bddd6a91..d132b676ec 100644
--- a/tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json
+++ b/tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json
@@ -1,6 +1,7 @@
[
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -9,6 +10,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -17,6 +19,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -25,6 +28,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json b/tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json
index e50902152e..1245539b57 100644
--- a/tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json
+++ b/tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json
@@ -7,6 +7,7 @@
},
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -15,6 +16,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -23,6 +25,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -31,6 +34,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/qmldirpref.qml b/tests/auto/qml/qmlimportscanner/data/qmldirpref.qml
new file mode 100644
index 0000000000..d1b1e80329
--- /dev/null
+++ b/tests/auto/qml/qmlimportscanner/data/qmldirpref.qml
@@ -0,0 +1,3 @@
+import Module
+
+A {}
diff --git a/tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json b/tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json
index 4eac05306a..424c6ca8ee 100644
--- a/tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json
+++ b/tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json
@@ -1,6 +1,7 @@
[
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -9,6 +10,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -17,6 +19,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
diff --git a/tests/auto/qml/qmlimportscanner/data/rootPath.json b/tests/auto/qml/qmlimportscanner/data/rootPath.json
index 21dbb12629..fe42646665 100644
--- a/tests/auto/qml/qmlimportscanner/data/rootPath.json
+++ b/tests/auto/qml/qmlimportscanner/data/rootPath.json
@@ -1,6 +1,7 @@
[
{
"classname": "QtQuick2Plugin",
+ "linkTarget": "Qt6::qtquick2plugin",
"name": "QtQuick",
"plugin": "qtquick2plugin",
"pluginIsOptional": true,
@@ -9,6 +10,7 @@
},
{
"classname": "QtQmlPlugin",
+ "linkTarget": "Qt6::qmlplugin",
"name": "QtQml",
"plugin": "qmlplugin",
"pluginIsOptional": true,
@@ -17,6 +19,7 @@
},
{
"classname": "QtQmlModelsPlugin",
+ "linkTarget": "Qt6::modelsplugin",
"name": "QtQml.Models",
"plugin": "modelsplugin",
"pluginIsOptional": true,
@@ -25,6 +28,7 @@
},
{
"classname": "QtQmlWorkerScriptPlugin",
+ "linkTarget": "Qt6::workerscriptplugin",
"name": "QtQml.WorkerScript",
"plugin": "workerscriptplugin",
"pluginIsOptional": true,
@@ -53,5 +57,9 @@
"name": "Imports",
"relativePath": "Imports",
"type": "module"
+ },
+ {
+ "name": "Module",
+ "type": "module"
}
]
diff --git a/tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp b/tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp
index 5b8b92748a..2d339cc33d 100644
--- a/tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp
+++ b/tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp
@@ -29,13 +29,15 @@
#include <QtTest/QtTest>
#include <QProcess>
#include <QString>
-
-#include <util.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class TestQmlimportscanner: public QQmlDataTest
{
Q_OBJECT
+public:
+ TestQmlimportscanner();
+
private Q_SLOTS:
void initTestCase() override;
@@ -44,6 +46,7 @@ private Q_SLOTS:
void rootPath();
void modules_data();
void modules();
+ void qmldirPreference();
private:
void runQmlimportscanner(const QString &mode, const QString &fileToScan,
@@ -52,6 +55,11 @@ private:
QString m_qmlimportscannerPath;
};
+TestQmlimportscanner::TestQmlimportscanner()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void TestQmlimportscanner::initTestCase()
{
QQmlDataTest::initTestCase();
@@ -116,6 +124,31 @@ void TestQmlimportscanner::modules()
runQmlimportscanner("-qmlFiles", qmlFile.fileName(), testFile(name + ".json"));
}
+void TestQmlimportscanner::qmldirPreference()
+{
+ // ###
+ QStringList with {u"-importPath"_qs, testFile("With")};
+ QStringList withOut {u"-importPath"_qs, testFile("WithOut")};
+ QStringList genericArgs {u"-qmlFiles"_qs, testFile("qmldirpref.qml"), u"-importPath"_qs,
+ QLibraryInfo::path(QLibraryInfo::QmlImportsPath)};
+
+
+ // found path should not depend on order of importPath arguments
+ QStringList argcombis[2] { genericArgs + with + withOut, genericArgs + withOut + with };
+ for (const auto &allArgs: argcombis) {
+ QProcess process;
+ process.start(m_qmlimportscannerPath, allArgs);
+ QVERIFY(process.waitForFinished());
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 0);
+ QVERIFY(process.readAllStandardError().isEmpty());
+ auto output = process.readAllStandardOutput();
+ // check that the "With" path is used, and the "WithOut" path is ignored
+ QVERIFY(output.contains("With/Module"));
+ QVERIFY(!output.contains("WithOut/Module"));
+ }
+}
+
void TestQmlimportscanner::runQmlimportscanner(const QString &mode, const QString &pathToScan,
const QString &resultFile)
{
@@ -157,9 +190,9 @@ void TestQmlimportscanner::runQmlimportscanner(const QString &mode, const QStrin
#define STR(A) #A
if (object.contains("plugin")) {
auto plugin = object["plugin"].toString();
- const auto pos = plugin.lastIndexOf(XSTR(LIBINFIX));
+ const auto pos = plugin.lastIndexOf(XSTR(LIBINFIX) "plugin");
if (pos != -1)
- object["plugin"] = plugin.left(pos);
+ object["plugin"] = plugin.left(pos) + "plugin";
}
#endif
diff --git a/tests/auto/qml/qmllint/CMakeLists.txt b/tests/auto/qml/qmllint/CMakeLists.txt
index c69748cc60..15549a93b7 100644
--- a/tests/auto/qml/qmllint/CMakeLists.txt
+++ b/tests/auto/qml/qmllint/CMakeLists.txt
@@ -12,12 +12,10 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qmllint
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qmllint.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qmllint/data/Cycle/MenuItem.qml b/tests/auto/qml/qmllint/data/Cycle/MenuItem.qml
new file mode 100644
index 0000000000..b316a5432c
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/Cycle/MenuItem.qml
@@ -0,0 +1,3 @@
+import QtQml
+
+MenuItem {}
diff --git a/tests/auto/qml/qmllint/data/Cycle/qmldir b/tests/auto/qml/qmllint/data/Cycle/qmldir
new file mode 100644
index 0000000000..6b0ba5519a
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/Cycle/qmldir
@@ -0,0 +1,3 @@
+module Cycle
+
+MenuItem 1.0 MenuItem.qml
diff --git a/tests/auto/qml/qmllint/data/LazyAndDirect/Direct.qml b/tests/auto/qml/qmllint/data/LazyAndDirect/Direct.qml
new file mode 100644
index 0000000000..fcb08c1e80
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/LazyAndDirect/Direct.qml
@@ -0,0 +1,5 @@
+import QtQml
+
+QtObject {
+ Component.onCompleted: Lazy.setDirect(this)
+}
diff --git a/tests/auto/qml/qmllint/data/LazyAndDirect/Lazy.qml b/tests/auto/qml/qmllint/data/LazyAndDirect/Lazy.qml
new file mode 100644
index 0000000000..1f69d0f16a
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/LazyAndDirect/Lazy.qml
@@ -0,0 +1,8 @@
+pragma Singleton
+import QtQml
+
+QtObject {
+ property Direct direct
+
+ function setDirect(newDirect : Direct) { direct = newDirect }
+}
diff --git a/tests/auto/qml/qmllint/data/LazyAndDirect/qmldir b/tests/auto/qml/qmllint/data/LazyAndDirect/qmldir
new file mode 100644
index 0000000000..ebc7f2a157
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/LazyAndDirect/qmldir
@@ -0,0 +1,4 @@
+module LazyAndDirect
+
+Direct 1.0 Direct.qml
+singleton Lazy 1.0 Lazy.qml
diff --git a/tests/auto/qml/qmllint/data/Qt5Compat/GraphicalEffects/private/qmldir b/tests/auto/qml/qmllint/data/Qt5Compat/GraphicalEffects/private/qmldir
new file mode 100644
index 0000000000..b13cdc9c3e
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/Qt5Compat/GraphicalEffects/private/qmldir
@@ -0,0 +1,2 @@
+module Qt5Compat.GraphicalEffects.private
+typeinfo plugins.qmltypes
diff --git a/tests/auto/qml/qmllint/data/Things/LintDirectly.qml b/tests/auto/qml/qmllint/data/Things/LintDirectly.qml
new file mode 100644
index 0000000000..4384fa99f4
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/Things/LintDirectly.qml
@@ -0,0 +1,4 @@
+Pane {
+ property var thing: NotPartOfThings {}
+ property var something: Something {}
+}
diff --git a/tests/auto/qml/qmllint/data/Things/NotPartOfThings.qml b/tests/auto/qml/qmllint/data/Things/NotPartOfThings.qml
new file mode 100644
index 0000000000..16fd397d1d
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/Things/NotPartOfThings.qml
@@ -0,0 +1,3 @@
+import QtQuick
+
+Component {}
diff --git a/tests/auto/qml/qmllint/data/accessibleId.qml b/tests/auto/qml/qmllint/data/accessibleId.qml
new file mode 100644
index 0000000000..904b856320
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/accessibleId.qml
@@ -0,0 +1,14 @@
+import QtQml
+
+QtObject {
+ id: a
+ property Component c: Component {
+ QtObject {
+ id: a
+ property QtObject o: QtObject {
+ property int a: 5
+ objectName: a.objectName
+ }
+ }
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/animationEasing.qml b/tests/auto/qml/qmllint/data/animationEasing.qml
new file mode 100644
index 0000000000..1b0c9ffea4
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/animationEasing.qml
@@ -0,0 +1,5 @@
+import QtQml
+import QtQuick
+NumberAnimation {
+ easing.type: Easing.InOutQuad
+}
diff --git a/tests/auto/qml/qmllint/data/badScript.attached.qml b/tests/auto/qml/qmllint/data/badScript.attached.qml
new file mode 100644
index 0000000000..f3183430fc
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/badScript.attached.qml
@@ -0,0 +1,4 @@
+import QtQuick
+Text {
+ font.pixelSize: 10 + pointSize * 0.1 // pointSize does not exist in the scope of the binding
+}
diff --git a/tests/auto/qml/qmllint/data/badScriptBinding.attached.qml b/tests/auto/qml/qmllint/data/badScriptBinding.attached.qml
new file mode 100644
index 0000000000..a5ec7d9050
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/badScriptBinding.attached.qml
@@ -0,0 +1,6 @@
+import QtQuick.Layouts
+RowLayout {
+ function returnTrue() { return true; }
+ Layout.fillWidth: returnTrue()
+ Layout.bogusProperty: returnTrue()
+}
diff --git a/tests/auto/qml/qmllint/data/badScriptBinding.attachedSignalHandler.qml b/tests/auto/qml/qmllint/data/badScriptBinding.attachedSignalHandler.qml
new file mode 100644
index 0000000000..56d89a81da
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/badScriptBinding.attachedSignalHandler.qml
@@ -0,0 +1,7 @@
+import QtQuick
+Rectangle {
+ Keys.onBogusSignal: function(event) {
+ // the handler is good, but the signal doesn't exist
+ console.log(event);
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/badScriptBinding.group.qml b/tests/auto/qml/qmllint/data/badScriptBinding.group.qml
new file mode 100644
index 0000000000..d92feb81f0
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/badScriptBinding.group.qml
@@ -0,0 +1,4 @@
+import QtQuick
+Text {
+ font.bogusProperty: "foo" + "bar"
+}
diff --git a/tests/auto/qml/qmllint/data/cachedDependency.qml b/tests/auto/qml/qmllint/data/cachedDependency.qml
new file mode 100644
index 0000000000..5a15a66997
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/cachedDependency.qml
@@ -0,0 +1,23 @@
+import QtQuick.Controls.impl // Caches QtQuick as depedency, without QML names
+import QtQuick
+
+Item {
+ QtObject { id: object }
+ Item { id: item }
+ Rectangle { id: rectangle }
+
+ // Various ways to cast between types contained in QtQuick and QtQml
+ // The QML names of both have to be available for this to work
+
+ property QtObject objectAsObject: object as QtObject
+ property QtObject objectAsItem: object as Item
+ property QtObject objectAsRectangle: object as Rectangle
+
+ property QtObject itemAsObject: item as QtObject
+ property QtObject itemAsItem: item as Item
+ property QtObject itemAsRectangle: item as Rectangle
+
+ property QtObject rectangleAsObject: rectangle as QtObject
+ property QtObject rectangleAsItem: rectangle as Item
+ property QtObject rectangleAsRectangle: rectangle as Rectangle
+}
diff --git a/tests/auto/qml/qmllint/data/connectionNoParent.qml b/tests/auto/qml/qmllint/data/connectionNoParent.qml
new file mode 100644
index 0000000000..27f7e22cf3
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/connectionNoParent.qml
@@ -0,0 +1,5 @@
+import QtQuick
+
+Connections {
+ function onClicked() {}
+}
diff --git a/tests/auto/qml/qmllint/data/cycleHead.qml b/tests/auto/qml/qmllint/data/cycleHead.qml
new file mode 100644
index 0000000000..080eab381f
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/cycleHead.qml
@@ -0,0 +1,7 @@
+import Cycle
+import QtQuick
+
+Item {
+ property MenuItem item: a
+ MenuItem { id: a }
+}
diff --git a/tests/auto/qml/qmllint/data/goodAttachedPropertyAccess.qml b/tests/auto/qml/qmllint/data/goodAttachedPropertyAccess.qml
index c46370521a..b7f64d9acb 100644
--- a/tests/auto/qml/qmllint/data/goodAttachedPropertyAccess.qml
+++ b/tests/auto/qml/qmllint/data/goodAttachedPropertyAccess.qml
@@ -6,6 +6,9 @@ QtObject {
}
Component.onCompleted: {
+ // NB: this currently fails as TestType.object is recognized as QtObject
+ // *exactly*, ignoring the QML code above and thus there's no 'progress'
+ // property on TestType.object
console.log(TestType.object.progress);
}
}
diff --git a/tests/auto/qml/qmllint/data/goodBindingsOnGroupAndAttached.qml b/tests/auto/qml/qmllint/data/goodBindingsOnGroupAndAttached.qml
new file mode 100644
index 0000000000..7a89b82f6e
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/goodBindingsOnGroupAndAttached.qml
@@ -0,0 +1,11 @@
+import QtQuick
+Rectangle {
+ Text {
+ font.pixelSize: 42
+ }
+
+ Keys.enabled: false
+ Keys.onPressed: function(event) {
+ console.log(event);
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/inaccessibleId.qml b/tests/auto/qml/qmllint/data/inaccessibleId.qml
new file mode 100644
index 0000000000..a3489f4741
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/inaccessibleId.qml
@@ -0,0 +1,12 @@
+import QtQml
+
+QtObject {
+ id: a
+
+ property Component c: Component {
+ QtObject {
+ property int a: 5
+ objectName: a.objectName
+ }
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/inaccessibleId2.qml b/tests/auto/qml/qmllint/data/inaccessibleId2.qml
new file mode 100644
index 0000000000..b8f381b0b7
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/inaccessibleId2.qml
@@ -0,0 +1,10 @@
+import QtQml
+
+QtObject {
+ id: a
+
+ component Handle: QtObject {
+ property int a: 5
+ objectName: a.objectName
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/invalidId1.qml b/tests/auto/qml/qmllint/data/invalidId1.qml
new file mode 100644
index 0000000000..61c45530f1
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/invalidId1.qml
@@ -0,0 +1,5 @@
+import QtQml
+
+QtObject {
+ id: foo.bar
+}
diff --git a/tests/auto/qml/qmllint/data/missingBuiltinsNoCrash.qml b/tests/auto/qml/qmllint/data/missingBuiltinsNoCrash.qml
new file mode 100644
index 0000000000..a2f7d422b3
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/missingBuiltinsNoCrash.qml
@@ -0,0 +1,3 @@
+import QtQuick // This can't be found if --bare is specified and no paths are provided
+
+Item {}
diff --git a/tests/auto/qml/qmllint/data/missingQmltypes.qml b/tests/auto/qml/qmllint/data/missingQmltypes.qml
new file mode 100644
index 0000000000..19a6dbd10b
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/missingQmltypes.qml
@@ -0,0 +1,4 @@
+import QtQml
+import Qt5Compat.GraphicalEffects.private
+
+QtObject {}
diff --git a/tests/auto/qml/qmllint/data/multiGrouped.qml b/tests/auto/qml/qmllint/data/multiGrouped.qml
new file mode 100644
index 0000000000..ab6bd5bd02
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/multiGrouped.qml
@@ -0,0 +1,6 @@
+import QtQuick
+
+Item {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors { right: parent.left }
+}
diff --git a/tests/auto/qml/qmllint/data/onBindingInGroupedProperty.qml b/tests/auto/qml/qmllint/data/onBindingInGroupedProperty.qml
new file mode 100644
index 0000000000..186b8a557f
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/onBindingInGroupedProperty.qml
@@ -0,0 +1,10 @@
+import QtQuick
+
+Rectangle
+{
+ id: root
+ border
+ {
+ ColorAnimation on color { }
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/prefixedAttachedProperty.qml b/tests/auto/qml/qmllint/data/prefixedAttachedProperty.qml
new file mode 100644
index 0000000000..1f9634e280
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/prefixedAttachedProperty.qml
@@ -0,0 +1,5 @@
+import QtQuick as T
+
+T.Item {
+ T.Accessible.name: "Example"
+}
diff --git a/tests/auto/qml/qmllint/data/qmodelIndex.qml b/tests/auto/qml/qmllint/data/qmodelIndex.qml
new file mode 100644
index 0000000000..e0df84b68b
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/qmodelIndex.qml
@@ -0,0 +1,6 @@
+import QtQml
+
+QtObject {
+ property ItemSelectionModel itemSelectionModel;
+ function row() { return itemSelectionModel.currentIndex.row; }
+}
diff --git a/tests/auto/qml/qmllint/data/requiredProperty.qml b/tests/auto/qml/qmllint/data/requiredProperty.qml
index 6e0eec54e7..f1e82bb402 100644
--- a/tests/auto/qml/qmllint/data/requiredProperty.qml
+++ b/tests/auto/qml/qmllint/data/requiredProperty.qml
@@ -1,7 +1,9 @@
-import QtQml 2.15
+import QtQuick 2.15
-QtObject {
- property int x
- required x
- x: 5
+Item {
+ component Required : QtObject {
+ property int x
+ required x
+ }
+ Required { x: 5 }
}
diff --git a/tests/auto/qml/qmllint/data/requiredPropertyInComponent.qml b/tests/auto/qml/qmllint/data/requiredPropertyInComponent.qml
new file mode 100644
index 0000000000..24ecf9d706
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/requiredPropertyInComponent.qml
@@ -0,0 +1,25 @@
+import QtQuick 2.0
+
+Row {
+ // explicit component
+ Component {
+ id: foo
+ Item {
+ required property int i
+ }
+ }
+
+ // implicit component, plain property
+ property Component com: Item {}
+
+ Repeater {
+ model: 3
+ // implicit component, default property
+ Text {
+ required property int index
+ height: 40
+ color: "black"
+ text: "I'm item " + index
+ }
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/settings/bare/.qmllint.ini b/tests/auto/qml/qmllint/data/settings/bare/.qmllint.ini
new file mode 100644
index 0000000000..e419c37f3a
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/settings/bare/.qmllint.ini
@@ -0,0 +1,2 @@
+[Foo]
+DisableDefaultImports=true
diff --git a/tests/auto/qml/qmllint/data/settings/bare/bare.qml b/tests/auto/qml/qmllint/data/settings/bare/bare.qml
new file mode 100644
index 0000000000..852b8339b9
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/settings/bare/bare.qml
@@ -0,0 +1,3 @@
+import QtQuick // Should fail because Bare is specified with no import
+
+Item {}
diff --git a/tests/auto/qml/qmllint/data/settings/qmltypes/.qmllint.ini b/tests/auto/qml/qmllint/data/settings/qmltypes/.qmllint.ini
new file mode 100644
index 0000000000..95b02f2f37
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/settings/qmltypes/.qmllint.ini
@@ -0,0 +1,2 @@
+[General]
+OverwriteImportTypes=custom.qmltypes
diff --git a/tests/auto/qml/qmllint/data/settings/qmltypes/custom.qmltypes b/tests/auto/qml/qmllint/data/settings/qmltypes/custom.qmltypes
new file mode 100644
index 0000000000..b3839652dc
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/settings/qmltypes/custom.qmltypes
@@ -0,0 +1,11 @@
+import QtQuick.tooling 1.2
+Module {
+ dependencies: []
+ Component {
+ name: "Thing"
+ prototype: "QObject"
+ exports: [
+ "Custom/Thing 1.0",
+ ]
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/settings/qmltypes/qmltypes.qml b/tests/auto/qml/qmllint/data/settings/qmltypes/qmltypes.qml
new file mode 100644
index 0000000000..221ddff254
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/settings/qmltypes/qmltypes.qml
@@ -0,0 +1,3 @@
+import Custom
+
+Thing {}
diff --git a/tests/auto/qml/qmllint/data/stringAsId.qml b/tests/auto/qml/qmllint/data/stringAsId.qml
new file mode 100644
index 0000000000..58ea28cb17
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/stringAsId.qml
@@ -0,0 +1,5 @@
+import QtQml
+
+QtObject {
+ id: "aString"
+}
diff --git a/tests/auto/qml/qmllint/data/stringIdUsedInWarning.qml b/tests/auto/qml/qmllint/data/stringIdUsedInWarning.qml
new file mode 100644
index 0000000000..672c00f39b
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/stringIdUsedInWarning.qml
@@ -0,0 +1,9 @@
+import QtQml
+
+QtObject {
+ id: "stringy"
+ property int i
+ property QtObject o: QtObject {
+ Component.onCompleted: console.log(i)
+ }
+}
diff --git a/tests/auto/qml/qmllint/tst_qmllint.cpp b/tests/auto/qml/qmllint/tst_qmllint.cpp
index 79225d92de..3cdba23872 100644
--- a/tests/auto/qml/qmllint/tst_qmllint.cpp
+++ b/tests/auto/qml/qmllint/tst_qmllint.cpp
@@ -30,13 +30,15 @@
#include <QtTest/QtTest>
#include <QProcess>
#include <QString>
-
-#include <util.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class TestQmllint: public QQmlDataTest
{
Q_OBJECT
+public:
+ TestQmllint();
+
private Q_SLOTS:
void initTestCase() override;
@@ -68,17 +70,27 @@ private Q_SLOTS:
void settingsFile();
+ void lazyAndDirect();
+
+ void missingBuiltinsNoCrash();
private:
QString runQmllint(const QString &fileToLint, std::function<void(QProcess &)> handleResult,
- const QStringList &extraArgs = QStringList(), bool ignoreSettings = true);
+ const QStringList &extraArgs = QStringList(), bool ignoreSettings = true,
+ bool addIncludeDirs = true);
QString runQmllint(const QString &fileToLint, bool shouldSucceed,
- const QStringList &extraArgs = QStringList(), bool ignoreSettings = true);
+ const QStringList &extraArgs = QStringList(), bool ignoreSettings = true,
+ bool addIncludeDirs = true);
QString m_qmllintPath;
QString m_qmljsrootgenPath;
QString m_qmltyperegistrarPath;
};
+TestQmllint::TestQmllint()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void TestQmllint::initTestCase()
{
QQmlDataTest::initTestCase();
@@ -180,7 +192,7 @@ void TestQmllint::oldQmltypes()
QVERIFY(errors.contains(QStringLiteral("Warning: Found deprecated dependency specifications")));
// Checking for both lines separately so that we don't have to mess with the line endings.b
- QVERIFY(errors.contains(QStringLiteral("Meta object revision and export version differ, ignoring the revision.")));
+ QVERIFY(errors.contains(QStringLiteral("Meta object revision and export version differ.")));
QVERIFY(errors.contains(QStringLiteral("Revision 0 corresponds to version 0.0; it should be 1.0.")));
}
@@ -405,7 +417,7 @@ void TestQmllint::dirtyQmlCode_data()
<< false;
QTest::newRow("nanchors1")
<< QStringLiteral("nanchors1.qml")
- << QString()
+ << QString("unknown grouped property scope nanchors.")
<< QString()
<< false;
QTest::newRow("nanchors2")
@@ -428,6 +440,9 @@ void TestQmllint::dirtyQmlCode_data()
<< QString("Warning: %1:5:21: Property \"stuff\" not found on type \"Empty\"")
<< QString()
<< false;
+ QTest::newRow("badScriptOnAttachedProperty")
+ << QStringLiteral("badScript.attached.qml")
+ << QString("Warning: %1:3:26: Unqualified access") << QString() << false;
QTest::newRow("brokenNamespace")
<< QStringLiteral("brokenNamespace.qml")
<< QString("Warning: %1:4:17: Type not found in namespace")
@@ -472,6 +487,21 @@ void TestQmllint::dirtyQmlCode_data()
"\"doesNotExist\" exists in the current element.")
<< QString()
<< false;
+ QTest::newRow("BadScriptBindingOnGroup")
+ << QStringLiteral("badScriptBinding.group.qml")
+ << QStringLiteral("Warning: %1:3:10: Binding assigned to \"bogusProperty\", but no "
+ "property \"bogusProperty\" exists in the current element.")
+ << QString() << false;
+ QTest::newRow("BadScriptBindingOnAttachedType")
+ << QStringLiteral("badScriptBinding.attached.qml")
+ << QStringLiteral("Warning: %1:5:12: Binding assigned to \"bogusProperty\", but no "
+ "property \"bogusProperty\" exists in the current element.")
+ << QString() << false;
+ QTest::newRow("BadScriptBindingOnAttachedSignalHandler")
+ << QStringLiteral("badScriptBinding.attachedSignalHandler.qml")
+ << QStringLiteral(
+ "Warning: %1:3:10: no matching signal found for handler \"onBogusSignal\"")
+ << QString() << false;
QTest::newRow("BadPropertyType")
<< QStringLiteral("badPropertyType.qml")
<< QStringLiteral("No type found for property \"bad\". This may be due to a missing "
@@ -590,6 +620,22 @@ void TestQmllint::dirtyQmlCode_data()
<< QStringLiteral("Method \"deprecatedInherited(c, d)\" is deprecated (Reason: This deprecation should be visible!)")
<< QString()
<< false;
+
+ QTest::newRow("string as id")
+ << QStringLiteral("stringAsId.qml")
+ << QStringLiteral("ids do not need quotation marks")
+ << QString()
+ << false;
+ QTest::newRow("stringIdUsedInWarning")
+ << QStringLiteral("stringIdUsedInWarning.qml")
+ << QStringLiteral("Component.onCompleted: console.log(stringy.i)")
+ << QString()
+ << false;
+ QTest::newRow("Invalid id (expression)")
+ << QStringLiteral("invalidId1.qml")
+ << QStringLiteral("Failed to parse id")
+ << QString()
+ << false;
QTest::newRow("multilineString")
<< QStringLiteral("multilineString.qml")
<< QStringLiteral("String contains unescaped line terminator which is deprecated. Use "
@@ -624,6 +670,27 @@ void TestQmllint::dirtyQmlCode_data()
QTest::newRow("nestedInlineComponents")
<< QStringLiteral("nestedInlineComponents.qml")
<< QStringLiteral("Nested inline components are not supported") << QString() << false;
+ QTest::newRow("cachedDependency")
+ << QStringLiteral("cachedDependency.qml")
+ << QStringLiteral("Unused import at %1:1:1")
+ << QStringLiteral("Cannot assign binding of type QQuickItem to QObject")
+ << true;
+ QTest::newRow("cycle in import")
+ << QStringLiteral("cycleHead.qml")
+ << QStringLiteral("MenuItem is part of an inheritance cycle: MenuItem -> MenuItem")
+ << QString() << false;
+ QTest::newRow("missingQmltypes")
+ << QStringLiteral("missingQmltypes.qml")
+ << QStringLiteral("QML types file does not exist")
+ << QString() << false;
+ QTest::newRow("inaccessibleId")
+ << QStringLiteral("inaccessibleId.qml")
+ << QStringLiteral("Property \"objectName\" not found on type \"int\"")
+ << QString() << false;
+ QTest::newRow("inaccessibleId2")
+ << QStringLiteral("inaccessibleId2.qml")
+ << QStringLiteral("Property \"objectName\" not found on type \"int\"")
+ << QString() << false;
}
void TestQmllint::dirtyQmlCode()
@@ -640,7 +707,6 @@ void TestQmllint::dirtyQmlCode()
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
QEXPECT_FAIL("anchors3", "We don't see that QQuickItem cannot be assigned to QQuickAnchorLine", Abort);
- QEXPECT_FAIL("nanchors1", "Invalid grouped properties are not always detected", Abort);
QEXPECT_FAIL("TypePropertAccess", "We cannot discern between types and instances", Abort);
QEXPECT_FAIL("badAttachedPropertyTypeString",
"Script bindings do not perform property type matching", Abort);
@@ -765,6 +831,17 @@ void TestQmllint::cleanQmlCode_data()
QTest::newRow("CustomParserUnqualifiedAccess")
<< QStringLiteral("customParserUnqualifiedAccess.qml");
QTest::newRow("ImportQMLModule") << QStringLiteral("importQMLModule.qml");
+ QTest::newRow("ImportDirectoryQmldir") << QStringLiteral("Things/LintDirectly.qml");
+ QTest::newRow("BindingsOnGroupAndAttachedProperties")
+ << QStringLiteral("goodBindingsOnGroupAndAttached.qml");
+ QTest::newRow("QQmlEasingEnums::Type") << QStringLiteral("animationEasing.qml");
+ QTest::newRow("required property in Component") << QStringLiteral("requiredPropertyInComponent.qml");
+ QTest::newRow("connectionNoParent") << QStringLiteral("connectionNoParent.qml"); // QTBUG-97600
+ QTest::newRow("on binding in grouped property") << QStringLiteral("onBindingInGroupedProperty.qml");
+ QTest::newRow("multipleGrouped") << QStringLiteral("multiGrouped.qml");
+ QTest::newRow("ID overrides property") << QStringLiteral("accessibleId.qml");
+ QTest::newRow("qmodelIndex") << QStringLiteral("qmodelIndex.qml");
+ QTest::newRow("prefixedAttachedProperty") << QStringLiteral("prefixedAttachedProperty.qml");
}
void TestQmllint::cleanQmlCode()
@@ -776,14 +853,18 @@ void TestQmllint::cleanQmlCode()
QString TestQmllint::runQmllint(const QString &fileToLint,
std::function<void(QProcess &)> handleResult,
- const QStringList &extraArgs, bool ignoreSettings)
+ const QStringList &extraArgs, bool ignoreSettings,
+ bool addIncludeDirs)
{
auto qmlImportDir = QLibraryInfo::path(QLibraryInfo::QmlImportsPath);
QStringList args;
- args << (QFileInfo(fileToLint).isAbsolute() ? fileToLint : testFile(fileToLint))
- << QStringLiteral("-I") << qmlImportDir
- << QStringLiteral("-I") << dataDirectory();
+ args << (QFileInfo(fileToLint).isAbsolute() ? fileToLint : testFile(fileToLint));
+
+ if (addIncludeDirs) {
+ args << QStringLiteral("-I") << qmlImportDir
+ << QStringLiteral("-I") << dataDirectory();
+ }
if (ignoreSettings)
QStringLiteral("--ignore-settings");
@@ -815,7 +896,8 @@ QString TestQmllint::runQmllint(const QString &fileToLint,
}
QString TestQmllint::runQmllint(const QString &fileToLint, bool shouldSucceed,
- const QStringList &extraArgs, bool ignoreSettings)
+ const QStringList &extraArgs, bool ignoreSettings,
+ bool addIncludeDirs)
{
return runQmllint(
fileToLint,
@@ -828,7 +910,7 @@ QString TestQmllint::runQmllint(const QString &fileToLint, bool shouldSucceed,
else
QVERIFY(process.exitCode() != 0);
},
- extraArgs, ignoreSettings);
+ extraArgs, ignoreSettings, addIncludeDirs);
}
void TestQmllint::requiredProperty()
@@ -869,6 +951,22 @@ void TestQmllint::settingsFile()
QVERIFY(runQmllint("settings/unusedImportWarning/unused.qml", false, QStringList(), false)
.contains(QStringLiteral("Warning: %1:2:1: Unused import at %1:2:1")
.arg(testFile("settings/unusedImportWarning/unused.qml"))));
+ QVERIFY(runQmllint("settings/bare/bare.qml", false, { "--bare" }, false, false)
+ .contains(QStringLiteral("Failed to find the following builtins: "
+ "builtins.qmltypes, jsroot.qmltypes")));
+ QVERIFY(runQmllint("settings/qmltypes/qmltypes.qml", true, QStringList(), false).isEmpty());
+}
+
+void TestQmllint::lazyAndDirect()
+{
+ QVERIFY(runQmllint("LazyAndDirect/Lazy.qml", true, {}, false).isEmpty());
+}
+
+void TestQmllint::missingBuiltinsNoCrash()
+{
+ QVERIFY(runQmllint("missingBuiltinsNoCrash.qml", false, { "--bare" }, false, false)
+ .contains(QStringLiteral("Failed to find the following builtins: "
+ "builtins.qmltypes, jsroot.qmltypes")));
}
QTEST_MAIN(TestQmllint)
diff --git a/tests/auto/qml/qmlplugindump/CMakeLists.txt b/tests/auto/qml/qmlplugindump/CMakeLists.txt
index 1bf13a2c02..96eea00938 100644
--- a/tests/auto/qml/qmlplugindump/CMakeLists.txt
+++ b/tests/auto/qml/qmlplugindump/CMakeLists.txt
@@ -6,15 +6,13 @@
qt_internal_add_test(tst_qmlplugindump
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qmlplugindump.cpp
DEFINES
QT_QMLTEST_DIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::GuiPrivate
Qt::Qml
+ Qt::QuickTestUtilsPrivate
)
## Scopes:
diff --git a/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp b/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp
index 17e67269f3..542c1974c5 100644
--- a/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp
+++ b/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp
@@ -26,14 +26,13 @@
**
****************************************************************************/
-#include "util.h"
-
#include <qtest.h>
#include <QLibraryInfo>
#include <QDir>
#include <QProcess>
#include <QDebug>
#include <cstdlib>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qmlplugindump : public QQmlDataTest
{
@@ -56,6 +55,7 @@ private:
};
tst_qmlplugindump::tst_qmlplugindump()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/qml/qmltyperegistrar/CMakeLists.txt b/tests/auto/qml/qmltyperegistrar/CMakeLists.txt
index dfd404575b..02a0347ac2 100644
--- a/tests/auto/qml/qmltyperegistrar/CMakeLists.txt
+++ b/tests/auto/qml/qmltyperegistrar/CMakeLists.txt
@@ -7,6 +7,16 @@
qt_manual_moc(moc_files OUTPUT_MOC_JSON_FILES json_list noextheader
INCLUDE_DIRECTORY_TARGETS Qt::Qml)
+# Dummy target to pass --private-includes to qmltyperegistrar for tst_qmltyperegistrar.
+# We want to test that it expects files named foo_p.h appearing in foreign metatypes
+# to be in a private/ subdirectory. In particular, we have a foreign_p.h to exercise this.
+# TODO: There should be more fine grained control over this.
+qt_add_library(tst_qmltyperegistrarPrivate STATIC
+ dummy.cpp dummy_p.h
+)
+
+target_link_libraries(tst_qmltyperegistrarPrivate PRIVATE Qt::Core)
+
qt_internal_add_test(tst_qmltyperegistrar
SOURCES
hppheader.hpp
@@ -20,6 +30,7 @@ qt_internal_add_test(tst_qmltyperegistrar
# Remove: Lforeign
Qt::Qml
foreign
+ tst_qmltyperegistrarPrivate
)
#### Keys ignored in scope 2:.:.:tst_qmltyperegistrar.pro:<TRUE>:
@@ -36,13 +47,24 @@ qt_internal_add_test(tst_qmltyperegistrar
# Simulate conditions that qt6_add_qml_module() would normally set up for us
set_target_properties(tst_qmltyperegistrar PROPERTIES
QT_QML_MODULE_VERSION 1.0
- QT_QML_PAST_MAJOR_VERSIONS 0
+ QT_QML_MODULE_PAST_MAJOR_VERSIONS 0
QT_QML_MODULE_URI QmlTypeRegistrarTest
- QT_QMLTYPES_FILENAME tst_qmltyperegistrar.qmltypes
- QT_QML_MODULE_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
+ QT_QML_MODULE_TYPEINFO tst_qmltyperegistrar.qmltypes
+ QT_QML_MODULE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
# qt6_add_qml_module() doesn't allow us to pass through MANUAL_MOC_JSON_FILES
# yet, so we have to call it directly to test that code path for now.
-qt6_qml_type_registration(tst_qmltyperegistrar MANUAL_MOC_JSON_FILES ${json_list})
+_qt_internal_qml_type_registration(tst_qmltyperegistrar MANUAL_MOC_JSON_FILES ${json_list})
add_subdirectory(foreign)
+
+qt_add_library(tst-qmltyperegistrar-with-dashes)
+target_link_libraries(tst-qmltyperegistrar-with-dashes PRIVATE Qt::Core Qt::Qml)
+qt_enable_autogen_tool(tst-qmltyperegistrar-with-dashes "moc" ON)
+qt_add_qml_module(tst-qmltyperegistrar-with-dashes
+ URI Module-With-Dashes
+ VERSION 1.0
+ SOURCES
+ foo.cpp foo.h
+)
+qt_autogen_tools_initial_setup(tst-qmltyperegistrar-with-dashesplugin)
diff --git a/tests/auto/qml/qmltyperegistrar/dummy.cpp b/tests/auto/qml/qmltyperegistrar/dummy.cpp
new file mode 100644
index 0000000000..1959bc3816
--- /dev/null
+++ b/tests/auto/qml/qmltyperegistrar/dummy.cpp
@@ -0,0 +1,2 @@
+#include "dummy_p.h"
+int foo() { return 1; }
diff --git a/tests/auto/qml/qmltyperegistrar/dummy_p.h b/tests/auto/qml/qmltyperegistrar/dummy_p.h
new file mode 100644
index 0000000000..e564d3b549
--- /dev/null
+++ b/tests/auto/qml/qmltyperegistrar/dummy_p.h
@@ -0,0 +1,2 @@
+#include <QtCore/qglobal.h>
+Q_DECL_EXPORT int foo();
diff --git a/tests/auto/qml/qmltyperegistrar/foreign/CMakeLists.txt b/tests/auto/qml/qmltyperegistrar/foreign/CMakeLists.txt
index ad967cdbf0..81d4b00aa3 100644
--- a/tests/auto/qml/qmltyperegistrar/foreign/CMakeLists.txt
+++ b/tests/auto/qml/qmltyperegistrar/foreign/CMakeLists.txt
@@ -7,7 +7,7 @@
qt_internal_add_cmake_library(foreign
STATIC
SOURCES
- foreign.cpp foreign.h
+ foreign.cpp foreign.h foreign_p.h
PUBLIC_LIBRARIES
Qt::Core
)
diff --git a/tests/auto/qml/qmltyperegistrar/foreign/foreign_p.h b/tests/auto/qml/qmltyperegistrar/foreign/foreign_p.h
new file mode 100644
index 0000000000..8ea292c015
--- /dev/null
+++ b/tests/auto/qml/qmltyperegistrar/foreign/foreign_p.h
@@ -0,0 +1,44 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#ifndef FOREIGN_P_H
+#define FOREIGN_P_H
+
+#include <QtCore/qobject.h>
+
+// qmltyperegistrar will assume this file is reachable under <private/foreign_p.h>
+// It's not true, but this is how it works on actual private headers in Qt.
+// See the trick in tst_qmltyperegistrar's CMakeLists.txt to turn on the --private-includes option.
+class ForeignPrivate : public QObject
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void happens();
+};
+
+#endif // FOREIGN_P_H
diff --git a/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp b/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp
index f11f5d6404..27f83ca22f 100644
--- a/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp
+++ b/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp
@@ -288,4 +288,23 @@ void tst_qmltyperegistrar::namespacesAndValueTypes()
check(QMetaType::fromName("ValueTypeWithEnum2"), QMetaType::fromType<ValueTypeWithEnum2>());
}
+void tst_qmltyperegistrar::derivedFromForeignPrivate()
+{
+ QVERIFY(qmltypesData.contains("file: \"private/foreign_p.h\""));
+}
+
+void tst_qmltyperegistrar::methodReturnType()
+{
+ QVERIFY(qmltypesData.contains("createAThing"));
+ QVERIFY(!qmltypesData.contains("QQmlComponent*"));
+ QVERIFY(qmltypesData.contains("type: \"QQmlComponent\""));
+}
+
+void tst_qmltyperegistrar::omitInvisible()
+{
+ // If it cannot resolve the type a QML_FOREIGN refers to, it should not generate anything.
+ QVERIFY(qmltypesData.contains(
+ R"(Component { file: "tst_qmltyperegistrar.h"; name: "Invisible"; accessSemantics: "none" })"));
+}
+
QTEST_MAIN(tst_qmltyperegistrar)
diff --git a/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h b/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h
index 2a8423c682..1372c32d02 100644
--- a/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h
+++ b/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h
@@ -30,8 +30,10 @@
#define TST_QMLTYPEREGISTRAR_H
#include "foreign.h"
+#include "foreign_p.h"
#include <QtQml/qqml.h>
+#include <QtQml/qqmlcomponent.h>
#include <QtCore/qproperty.h>
#include <QtCore/qtimeline.h>
#include <QtCore/qrect.h>
@@ -382,6 +384,31 @@ struct BValueTypeWithEnumForeign2
QML_NAMED_ELEMENT(valueTypeWithEnum2)
};
+class DerivedFromForeignPrivate : public ForeignPrivate
+{
+ Q_OBJECT
+ QML_ELEMENT
+};
+
+class WithMethod : public QObject
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ Q_INVOKABLE QQmlComponent *createAThing(int) { return nullptr; }
+};
+
+class Invisible : public QObject
+{
+};
+
+struct InvisibleForeign
+{
+ Q_GADGET
+ QML_FOREIGN(Invisible)
+ QML_NAMED_ELEMENT(Invisible)
+};
+
class tst_qmltyperegistrar : public QObject
{
Q_OBJECT
@@ -411,6 +438,9 @@ private slots:
void finalProperty();
void parentProperty();
void namespacesAndValueTypes();
+ void derivedFromForeignPrivate();
+ void methodReturnType();
+ void omitInvisible();
private:
QByteArray qmltypesData;
diff --git a/tests/auto/qml/qqmlanybinding/CMakeLists.txt b/tests/auto/qml/qqmlanybinding/CMakeLists.txt
index 83c9bd7994..32efa891ea 100644
--- a/tests/auto/qml/qqmlanybinding/CMakeLists.txt
+++ b/tests/auto/qml/qqmlanybinding/CMakeLists.txt
@@ -10,17 +10,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlanybinding
SOURCES
- ../../shared/util.cpp ../../shared/util.h
withbindable.h
tst_qqmlanybinding.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -29,7 +27,7 @@ set_target_properties(tst_qqmlanybinding PROPERTIES
QT_QML_MODULE_URI bindable
)
-qt6_qml_type_registration(tst_qqmlanybinding)
+_qt_internal_qml_type_registration(tst_qqmlanybinding)
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp b/tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp
index b7ea29ddd3..76f8f9e89e 100644
--- a/tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp
+++ b/tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp
@@ -25,23 +25,31 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#include "../../shared/util.h"
#include <QtQml/QQmlEngine>
#include <QtQml/QQmlComponent>
#include <QtCore/QScopedPointer>
#include <QtQml/private/qqmlanybinding_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "withbindable.h"
class tst_qqmlanybinding : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qqmlanybinding();
+
private slots:
void basicActions_data();
void basicActions();
void unboundQQmlPropertyBindingDoesNotCrash();
};
+tst_qqmlanybinding::tst_qqmlanybinding()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qqmlanybinding::basicActions_data()
{
QTest::addColumn<QString>("fileName");
diff --git a/tests/auto/qml/qqmlanybinding/withbindable.h b/tests/auto/qml/qqmlanybinding/withbindable.h
index 4488c0c350..be39d42eb7 100644
--- a/tests/auto/qml/qqmlanybinding/withbindable.h
+++ b/tests/auto/qml/qqmlanybinding/withbindable.h
@@ -29,6 +29,7 @@
#define WITH_BINDABLE_H
#include <QObject>
+#include <QtCore/qproperty.h>
#include <qqml.h>
class WithBinding : public QObject {
diff --git a/tests/auto/qml/qqmlapplicationengine/CMakeLists.txt b/tests/auto/qml/qqmlapplicationengine/CMakeLists.txt
index ea88b6c8e3..caf1e2edaa 100644
--- a/tests/auto/qml/qqmlapplicationengine/CMakeLists.txt
+++ b/tests/auto/qml/qqmlapplicationengine/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlapplicationengine
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlapplicationengine.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -37,6 +35,9 @@ qt_internal_add_resource(tst_qqmlapplicationengine "tst_qqmlapplicationengine"
${tst_qqmlapplicationengine_resource_files}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlapplicationengine)
+endif()
#### Keys ignored in scope 2:.:.:tst_qqmlapplicationengine.pro:<TRUE>:
# TRANSLATIONS = "data/i18n/qml_ja.ts"
@@ -54,3 +55,4 @@ qt_internal_extend_target(tst_qqmlapplicationengine CONDITION NOT ANDROID AND NO
QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
)
add_subdirectory(testapp)
+add_subdirectory(androidassets)
diff --git a/tests/auto/qml/qqmlapplicationengine/androidassets/CMakeLists.txt b/tests/auto/qml/qqmlapplicationengine/androidassets/CMakeLists.txt
new file mode 100644
index 0000000000..1c0d305311
--- /dev/null
+++ b/tests/auto/qml/qqmlapplicationengine/androidassets/CMakeLists.txt
@@ -0,0 +1,18 @@
+qt_internal_add_test(tst_androidassets
+ SOURCES
+ tst_androidassets.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+)
+
+# add qml/*.qml files as assets instead of resources
+
+file(
+ COPY qml/main.qml
+ DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/android-build/assets/qml/")
+
+file(
+ COPY qml/pages/MainPage.qml
+ DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/android-build/assets/qml/pages/")
diff --git a/tests/auto/qml/qqmlapplicationengine/androidassets/qml/main.qml b/tests/auto/qml/qqmlapplicationengine/androidassets/qml/main.qml
new file mode 100644
index 0000000000..6901572b00
--- /dev/null
+++ b/tests/auto/qml/qqmlapplicationengine/androidassets/qml/main.qml
@@ -0,0 +1,13 @@
+import QtQuick
+
+// relative import: has to work when loading from android assets by path or by URL
+import "pages"
+
+Window {
+ width: 640
+ height: 480
+ visible: true
+ title: qsTr("Hello World")
+
+ MainPage { }
+}
diff --git a/tests/auto/qml/qqmlapplicationengine/androidassets/qml/pages/MainPage.qml b/tests/auto/qml/qqmlapplicationengine/androidassets/qml/pages/MainPage.qml
new file mode 100644
index 0000000000..c9549a928a
--- /dev/null
+++ b/tests/auto/qml/qqmlapplicationengine/androidassets/qml/pages/MainPage.qml
@@ -0,0 +1,11 @@
+import QtQuick
+
+Rectangle {
+ anchors.fill: parent
+ color: "#ddd"
+
+ Text {
+ anchors.centerIn: parent
+ text: "Qt 6"
+ }
+}
diff --git a/tests/auto/qml/qqmlapplicationengine/androidassets/tst_androidassets.cpp b/tests/auto/qml/qqmlapplicationengine/androidassets/tst_androidassets.cpp
new file mode 100644
index 0000000000..0751e23f45
--- /dev/null
+++ b/tests/auto/qml/qqmlapplicationengine/androidassets/tst_androidassets.cpp
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QtQml/qqmlapplicationengine.h>
+#include <QtTest/qsignalspy.h>
+#include <QtTest/qtest.h>
+
+class tst_AndroidAssets : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void loadsFromAssetsPath();
+ void loadsFromAssetsUrl();
+
+private:
+
+ static QString pathPrefix()
+ {
+#ifdef Q_OS_ANDROID
+ return QStringLiteral("assets:");
+#else
+ // Even when not running on android we can check that the copying to build dir worked.
+ return QCoreApplication::applicationDirPath() + QStringLiteral("/android-build/assets");
+#endif
+ }
+
+ static QString urlPrefix() {
+#ifdef Q_OS_ANDROID
+ return pathPrefix();
+#else
+ return QStringLiteral("file:") + pathPrefix();
+#endif
+ }
+};
+
+
+void tst_AndroidAssets::loadsFromAssetsPath()
+{
+ QQmlApplicationEngine engine;
+
+ // load QML file from assets, by path:
+ engine.load(pathPrefix() + QStringLiteral("/qml/main.qml"));
+ QTRY_VERIFY(engine.rootObjects().length() == 1);
+}
+
+void tst_AndroidAssets::loadsFromAssetsUrl()
+{
+ QQmlApplicationEngine engine;
+
+ // load QML file from assets, by URL:
+ engine.load(QUrl(urlPrefix() + QStringLiteral("/qml/main.qml")));
+ QTRY_VERIFY(engine.rootObjects().length() == 1);
+}
+
+QTEST_MAIN(tst_AndroidAssets)
+
+#include "tst_androidassets.moc"
diff --git a/tests/auto/qml/qqmlapplicationengine/tst_qqmlapplicationengine.cpp b/tests/auto/qml/qqmlapplicationengine/tst_qqmlapplicationengine.cpp
index a35375d6f3..c948ad5b9c 100644
--- a/tests/auto/qml/qqmlapplicationengine/tst_qqmlapplicationengine.cpp
+++ b/tests/auto/qml/qqmlapplicationengine/tst_qqmlapplicationengine.cpp
@@ -26,7 +26,6 @@
**
****************************************************************************/
-#include "../../shared/util.h"
#include <QQmlApplicationEngine>
#include <QScopedPointer>
#include <QSignalSpy>
@@ -35,12 +34,13 @@
#include <QProcess>
#endif
#include <QDebug>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlapplicationengine : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlapplicationengine() {}
+ tst_qqmlapplicationengine() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
@@ -101,6 +101,10 @@ void tst_qqmlapplicationengine::basicLoading()
// will break.
void tst_qqmlapplicationengine::testNonResolvedPath()
{
+#if defined(Q_OS_INTEGRITY)
+ QSKIP("INTEGRITY stores QML files in resources, and the path to a resource cannot be relative in this case");
+#endif
+
#ifdef Q_OS_ANDROID
QSKIP("Android stores QML files in resources, and the path to a resource cannot be relative in this case");
#endif
@@ -162,6 +166,11 @@ void tst_qqmlapplicationengine::application()
#if QT_CONFIG(process)
QDir::setCurrent(buildDir);
QProcess *testProcess = new QProcess(this);
+#ifdef Q_OS_QNX
+ QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+ env.insert("QT_FORCE_STDERR_LOGGING", "1"); // QTBUG-76546
+ testProcess->setProcessEnvironment(env);
+#endif
QStringList args;
args << qmlFile; // QML file passed as an argument is going to be run by testapp.
testProcess->start(QLatin1String("testapp/testapp"), args);
diff --git a/tests/auto/qml/qqmlbinding/CMakeLists.txt b/tests/auto/qml/qqmlbinding/CMakeLists.txt
index 6bf1668970..78445283e4 100644
--- a/tests/auto/qml/qqmlbinding/CMakeLists.txt
+++ b/tests/auto/qml/qqmlbinding/CMakeLists.txt
@@ -12,17 +12,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlbinding
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlbinding.cpp
WithBindableProperties.h
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -31,7 +29,7 @@ set_target_properties(tst_qqmlbinding PROPERTIES
QT_QML_MODULE_VERSION 1.0
)
-qt6_qml_type_registration(tst_qqmlbinding)
+_qt_internal_qml_type_registration(tst_qqmlbinding)
## Scopes:
diff --git a/tests/auto/qml/qqmlbinding/WithBindableProperties.h b/tests/auto/qml/qqmlbinding/WithBindableProperties.h
index 562b445df7..7866504495 100644
--- a/tests/auto/qml/qqmlbinding/WithBindableProperties.h
+++ b/tests/auto/qml/qqmlbinding/WithBindableProperties.h
@@ -30,6 +30,7 @@
#include <QObject>
#include <qqml.h>
+#include <QtCore/qproperty.h>
class WithBindableProperties : public QObject
diff --git a/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp b/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp
index c0c96ca6e5..328bc57447 100644
--- a/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp
+++ b/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp
@@ -30,7 +30,7 @@
#include <QtQml/qqmlcomponent.h>
#include <private/qqmlbind_p.h>
#include <QtQuick/private/qquickrectangle_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "WithBindableProperties.h"
class tst_qqmlbinding : public QQmlDataTest
@@ -66,6 +66,7 @@ private:
};
tst_qqmlbinding::tst_qqmlbinding()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -377,6 +378,10 @@ void tst_qqmlbinding::disabledOnReadonlyProperty()
void tst_qqmlbinding::delayed()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("This test crashes on Android. QTBUG-103310");
+#endif
+
QQmlEngine engine;
QQmlComponent c(&engine, testFileUrl("delayed.qml"));
QScopedPointer<QQuickItem> item {qobject_cast<QQuickItem*>(c.create())};
diff --git a/tests/auto/qml/qqmlchangeset/CMakeLists.txt b/tests/auto/qml/qqmlchangeset/CMakeLists.txt
index da06b85fad..510e304717 100644
--- a/tests/auto/qml/qqmlchangeset/CMakeLists.txt
+++ b/tests/auto/qml/qqmlchangeset/CMakeLists.txt
@@ -1,10 +1,10 @@
# Generated from qqmlchangeset.pro.
#####################################################################
-## tst_qqmlhangeset Test:
+## tst_qqmlchangeset Test:
#####################################################################
-qt_internal_add_test(tst_qqmlhangeset
+qt_internal_add_test(tst_qqmlchangeset
SOURCES
tst_qqmlchangeset.cpp
PUBLIC_LIBRARIES
diff --git a/tests/auto/qml/qqmlcomponent/CMakeLists.txt b/tests/auto/qml/qqmlcomponent/CMakeLists.txt
index c7dd50e8d6..7ef68135c9 100644
--- a/tests/auto/qml/qqmlcomponent/CMakeLists.txt
+++ b/tests/auto/qml/qqmlcomponent/CMakeLists.txt
@@ -12,11 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlcomponent
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlcomponent.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -24,6 +20,7 @@ qt_internal_add_test(tst_qqmlcomponent
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlcomponent/data/RequiredPropertiesInAttached.qml b/tests/auto/qml/qqmlcomponent/data/RequiredPropertiesInAttached.qml
new file mode 100644
index 0000000000..ac496b6131
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/RequiredPropertiesInAttached.qml
@@ -0,0 +1,6 @@
+import qt.test 1.0
+import QtQml
+QtObject {
+ AttachedRequiredProperty.index: -1
+ AttachedRequiredProperty.name: "minus one"
+} // error: we don't support required attached properties
diff --git a/tests/auto/qml/qqmlcomponent/data/RequiredPropertiesInGroup.qml b/tests/auto/qml/qqmlcomponent/data/RequiredPropertiesInGroup.qml
new file mode 100644
index 0000000000..786a293647
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/RequiredPropertiesInGroup.qml
@@ -0,0 +1,5 @@
+import qt.test 1.0
+GroupedRequiredProperty {
+ group.index: 42
+ group.name: "foobar"
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredSetInSameFile.qml b/tests/auto/qml/qqmlcomponent/data/RequiredSetInSameFile.qml
index 76dfcd87e5..76dfcd87e5 100644
--- a/tests/auto/qml/qqmlcomponent/data/requiredSetInSameFile.qml
+++ b/tests/auto/qml/qqmlcomponent/data/RequiredSetInSameFile.qml
diff --git a/tests/auto/qml/qqmlcomponent/data/RequiredTwoPropertiesSet.qml b/tests/auto/qml/qqmlcomponent/data/RequiredTwoPropertiesSet.qml
new file mode 100644
index 0000000000..a925303403
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/RequiredTwoPropertiesSet.qml
@@ -0,0 +1,6 @@
+import qt.test 1.0
+TwoRequiredProperties {
+ id: test
+ index: 1
+ name: "foobar"
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/RerequiredNotSet.qml b/tests/auto/qml/qqmlcomponent/data/RerequiredNotSet.qml
new file mode 100644
index 0000000000..2dd33e8196
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/RerequiredNotSet.qml
@@ -0,0 +1,3 @@
+RequiredSetInSameFile {
+ required i
+} // error: we explicitly want required here, but it's not set
diff --git a/tests/auto/qml/qqmlcomponent/data/jsmodule/module.mjs b/tests/auto/qml/qqmlcomponent/data/jsmodule/module.mjs
index 3dd3507d45..9175ba0a67 100644
--- a/tests/auto/qml/qqmlcomponent/data/jsmodule/module.mjs
+++ b/tests/auto/qml/qqmlcomponent/data/jsmodule/module.mjs
@@ -1,5 +1,6 @@
export function withProp(root) {
- const component = Qt.createComponent("data/jsmodule/Dynamic.qml");
+ const prefix = Qt.platform.os == "android" ? "qrc:" : "";
+ const component = Qt.createComponent(prefix + "data/jsmodule/Dynamic.qml");
const el = component.createObject(root, { value: 42 });
return el.value;
}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredChildOfBadBase.qml b/tests/auto/qml/qqmlcomponent/data/requiredChildOfBadBase.qml
new file mode 100644
index 0000000000..b75f06d5d3
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredChildOfBadBase.qml
@@ -0,0 +1 @@
+BaseWithRequired {} // fails as required property not set
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredChildOfGoodBase.qml b/tests/auto/qml/qqmlcomponent/data/requiredChildOfGoodBase.qml
new file mode 100644
index 0000000000..31d2d3065b
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredChildOfGoodBase.qml
@@ -0,0 +1 @@
+RequiredSetInSameFile {} // succeeds as required property is set
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredGroup.bad.qml b/tests/auto/qml/qqmlcomponent/data/requiredGroup.bad.qml
new file mode 100644
index 0000000000..744c9131dc
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredGroup.bad.qml
@@ -0,0 +1,3 @@
+import qt.test 1.0
+RequiredGroup {
+} // error: required group property is not set
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredGroup.good.qml b/tests/auto/qml/qqmlcomponent/data/requiredGroup.good.qml
new file mode 100644
index 0000000000..836b4c6968
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredGroup.good.qml
@@ -0,0 +1,4 @@
+import qt.test 1.0
+RequiredGroup {
+ group.disabled.buttonText: "salmon"
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttached.bad.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttached.bad.qml
new file mode 100644
index 0000000000..6a55a06688
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttached.bad.qml
@@ -0,0 +1,7 @@
+import qt.test 1.0
+import QtQml
+QtObject {
+ AttachedRequiredProperty.onIndexChanged: {
+ var s = "this is just to trigger the attachment"
+ }
+} // error: we don't support required attached properties
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttached.bad2.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttached.bad2.qml
new file mode 100644
index 0000000000..5ae49fd26a
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttached.bad2.qml
@@ -0,0 +1,5 @@
+import qt.test 1.0
+import QtQml
+QtObject {
+ AttachedRequiredProperty.index: -1
+} // error: we don't support required attached properties
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttachedIndirect.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttachedIndirect.qml
new file mode 100644
index 0000000000..5993845cef
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInAttachedIndirect.qml
@@ -0,0 +1,4 @@
+import qt.test 1.0
+RequiredPropertiesInAttached {
+ AttachedRequiredProperty.index: -1
+} // error: we don't support required attached properties
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroup.bad.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroup.bad.qml
new file mode 100644
index 0000000000..7a3364f056
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroup.bad.qml
@@ -0,0 +1,2 @@
+import qt.test 1.0
+GroupedRequiredProperty {} // error (required properties not set)
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroup.bad2.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroup.bad2.qml
new file mode 100644
index 0000000000..cde4278a71
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroup.bad2.qml
@@ -0,0 +1,5 @@
+import qt.test 1.0
+GroupedRequiredProperty {
+ group.index: 42
+ // error (group.name is not set)
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroupIndirect.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroupIndirect.qml
new file mode 100644
index 0000000000..71e66ff3a7
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertiesInGroupIndirect.qml
@@ -0,0 +1,5 @@
+import qt.test 1.0
+RequiredPropertiesInGroup {
+ group.index: 44
+ // should succeed as there's a binding on group.name in the base type
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponent.bad.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponent.bad.qml
new file mode 100644
index 0000000000..9954dd5813
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponent.bad.qml
@@ -0,0 +1,8 @@
+import QtQuick
+Item {
+ component RequiredPropertyType : QtObject {
+ required property int i
+ }
+
+ RequiredPropertyType {} // should fail
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponent.good.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponent.good.qml
new file mode 100644
index 0000000000..29506b7dd4
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponent.good.qml
@@ -0,0 +1,9 @@
+import QtQuick
+Item {
+ component RequiredPropertyType : QtObject {
+ required property int i
+ i: 42
+ }
+
+ RequiredPropertyType {} // should succeed
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithCppBase.bad.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithCppBase.bad.qml
new file mode 100644
index 0000000000..8a83d8979c
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithCppBase.bad.qml
@@ -0,0 +1,9 @@
+import QtQuick
+import qt.test 1.0
+Item {
+ component RequiredPropertyType : TwoRequiredProperties {
+ index: 0
+ // but name is unset
+ }
+ RequiredPropertyType {} // should fail (name is not initialized)
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithCppBase.good.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithCppBase.good.qml
new file mode 100644
index 0000000000..3e99554ffd
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithCppBase.good.qml
@@ -0,0 +1,9 @@
+import QtQuick
+import qt.test 1.0
+Item {
+ component RequiredPropertyType : TwoRequiredProperties {
+ index: 11
+ name: "foobar"
+ }
+ RequiredPropertyType {} // should succeed
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithIndirectCppBase.qml b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithIndirectCppBase.qml
new file mode 100644
index 0000000000..294a9f0172
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredPropertyInlineComponentWithIndirectCppBase.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import qt.test 1.0
+Item {
+ component RequiredPropertyType : RequiredTwoPropertiesSet { }
+ RequiredPropertyType {} // should succeed
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredSetLater.rerequired.qml b/tests/auto/qml/qqmlcomponent/data/requiredSetLater.rerequired.qml
new file mode 100644
index 0000000000..975f797a20
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredSetLater.rerequired.qml
@@ -0,0 +1,3 @@
+RerequiredNotSet {
+ i: 43
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredTwoProperties.qml b/tests/auto/qml/qqmlcomponent/data/requiredTwoProperties.qml
new file mode 100644
index 0000000000..10ce79de33
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredTwoProperties.qml
@@ -0,0 +1,5 @@
+import qt.test 1.0
+TwoRequiredProperties {
+ id: test
+ index: 1 // this property is fine
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/requiredTwoPropertiesDummy.qml b/tests/auto/qml/qqmlcomponent/data/requiredTwoPropertiesDummy.qml
new file mode 100644
index 0000000000..4e084fabd6
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/requiredTwoPropertiesDummy.qml
@@ -0,0 +1 @@
+RequiredTwoPropertiesSet {} // no error is expected
diff --git a/tests/auto/qml/qqmlcomponent/data/rerequiredSet.qml b/tests/auto/qml/qqmlcomponent/data/rerequiredSet.qml
new file mode 100644
index 0000000000..316d5b3f4b
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/rerequiredSet.qml
@@ -0,0 +1,4 @@
+RequiredSetInSameFile {
+ required i
+ i: 43
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/rerequiredSetLater.qml b/tests/auto/qml/qqmlcomponent/data/rerequiredSetLater.qml
new file mode 100644
index 0000000000..4e31431095
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/rerequiredSetLater.qml
@@ -0,0 +1,4 @@
+RerequiredNotSet {
+ required i
+ i: 43
+} // note: even though parent type is borked, this type is fine
diff --git a/tests/auto/qml/qqmlcomponent/data/shadowingFromCpp.qml b/tests/auto/qml/qqmlcomponent/data/shadowingFromCpp.qml
new file mode 100644
index 0000000000..01d9c27e03
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/shadowingFromCpp.qml
@@ -0,0 +1,5 @@
+import qt.test 1.0
+ShadowedRequiredProperty {
+ id: test
+ index: 1 // this property is fine
+}
diff --git a/tests/auto/qml/qqmlcomponent/data/shadowingFromQmlChild.qml b/tests/auto/qml/qqmlcomponent/data/shadowingFromQmlChild.qml
new file mode 100644
index 0000000000..111c5580b8
--- /dev/null
+++ b/tests/auto/qml/qqmlcomponent/data/shadowingFromQmlChild.qml
@@ -0,0 +1,6 @@
+import qt.test 1.0
+TwoRequiredProperties {
+ id: test
+ index: 1 // this property is fine
+ property string name: "overwritten and not required"
+}
diff --git a/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp b/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp
index a1ee52554b..decbe7dd22 100644
--- a/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp
+++ b/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp
@@ -35,13 +35,14 @@
#include <QtQuick>
#include <QtQuick/private/qquickrectangle_p.h>
#include <QtQuick/private/qquickmousearea_p.h>
+#include <QtQuick/private/qquickpalette_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
#include <private/qqmlguardedcontextdata_p.h>
#include <private/qv4qmlcontext_p.h>
#include <private/qv4scopedvalue_p.h>
#include <private/qv4qmlcontext_p.h>
#include <qcolor.h>
-#include "../../shared/util.h"
-#include "testhttpserver.h"
#include <algorithm>
@@ -98,7 +99,7 @@ class tst_qqmlcomponent : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlcomponent() { engine.setIncubationController(&ic); }
+ tst_qqmlcomponent() : QQmlDataTest(QT_QMLTEST_DATADIR) { engine.setIncubationController(&ic); }
private slots:
void null();
@@ -686,20 +687,117 @@ private:
QQuickItem *m_defaultProperty = nullptr;
};
+class TwoRequiredProperties : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int index READ index WRITE setIndex NOTIFY indexChanged REQUIRED)
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged REQUIRED)
+
+ int m_index = 0;
+ QString m_name;
+
+public:
+ TwoRequiredProperties(QObject *parent = nullptr) : QObject(parent) { }
+
+ int index() const { return m_index; }
+ QString name() const { return m_name; }
+
+ void setIndex(int x)
+ {
+ if (m_index == x)
+ return;
+ m_index = x;
+ Q_EMIT indexChanged();
+ }
+ void setName(const QString &x)
+ {
+ if (m_name == x)
+ return;
+ m_name = x;
+ Q_EMIT nameChanged();
+ }
+
+Q_SIGNALS:
+ void indexChanged();
+ void nameChanged();
+};
+
+class ShadowedRequiredProperty : public TwoRequiredProperties
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged /* REQUIRED */)
+ // Note: should be able to take methods from the base class
+};
+
+class AttachedRequiredProperties : public QObject
+{
+ Q_OBJECT
+ QML_ATTACHED(TwoRequiredProperties)
+public:
+ AttachedRequiredProperties(QObject *parent = nullptr) : QObject(parent) { }
+ static TwoRequiredProperties *qmlAttachedProperties(QObject *parent)
+ {
+ return new TwoRequiredProperties(parent);
+ }
+};
+
+class GroupedRequiredProperties : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(TwoRequiredProperties *group READ group)
+ TwoRequiredProperties m_group;
+
+public:
+ GroupedRequiredProperties(QObject *parent = nullptr) : QObject(parent) { }
+ TwoRequiredProperties *group() { return &m_group; }
+};
+
+class RequiredGroup : public QObject
+{
+ Q_OBJECT
+ // use QQuickPalette not to create an extra test-only
+ Q_PROPERTY(QQuickPalette *group READ group REQUIRED)
+ QQuickPalette m_group;
+
+public:
+ RequiredGroup(QObject *parent = nullptr) : QObject(parent) { }
+ QQuickPalette *group() { return &m_group; }
+};
+
void tst_qqmlcomponent::testRequiredProperties_data()
{
qmlRegisterType<RequiredDefaultCpp>("qt.test", 1, 0, "RequiredDefaultCpp");
+ qmlRegisterType<TwoRequiredProperties>("qt.test", 1, 0, "TwoRequiredProperties");
+ qmlRegisterType<ShadowedRequiredProperty>("qt.test", 1, 0, "ShadowedRequiredProperty");
+ qmlRegisterUncreatableType<AttachedRequiredProperties>(
+ "qt.test", 1, 0, "AttachedRequiredProperty",
+ tr("AttachedRequiredProperties is an attached property"));
+ qmlRegisterType<GroupedRequiredProperties>("qt.test", 1, 0, "GroupedRequiredProperty");
+ qmlRegisterType<RequiredGroup>("qt.test", 1, 0, "RequiredGroup");
+
QTest::addColumn<QUrl>("testFile");
QTest::addColumn<bool>("shouldSucceed");
QTest::addColumn<QString>("errorMsg");
QTest::addRow("requiredSetViaChainedAlias") << testFileUrl("requiredSetViaChainedAlias.qml") << true << "";
QTest::addRow("requiredNotSet") << testFileUrl("requiredNotSet.qml") << false << "Required property i was not initialized";
- QTest::addRow("requiredSetInSameFile") << testFileUrl("requiredSetInSameFile.qml") << true << "";
+ QTest::addRow("requiredSetInSameFile") << testFileUrl("RequiredSetInSameFile.qml") << true << "";
QTest::addRow("requiredSetViaAlias1") << testFileUrl("requiredSetViaAliasBeforeSameFile.qml") << true << "";
QTest::addRow("requiredSetViaAlias2") << testFileUrl("requiredSetViaAliasAfterSameFile.qml") << true << "";
QTest::addRow("requiredSetViaAlias3") << testFileUrl("requiredSetViaAliasParentFile.qml") << true << "";
+ QTest::addRow("requiredSetInBase") << testFileUrl("requiredChildOfGoodBase.qml") << true << "";
+ QTest::addRow("requiredNotSetInBase") << testFileUrl("requiredChildOfBadBase.qml") << false << "Required property i was not initialized";
+ QTest::addRow("rerequiredSet") << testFileUrl("rerequiredSet.qml") << true << "";
+ QTest::addRow("rerequiredNotSet") << testFileUrl("RerequiredNotSet.qml") << false
+ << "Required property i was not initialized";
+ QTest::addRow("requiredSetLater(rerequired)")
+ << testFileUrl("requiredSetLater.rerequired.qml") << true << "";
+ QTest::addRow("rerequiredSetLater") << testFileUrl("rerequiredSetLater.qml") << true << "";
QTest::addRow("shadowing") << testFileUrl("shadowing.qml") << false << "Required property i was not initialized";
+ QTest::addRow("shadowing (C++)") << testFileUrl("shadowingFromCpp.qml") << false
+ << "Required property name was not initialized";
+ QTest::addRow("shadowing (C++ indirect)") << testFileUrl("shadowingFromQmlChild.qml") << false
+ << "Required property name was not initialized";
QTest::addRow("setLater") << testFileUrl("requiredSetLater.qml") << true << "";
QTest::addRow("setViaAliasToSubcomponent") << testFileUrl("setViaAliasToSubcomponent.qml") << true << "";
QTest::addRow("aliasToSubcomponentNotSet") << testFileUrl("aliasToSubcomponentNotSet.qml") << false << "It can be set via the alias property i_alias";
@@ -707,9 +805,55 @@ void tst_qqmlcomponent::testRequiredProperties_data()
QTest::addRow("required default not set") << testFileUrl("requiredDefault.2.qml") << false << "Required property requiredDefault was not initialized";
QTest::addRow("required default set (C++)") << testFileUrl("requiredDefault.3.qml") << true << "";
QTest::addRow("required default not set (C++)") << testFileUrl("requiredDefault.4.qml") << false << "Required property defaultProperty was not initialized";
+ // QTBUG-96200:
+ QTest::addRow("required two set one (C++)") << testFileUrl("requiredTwoProperties.qml") << false
+ << "Required property name was not initialized";
+ QTest::addRow("required two set two (C++)")
+ << testFileUrl("RequiredTwoPropertiesSet.qml") << true << "";
+ QTest::addRow("required two set two (C++ indirect)")
+ << testFileUrl("requiredTwoPropertiesDummy.qml") << true << "";
+
+ QTest::addRow("required set (inline component)")
+ << testFileUrl("requiredPropertyInlineComponent.good.qml") << true << "";
+ QTest::addRow("required not set (inline component)")
+ << testFileUrl("requiredPropertyInlineComponent.bad.qml") << false
+ << "Required property i was not initialized";
+ QTest::addRow("required set (inline component, C++)")
+ << testFileUrl("requiredPropertyInlineComponentWithCppBase.good.qml") << true << "";
+ QTest::addRow("required not set (inline component, C++)")
+ << testFileUrl("requiredPropertyInlineComponentWithCppBase.bad.qml") << false
+ << "Required property name was not initialized";
+ QTest::addRow("required set (inline component, C++ indirect)")
+ << testFileUrl("requiredPropertyInlineComponentWithIndirectCppBase.qml") << true << "";
+ QTest::addRow("required not set (attached)")
+ << testFileUrl("requiredPropertiesInAttached.bad.qml") << false
+ << "Attached property has required properties. This is not supported";
+ QTest::addRow("required two set one (attached)")
+ << testFileUrl("requiredPropertiesInAttached.bad2.qml") << false
+ << "Attached property has required properties. This is not supported";
+ QTest::addRow("required two set two (attached)")
+ << testFileUrl("RequiredPropertiesInAttached.qml") << false
+ << "Attached property has required properties. This is not supported";
+ QTest::addRow("required two set two (attached indirect)")
+ << testFileUrl("requiredPropertiesInAttachedIndirect.qml") << false
+ << "Attached property has required properties. This is not supported";
+ QTest::addRow("required itself not set (group)")
+ << testFileUrl("requiredGroup.bad.qml") << false
+ << "Required property group was not initialized";
+ QTest::addRow("required itself set (group)")
+ << testFileUrl("requiredGroup.good.qml") << true << "";
+ QTest::addRow("required not set (group)")
+ << testFileUrl("requiredPropertiesInGroup.bad.qml") << false
+ << "Required property index was not initialized";
+ QTest::addRow("required two set one (group)")
+ << testFileUrl("requiredPropertiesInGroup.bad2.qml") << false
+ << "Required property name was not initialized";
+ QTest::addRow("required two set two (group)")
+ << testFileUrl("RequiredPropertiesInGroup.qml") << true << "";
+ QTest::addRow("required two set two (group indirect)")
+ << testFileUrl("requiredPropertiesInGroupIndirect.qml") << true << "";
}
-
void tst_qqmlcomponent::testRequiredProperties()
{
QQmlEngine eng;
@@ -719,10 +863,18 @@ void tst_qqmlcomponent::testRequiredProperties()
QQmlComponent comp(&eng);
comp.loadUrl(testFile);
QScopedObjPointer obj {comp.create()};
+ QEXPECT_FAIL("required not set (group)",
+ "We fail to recognize required sub-properties inside a group property when that "
+ "group property is unused (QTBUG-96544)",
+ Abort);
+ QEXPECT_FAIL("required two set one (group)",
+ "We fail to recognized required sub-properties inside a group property, even when "
+ "that group property is used (QTBUG-96544)",
+ Abort);
if (shouldSucceed)
QVERIFY(obj);
else {
- QVERIFY(!obj);
+ QVERIFY2(!obj, "The object is valid when it shouldn't be");
QFETCH(QString, errorMsg);
QVERIFY(comp.errorString().contains(errorMsg));
}
diff --git a/tests/auto/qml/qqmlconnections/CMakeLists.txt b/tests/auto/qml/qqmlconnections/CMakeLists.txt
index fef16f58f8..3761017b60 100644
--- a/tests/auto/qml/qqmlconnections/CMakeLists.txt
+++ b/tests/auto/qml/qqmlconnections/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlconnections
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlconnections.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlconnections/data/invalidTarget.qml b/tests/auto/qml/qqmlconnections/data/invalidTarget.qml
new file mode 100644
index 0000000000..23599649ec
--- /dev/null
+++ b/tests/auto/qml/qqmlconnections/data/invalidTarget.qml
@@ -0,0 +1,31 @@
+import QtQml
+
+QtObject {
+ id: root
+ objectName: button.objectName
+
+ property QtObject b: QtObject {
+ objectName: "button"
+ id: button
+ signal clicked
+ }
+
+ property Connections c: Connections {
+ id: connections
+ target: null
+ function onClicked() { button.destroy(); }
+ }
+
+ property Timer t: Timer {
+ interval: 10
+ running: true
+ onTriggered: {
+ root.objectName = connections.target.objectName
+ }
+ }
+
+ Component.onCompleted: {
+ connections.target = button;
+ button.clicked()
+ }
+}
diff --git a/tests/auto/qml/qqmlconnections/tst_qqmlconnections.cpp b/tests/auto/qml/qqmlconnections/tst_qqmlconnections.cpp
index 31f000fab6..a28a8dd9dd 100644
--- a/tests/auto/qml/qqmlconnections/tst_qqmlconnections.cpp
+++ b/tests/auto/qml/qqmlconnections/tst_qqmlconnections.cpp
@@ -30,8 +30,8 @@
#include <QtQml/qqmlcomponent.h>
#include <private/qqmlconnections_p.h>
#include <private/qquickitem_p.h>
-#include "../../shared/util.h"
#include <QtQml/qqmlscriptstring.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlconnections : public QQmlDataTest
{
@@ -78,6 +78,7 @@ private slots:
void noAcceleratedGlobalLookup();
void bindToPropertyWithUnderscoreChangeHandler();
+ void invalidTarget();
private:
QQmlEngine engine;
@@ -85,6 +86,7 @@ private:
};
tst_qqmlconnections::tst_qqmlconnections()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -489,6 +491,25 @@ void tst_qqmlconnections::bindToPropertyWithUnderscoreChangeHandler()
QVERIFY(root->property("success").toBool());
}
+void tst_qqmlconnections::invalidTarget()
+{
+ QQmlEngine engine;
+ const QUrl url = testFileUrl("invalidTarget.qml");
+ QQmlComponent component(&engine, url);
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+
+ QScopedPointer<QObject> root {component.create()};
+ QVERIFY(root);
+ QCOMPARE(root->objectName(), QStringLiteral("button"));
+
+ QTest::ignoreMessage(
+ QtWarningMsg,
+ qPrintable(
+ url.toString()
+ + QLatin1String(":5:5: TypeError: Cannot read property 'objectName' of null")));
+ QTRY_VERIFY(root->objectName().isEmpty());
+}
+
QTEST_MAIN(tst_qqmlconnections)
#include "tst_qqmlconnections.moc"
diff --git a/tests/auto/qml/qqmlconsole/CMakeLists.txt b/tests/auto/qml/qqmlconsole/CMakeLists.txt
index 5e98ed2f31..5096503c15 100644
--- a/tests/auto/qml/qqmlconsole/CMakeLists.txt
+++ b/tests/auto/qml/qqmlconsole/CMakeLists.txt
@@ -12,17 +12,19 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlconsole
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlconsole.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Qml
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlconsole)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlconsole/data/assert.qml b/tests/auto/qml/qqmlconsole/data/assert.qml
index dd580e2a72..9687437c48 100644
--- a/tests/auto/qml/qqmlconsole/data/assert.qml
+++ b/tests/auto/qml/qqmlconsole/data/assert.qml
@@ -29,21 +29,22 @@
import QtQuick 2.0
QtObject {
- property int q:1
+ property int q: 1
+
function assertFail() {
- console.assert(0, "This will fail too")
+ console.assert(0, "This will fail too");
}
Component.onCompleted: {
- var x = 12;
+ const x = 12;
console.assert(x == 12, "This will pass");
try {
- console.assert(x < 12, "This will fail");
+ console.assert(x < 12, "This will fail");
} catch (e) {
console.log(e);
}
- console.assert("x < 12", "This will pass too")
+ console.assert("x < 12", "This will pass too");
assertFail();
- console.assert(1)
+ console.assert(1);
}
}
diff --git a/tests/auto/qml/qqmlconsole/data/categorized_logging.qml b/tests/auto/qml/qqmlconsole/data/categorized_logging.qml
index d593f0dfa1..6d471e7f80 100644
--- a/tests/auto/qml/qqmlconsole/data/categorized_logging.qml
+++ b/tests/auto/qml/qqmlconsole/data/categorized_logging.qml
@@ -40,7 +40,7 @@
import QtQuick 2.12
Item {
- id:root
+ id: root
LoggingCategory {
id: testCategory
@@ -69,8 +69,11 @@ Item {
console.warn(testCategoryStartingFromWarning, "console.warn");
console.error(testCategoryStartingFromWarning, "console.error");
- testCategory.name = "qt.test2";
- testCategory.defaultLogLevel = LoggingCategory.Debug;
+ testCategory.name = "qt.test"; // should be silent
+ testCategoryStartingFromWarning.name = "qt.test.other"; // should issue a warning
+
+ testCategory.defaultLogLevel = LoggingCategory.Debug; // should be silent
+ testCategoryStartingFromWarning.defaultLogLevel = LoggingCategory.Debug; // should issue a warning
console.error(emptyCategory, "console.error");
}
diff --git a/tests/auto/qml/qqmlconsole/data/exception.qml b/tests/auto/qml/qqmlconsole/data/exception.qml
index 63afd18828..b9b83525e8 100644
--- a/tests/auto/qml/qqmlconsole/data/exception.qml
+++ b/tests/auto/qml/qqmlconsole/data/exception.qml
@@ -30,12 +30,12 @@ import QtQuick 2.0
QtObject {
function exceptionFail() {
- console.exception("Exception 2")
+ console.exception("Exception 2");
}
Component.onCompleted: {
try {
- console.exception("Exception 1")
+ console.exception("Exception 1");
} catch (e) {
console.log(e);
}
diff --git a/tests/auto/qml/qqmlconsole/data/logging.qml b/tests/auto/qml/qqmlconsole/data/logging.qml
index f5eaeb442a..ac3884bc8e 100644
--- a/tests/auto/qml/qqmlconsole/data/logging.qml
+++ b/tests/auto/qml/qqmlconsole/data/logging.qml
@@ -30,7 +30,8 @@
import QtQuick 2.0
QtObject {
- id:root
+ id: root
+
required property var customObject
required property var stringListProperty
@@ -49,14 +50,14 @@ QtObject {
consoleCount();
consoleCount();
- var a = [1, 2];
- var b = {a: "hello", d: 1 };
- b.toString = function() { return JSON.stringify(b) }
- var c
- var d = 12;
- var e = function() { return 5;};
- var f = true;
- var g = {toString: function() { throw new Error('toString'); }};
+ const a = [1, 2];
+ const b = { a: "hello", d: 1 };
+ b.toString = function() { return JSON.stringify(b); }
+ let c;
+ const d = 12;
+ const e = function() { return 5; };
+ const f = true;
+ const g = { toString: function() { throw new Error('toString'); } };
console.log(a);
console.log(b);
@@ -79,6 +80,6 @@ QtObject {
return;
}
- throw ("console.log(exception) should have raised an exception");
+ throw "console.log(exception) should have raised an exception";
}
}
diff --git a/tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp b/tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp
index 666c97a07f..019be5f16a 100644
--- a/tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp
+++ b/tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp
@@ -31,13 +31,13 @@
#include <QQmlComponent>
#include <QQmlContext>
#include <QLoggingCategory>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlconsole : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlconsole() {}
+ tst_qqmlconsole() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void logging();
@@ -133,18 +133,27 @@ void tst_qqmlconsole::categorized_logging()
QVERIFY(messageHandler.messages().contains("qt.test.warning: console.error"));
QString emptyCategory = "default: " + QString::fromLatin1("%1:%2:%3: ").arg(testUrl.toString()).arg(56).arg(5) +
- "QML LoggingCategory: Declaring the name of the LoggingCategory is mandatory and cannot be changed later !";
+ "QML LoggingCategory: Declaring the name of a LoggingCategory is mandatory and cannot be changed later";
QVERIFY(messageHandler.messages().contains(emptyCategory));
- QString changedCategory = "default: " + QString::fromLatin1("%1:%2:%3: ").arg(testUrl.toString()).arg(45).arg(5) +
- "QML LoggingCategory: The name of a LoggingCategory cannot be changed after the Item is created";
+
+ QString notChangedCategory = "default: " + QString::fromLatin1("%1:%2:%3: ").arg(testUrl.toString()).arg(45).arg(5) +
+ "QML LoggingCategory: The name of a LoggingCategory cannot be changed after the component is completed";
+ QVERIFY(!messageHandler.messages().contains(notChangedCategory));
+ QString changedCategory = "default: " + QString::fromLatin1("%1:%2:%3: ").arg(testUrl.toString()).arg(50).arg(5) +
+ "QML LoggingCategory: The name of a LoggingCategory cannot be changed after the component is completed";
QVERIFY(messageHandler.messages().contains(changedCategory));
- QString changedDefaultLogLevel = "default: " + QString::fromLatin1("%1:%2:%3: ").arg(testUrl.toString()).arg(45).arg(5) +
- "QML LoggingCategory: The defaultLogLevel of a LoggingCategory cannot be changed after the Item is created";
+
+ QString notChangedDefaultLogLevel = "default: " + QString::fromLatin1("%1:%2:%3: ").arg(testUrl.toString()).arg(45).arg(5) +
+ "QML LoggingCategory: The defaultLogLevel of a LoggingCategory cannot be changed after the component is completed";
+ QVERIFY(!messageHandler.messages().contains(notChangedDefaultLogLevel));
+ QString changedDefaultLogLevel = "default: " + QString::fromLatin1("%1:%2:%3: ").arg(testUrl.toString()).arg(50).arg(5) +
+ "QML LoggingCategory: The defaultLogLevel of a LoggingCategory cannot be changed after the component is completed";
QVERIFY(messageHandler.messages().contains(changedDefaultLogLevel));
- QString useEmptyCategory = "default: " + QString::fromLatin1("%1:%2: ").arg(testUrl.toString()).arg(75) +
+
+ QString useEmptyCategory = "default: " + QString::fromLatin1("%1:%2: ").arg(testUrl.toString()).arg(78) +
"Error: A QmlLoggingCatgory was provided without a valid name";
QVERIFY(messageHandler.messages().contains(useEmptyCategory));
@@ -190,13 +199,13 @@ void tst_qqmlconsole::testAssert()
QString assert1 = "This will fail\n"
+ QString::fromLatin1("expression for onCompleted (%1:%2)")
.arg(testUrl.toString())
- .arg(41);
+ .arg(42);
QString assert2 = "This will fail too\n"
- + QString::fromLatin1("assertFail (%1:%2)\n").arg(testUrl.toString()).arg(34)
+ + QString::fromLatin1("assertFail (%1:%2)\n").arg(testUrl.toString()).arg(35)
+ QString::fromLatin1("expression for onCompleted (%1:%2)")
.arg(testUrl.toString())
- .arg(46);
+ .arg(47);
QTest::ignoreMessage(QtCriticalMsg, qPrintable(assert1));
QTest::ignoreMessage(QtCriticalMsg, qPrintable(assert2));
diff --git a/tests/auto/qml/qqmlcontext/CMakeLists.txt b/tests/auto/qml/qqmlcontext/CMakeLists.txt
index ce07e8c785..5b2c4e7a5b 100644
--- a/tests/auto/qml/qqmlcontext/CMakeLists.txt
+++ b/tests/auto/qml/qqmlcontext/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlcontext
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlcontext.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp b/tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp
index 4a850541a6..e586604862 100644
--- a/tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp
+++ b/tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp
@@ -37,13 +37,13 @@
#include <private/qqmlguardedcontextdata_p.h>
#include <private/qv4qmlcontext_p.h>
#include <private/qv4object_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlcontext : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlcontext() {}
+ tst_qqmlcontext() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void baseUrl();
diff --git a/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt b/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
index 9020d9e892..3cbb4540e0 100644
--- a/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
+++ b/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmldelegatemodel
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmldelegatemodel.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qqmldelegatemodel
Qt::QmlModelsPrivate
Qt::QmlPrivate
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml b/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml
new file mode 100644
index 0000000000..206133bb39
--- /dev/null
+++ b/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml
@@ -0,0 +1,11 @@
+import QtQuick 2.8
+
+ListView {
+ id: root
+ width: 200
+ height: 200
+
+ delegate: Text {
+ text: display
+ }
+}
diff --git a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
index 2571dadc79..f10c89872f 100644
--- a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
+++ b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
@@ -27,12 +27,14 @@
****************************************************************************/
#include <QtTest/qtest.h>
+#include <QtCore/QConcatenateTablesProxyModel>
+#include <QtGui/QStandardItemModel>
#include <QtQml/qqmlcomponent.h>
#include <QtQmlModels/private/qqmldelegatemodel_p.h>
#include <QtQuick/qquickview.h>
#include <QtQuick/qquickitem.h>
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtTest/QSignalSpy>
class tst_QQmlDelegateModel : public QQmlDataTest
{
@@ -47,6 +49,7 @@ private slots:
void qtbug_86017();
void filterOnGroup_removeWhenCompleted();
void contextAccessedByHandler();
+ void redrawUponColumnChange();
};
class AbstractItemModel : public QAbstractItemModel
@@ -101,6 +104,7 @@ private:
};
tst_QQmlDelegateModel::tst_QQmlDelegateModel()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qmlRegisterType<AbstractItemModel>("Test", 1, 0, "AbstractItemModel");
}
@@ -175,6 +179,30 @@ void tst_QQmlDelegateModel::contextAccessedByHandler()
QVERIFY(root->property("works").toBool());
}
+void tst_QQmlDelegateModel::redrawUponColumnChange()
+{
+ QStandardItemModel m1;
+ m1.appendRow({
+ new QStandardItem("Banana"),
+ new QStandardItem("Coconut"),
+ });
+
+ QQuickView view(testFileUrl("redrawUponColumnChange.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ QQuickItem *root = view.rootObject();
+ root->setProperty("model", QVariant::fromValue<QObject *>(&m1));
+
+ QObject *item = root->property("currentItem").value<QObject *>();
+ QVERIFY(item);
+ QCOMPARE(item->property("text").toString(), "Banana");
+
+ QVERIFY(root);
+ m1.removeColumn(0);
+
+ QCOMPARE(item->property("text").toString(), "Coconut");
+}
+
QTEST_MAIN(tst_QQmlDelegateModel)
#include "tst_qqmldelegatemodel.moc"
diff --git a/tests/auto/qml/qqmldirparser/CMakeLists.txt b/tests/auto/qml/qqmldirparser/CMakeLists.txt
index 255cc75c6a..f8e3e36ef7 100644
--- a/tests/auto/qml/qqmldirparser/CMakeLists.txt
+++ b/tests/auto/qml/qqmldirparser/CMakeLists.txt
@@ -12,14 +12,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmldirparser
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmldirparser.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp b/tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp
index 8f0c58653b..64658e8546 100644
--- a/tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp
+++ b/tests/auto/qml/qqmldirparser/tst_qqmldirparser.cpp
@@ -26,8 +26,6 @@
**
****************************************************************************/
-#include "../../shared/util.h"
-
#include <qtest.h>
#include <QObject>
#include <QQmlEngine>
@@ -35,6 +33,7 @@
#include <private/qqmljsdiagnosticmessage_p.h>
#include <private/qqmldirparser_p.h>
#include <QDebug>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <algorithm>
@@ -52,6 +51,7 @@ private slots:
};
tst_qqmldirparser::tst_qqmldirparser()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/qml/qqmlecmascript/BLACKLIST b/tests/auto/qml/qqmlecmascript/BLACKLIST
deleted file mode 100644
index bd25566eef..0000000000
--- a/tests/auto/qml/qqmlecmascript/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[gcCrashRegressionTest]
-macos arm
diff --git a/tests/auto/qml/qqmlecmascript/CMakeLists.txt b/tests/auto/qml/qqmlecmascript/CMakeLists.txt
index 5c5bd528ed..70f010c082 100644
--- a/tests/auto/qml/qqmlecmascript/CMakeLists.txt
+++ b/tests/auto/qml/qqmlecmascript/CMakeLists.txt
@@ -12,18 +12,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlecmascript
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
testtypes.cpp testtypes.h
tst_qqmlecmascript.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlecmascript/data/Lib.js b/tests/auto/qml/qqmlecmascript/data/Lib.js
new file mode 100644
index 0000000000..67d4f7f56d
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/Lib.js
@@ -0,0 +1,3 @@
+.pragma library
+
+function f() { return 42 }
diff --git a/tests/auto/qml/qqmlecmascript/data/PreNamed.qml b/tests/auto/qml/qqmlecmascript/data/PreNamed.qml
new file mode 100644
index 0000000000..dc991e674f
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/PreNamed.qml
@@ -0,0 +1,11 @@
+import QtQml
+
+QtObject {
+ property QtObject other: QtObject {
+ objectName: "original"
+ }
+ objectName: other.objectName
+ function updateOriginal() {
+ other.objectName = "updated"
+ }
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/aliasPropertyToIC.qml b/tests/auto/qml/qqmlecmascript/data/aliasPropertyToIC.qml
new file mode 100644
index 0000000000..17116bb091
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/aliasPropertyToIC.qml
@@ -0,0 +1,11 @@
+import QtQml
+
+
+QtObject {
+ id: root
+
+ component Test : QtObject {}
+
+ property alias myalias: other
+ property var direct: Test { id: other }
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/checkDateTime-nonstandardFormat2.qml b/tests/auto/qml/qqmlecmascript/data/checkDateTime-nonstandardFormat2.qml
new file mode 100644
index 0000000000..3fd3c05024
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/checkDateTime-nonstandardFormat2.qml
@@ -0,0 +1,10 @@
+import Qt.test 1.0
+import QtQml 2.15
+
+
+MyTypeObject {
+ Component.onCompleted: {
+ dateTimeProperty = new Date("Sun, 25 Mar 2018 11:10:49 GMT")
+ boolProperty = !Number.isNaN(dateTimeProperty)
+ }
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/enums.1.qml b/tests/auto/qml/qqmlecmascript/data/enums.1.qml
index b9295c5c89..379a6efc8e 100644
--- a/tests/auto/qml/qqmlecmascript/data/enums.1.qml
+++ b/tests/auto/qml/qqmlecmascript/data/enums.1.qml
@@ -35,4 +35,7 @@ MyQmlObject {
// Enum values defined both in a type and a related type
property int l: MyQmlObject.MultiplyDefined
+
+ // Enum arithmetic
+ property int m: MyQmlObject.EnumValue2 | MyQmlObject.EnumValue3
}
diff --git a/tests/auto/qml/qqmlecmascript/data/functionAsDefaultArgument.qml b/tests/auto/qml/qqmlecmascript/data/functionAsDefaultArgument.qml
new file mode 100644
index 0000000000..9f576d1af8
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/functionAsDefaultArgument.qml
@@ -0,0 +1,8 @@
+import QtQml 2.15
+
+QtObject {
+ id: root
+
+ function f(inner=function(){ root.objectName = "didRun" } ){ inner() }
+ Component.onCompleted: f()
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/generatorCallsGC.qml b/tests/auto/qml/qqmlecmascript/data/generatorCallsGC.qml
new file mode 100644
index 0000000000..7fe366cac8
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/generatorCallsGC.qml
@@ -0,0 +1,13 @@
+import QtQml 2.15
+
+QtObject {
+ function test_generator_gc() {
+ ((function*() { gc() })()).next();
+ ((function*() { gc() })()).next();
+ ((function*() { gc() })()).next();
+ ((function*() { gc() })()).next();
+ }
+
+ Component.onCompleted: () => test_generator_gc()
+
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/icUsingJSLib.qml b/tests/auto/qml/qqmlecmascript/data/icUsingJSLib.qml
new file mode 100644
index 0000000000..507027e101
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/icUsingJSLib.qml
@@ -0,0 +1,12 @@
+import QtQml
+
+import "Lib.js" as Lib
+
+QtObject {
+ component C : QtObject {
+ property int num: Lib.f()
+ }
+
+ property var test: C { id: c }
+ property alias num: c.num
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/internalClassParentGc.js b/tests/auto/qml/qqmlecmascript/data/internalClassParentGc.js
new file mode 100644
index 0000000000..f51ab662ab
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/internalClassParentGc.js
@@ -0,0 +1,29 @@
+function init() {
+ Array.prototype.doPush = Array.prototype.push
+}
+
+function nasty() {
+ var sc_Vector = Array;
+ var push = sc_Vector.prototype.doPush;
+
+ // Change the memberData to hold something nasty on the current internalClass
+ sc_Vector.prototype.doPush = 5;
+
+ // Trigger a re-allocation of memberData
+ for (var i = 0; i < 256; ++i)
+ sc_Vector.prototype[i + "string"] = function() { return 98; }
+
+ // Change the (new) memberData back, to hold our doPush function again.
+ // This should propagate a protoId change all the way up to the lookup.
+ sc_Vector.prototype.doPush = push;
+}
+
+function func() {
+ var b = [];
+
+ // This becomes a lookup internally, which stores protoId and a pointer
+ // into the memberData. It should get invalidated when memberData is re-allocated.
+ b.doPush(3);
+
+ return b;
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/internalClassParentGc.qml b/tests/auto/qml/qqmlecmascript/data/internalClassParentGc.qml
new file mode 100644
index 0000000000..e313770bf5
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/internalClassParentGc.qml
@@ -0,0 +1,13 @@
+import QtQml
+
+import "internalClassParentGc.js" as Foo
+
+QtObject {
+ Component.onCompleted: {
+ gc();
+ Foo.init();
+ Foo.func();
+ Foo.nasty();
+ objectName = Foo.func()[0];
+ }
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/methodTypeMismatch.qml b/tests/auto/qml/qqmlecmascript/data/methodTypeMismatch.qml
new file mode 100644
index 0000000000..fdf5f4ea11
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/methodTypeMismatch.qml
@@ -0,0 +1,25 @@
+import QtQuick 2.0
+
+Item {
+ id: self
+ property font myFont
+ property int notMyFont
+
+ property var object
+
+ function callWithFont() {
+ object.method_gadget(myFont) // should be fine
+ }
+ function callWithInt() {
+ object.method_gadget(123)
+ }
+ function callWithInt2() {
+ object.method_gadget(notMyFont)
+ }
+ function callWithNull() {
+ object.method_gadget(null)
+ }
+ function callWithAllowedNull() {
+ object.method_qobject(null)
+ }
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/qpropertyBindingReplacement.qml b/tests/auto/qml/qqmlecmascript/data/qpropertyBindingReplacement.qml
new file mode 100644
index 0000000000..478a88678b
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/qpropertyBindingReplacement.qml
@@ -0,0 +1,6 @@
+import QtQml
+
+PreNamed {
+ objectName: "overwritten"
+ Component.onCompleted: updateOriginal()
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/readOnlyBindable.qml b/tests/auto/qml/qqmlecmascript/data/readOnlyBindable.qml
new file mode 100644
index 0000000000..116036c9ff
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/readOnlyBindable.qml
@@ -0,0 +1,7 @@
+import Qt.test
+import QtQuick
+
+ReadOnlyBindable {
+ property int v: 12
+ x: v
+}
diff --git a/tests/auto/qml/qqmlecmascript/testtypes.cpp b/tests/auto/qml/qqmlecmascript/testtypes.cpp
index 87d8ed0c1f..cd83702d3a 100644
--- a/tests/auto/qml/qqmlecmascript/testtypes.cpp
+++ b/tests/auto/qml/qqmlecmascript/testtypes.cpp
@@ -560,6 +560,7 @@ void registerTypes()
qmlRegisterType<Receiver>("Qt.test", 1,0, "Receiver");
qmlRegisterType<Sender>("Qt.test", 1,0, "Sender");
+ qmlRegisterTypesAndRevisions<ReadOnlyBindable>("Qt.test", 1);
}
#include "testtypes.moc"
diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h
index acc066fddd..a3df73972e 100644
--- a/tests/auto/qml/qqmlecmascript/testtypes.h
+++ b/tests/auto/qml/qqmlecmascript/testtypes.h
@@ -833,12 +833,38 @@ public:
Q_INVOKABLE void method_unknown(NonRegisteredType) { invoke(28); }
+ Q_PROPERTY(QFont someFont READ someFont WRITE setSomeFont NOTIFY someFontChanged);
+ QFont someFont() { return m_someFont; }
+ void setSomeFont(const QFont &f)
+ {
+ if (f == m_someFont)
+ return;
+ m_someFont = f;
+ emit someFontChanged();
+ }
+ Q_INVOKABLE void method_gadget(QFont f)
+ {
+ invoke(40);
+ m_actuals << f;
+ }
+ Q_INVOKABLE void method_qobject(QObject *o)
+ {
+ invoke(41);
+ m_actuals << QVariant::fromValue(o);
+ }
+
private:
friend class MyInvokableBaseObject;
void invoke(int idx) { if (m_invoked != -1) m_invokedError = true; m_invoked = idx;}
int m_invoked;
bool m_invokedError;
QVariantList m_actuals;
+
+ QFont m_someFont;
+
+public:
+Q_SIGNALS:
+ void someFontChanged();
};
MyInvokableBaseObject::~MyInvokableBaseObject() {}
@@ -1847,6 +1873,25 @@ public slots:
int slot1(int i, int j, int k) {return i+j+k;}
};
+class ReadOnlyBindable : public QObject
+{
+ Q_OBJECT
+ QML_ELEMENT
+ Q_PROPERTY(int x READ x WRITE setX BINDABLE bindableX)
+ Q_OBJECT_BINDABLE_PROPERTY(ReadOnlyBindable, int, _xProp)
+
+public:
+ ReadOnlyBindable(QObject *parent = nullptr)
+ : QObject(parent)
+ {
+ setX(7);
+ }
+
+ int x() const { return _xProp.value(); }
+ void setX(int x) { _xProp.setValue(x); }
+ QBindable<int> bindableX() const { return &_xProp; }
+};
+
void registerTypes();
#endif // TESTTYPES_H
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
index d8d90b1aff..f47c7132a2 100644
--- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
+++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
@@ -39,8 +39,6 @@
#include <private/qqmlvmemetaobject_p.h>
#include <private/qv4qmlcontext_p.h>
#include "testtypes.h"
-#include "testhttpserver.h"
-#include "../../shared/util.h"
#include <private/qv4functionobject_p.h>
#include <private/qv4scopedvalue_p.h>
#include <private/qv4jscall_p.h>
@@ -54,6 +52,8 @@
#include <private/qqmlabstractbinding_p.h>
#include <private/qqmlvaluetypeproxybinding_p.h>
#include <QtCore/private/qproperty_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
#ifdef Q_CC_MSVC
#define NO_INLINE __declspec(noinline)
@@ -72,6 +72,9 @@ class tst_qqmlecmascript : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qqmlecmascript();
+
private slots:
void initTestCase() override;
void arrayIncludesValueType();
@@ -112,6 +115,7 @@ private slots:
void outerBindingOverridesInnerBinding();
void aliasPropertyAndBinding();
void aliasPropertyReset();
+ void aliasPropertyToIC();
void nonExistentAttachedObject();
void scope();
void importScope();
@@ -244,6 +248,8 @@ private slots:
void function();
void topLevelGeneratorFunction();
void generatorCrashNewProperty();
+ void generatorCallsGC();
+ void noYieldInInnerFunction();
void qtbug_10696();
void qtbug_11606();
void qtbug_11600();
@@ -305,6 +311,7 @@ private slots:
void replaceBinding();
void bindingBoundFunctions();
void qpropertyAndQtBinding();
+ void qpropertyBindingReplacement();
void deleteRootObjectInCreation();
void onDestruction();
void onDestructionViaGC();
@@ -410,11 +417,21 @@ private slots:
void frozenQObject();
void constPointer();
+ void icUsingJSLib();
+
void optionalChainEval();
void optionalChainDelete();
void optionalChainNull();
void asCast();
+ void functionNameInFunctionScope();
+ void functionAsDefaultArgument();
+
+ void internalClassParentGc();
+ void methodTypeMismatch();
+
+ void doNotCrashOnReadOnlyBindable();
+
private:
// static void propertyVarWeakRefCallback(v8::Persistent<v8::Value> object, void* parameter);
static void verifyContextLifetime(const QQmlRefPointer<QQmlContextData> &ctxt);
@@ -439,6 +456,11 @@ static void gc(QQmlEngine &engine)
}
+tst_qqmlecmascript::tst_qqmlecmascript()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qqmlecmascript::initTestCase()
{
QQmlDataTest::initTestCase();
@@ -710,6 +732,9 @@ void tst_qqmlecmascript::checkDateTime_data()
QTest::newRow("nonstandard-format")
<< testFileUrl("checkDateTime-nonstandardFormat.qml")
<< QDateTime::fromString("1991-08-25 20:57:08 GMT+0000", "yyyy-MM-dd hh:mm:ss t");
+ QTest::newRow("nonstandard-format2")
+ << testFileUrl("checkDateTime-nonstandardFormat2.qml")
+ << QDateTime::fromString("Sun, 25 Mar 2018 11:10:49 GMT", "ddd, d MMM yyyy hh:mm:ss t");
}
void tst_qqmlecmascript::checkDateTime()
@@ -1375,6 +1400,7 @@ void tst_qqmlecmascript::enums()
QCOMPARE(object->property("j").toInt(), 19);
QCOMPARE(object->property("k").toInt(), 42);
QCOMPARE(object->property("l").toInt(), 333);
+ QCOMPARE(object->property("m").toInt(), 3);
}
// Non-existent enums
{
@@ -1815,6 +1841,24 @@ void tst_qqmlecmascript::aliasPropertyReset()
QCOMPARE(object->property("aliasedIntIsUndefined"), QVariant(false));
}
+void tst_qqmlecmascript::aliasPropertyToIC()
+{
+ QQmlEngine engine;
+ std::unique_ptr<QObject> root;
+
+ // test that a manual write (of undefined) to a resettable aliased property succeeds
+ QQmlComponent c(&engine, testFileUrl("aliasPropertyToIC.qml"));
+ root.reset(c.create());
+ QVERIFY(root);
+ auto mo = root->metaObject();
+ int aliasIndex = mo->indexOfProperty("myalias");
+ auto prop = mo->property(aliasIndex);
+ QVERIFY(prop.isAlias());
+ auto fromAlias = prop.read(root.get()).value<QObject *>();
+ auto direct = root->property("direct").value<QObject *>();
+ QCOMPARE(fromAlias, direct);
+}
+
void tst_qqmlecmascript::componentCreation_data()
{
QTest::addColumn<QString>("method");
@@ -3290,6 +3334,19 @@ void tst_qqmlecmascript::callQtInvokables()
QJSValue callback = qvariant_cast<QJSValue>(o->actuals().at(1));
QVERIFY(!callback.isNull());
QVERIFY(callback.isCallable());
+
+ o->reset();
+ QVERIFY(EVALUATE_VALUE("object.method_gadget(object.someFont)",
+ QV4::Primitive::undefinedValue()));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 40);
+ QCOMPARE(o->actuals(), QVariantList() << QVariant(o->someFont()));
+
+ o->reset();
+ QVERIFY(EVALUATE_ERROR("object.method_gadget(123)"));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), -1);
+ QCOMPARE(o->actuals(), QVariantList());
}
void tst_qqmlecmascript::resolveClashingProperties()
@@ -6397,6 +6454,28 @@ void tst_qqmlecmascript::generatorCrashNewProperty()
QCOMPARE(o->property("c").toInt(), 42);
}
+void tst_qqmlecmascript::generatorCallsGC()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("generatorCallsGC.qml"));
+
+ QScopedPointer<QObject> o(component.create()); // should not crash
+ QVERIFY2(o != nullptr, qPrintable(component.errorString()));
+}
+
+void tst_qqmlecmascript::noYieldInInnerFunction()
+{
+ QJSEngine engine;
+ const QString program = R"(
+ function *a() {
+ (function() { yield 1; })();
+ };
+ )";
+ auto result = engine.evaluate(program);
+ QVERIFY(result.isError());
+ QCOMPARE(result.errorType(), QJSValue::SyntaxError);
+}
+
// Test the "Qt.include" method
void tst_qqmlecmascript::include()
{
@@ -7552,6 +7631,15 @@ void tst_qqmlecmascript::qpropertyAndQtBinding()
QCOMPARE(root->complex.value(), 150);
}
+void tst_qqmlecmascript::qpropertyBindingReplacement()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("qpropertyBindingReplacement.qml"));
+ QScopedPointer<QObject> root(c.create());
+ QVERIFY(root);
+ QCOMPARE(root->objectName(), u"overwritten"_qs);
+}
+
void tst_qqmlecmascript::deleteRootObjectInCreation()
{
QQmlEngine engine;
@@ -9694,6 +9782,15 @@ void tst_qqmlecmascript::constPointer()
QVERIFY(root->property("propertyOk").toBool());
}
+void tst_qqmlecmascript::icUsingJSLib()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("icUsingJSLib.qml"));
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(root, qPrintable(component.errorString()));
+ QCOMPARE(root->property("num").toInt(), 42);
+}
+
void tst_qqmlecmascript::optionalChainEval()
{
QQmlEngine qmlengine;
@@ -9804,6 +9901,178 @@ void tst_qqmlecmascript::asCast()
QCOMPARE(qvariant_cast<QObject *>(root->property("rectangleAsRectangle")), rectangle);
}
+void tst_qqmlecmascript::functionNameInFunctionScope()
+{
+ QJSEngine engine;
+ QJSValue result = engine.evaluate(R"(
+ var a = {};
+ var foo = function foo() {
+ return foo;
+ }
+ a.foo = foo();
+
+ function bar() {
+ bar = 2;
+ }
+ bar()
+ a.bar = bar;
+
+ var baz = function baz() {
+ baz = 3;
+ }
+ baz()
+ a.baz = baz;
+
+ var foo2 = function() {
+ return foo2;
+ }
+ a.foo2 = foo2();
+
+ var baz2 = function() {
+ baz2 = 3;
+ }
+ baz2()
+ a.baz2 = baz2;
+ a
+
+ )");
+
+ QVERIFY(!result.isError());
+ const QJSManagedValue m(result, &engine);
+
+ QVERIFY(m.property("foo").isCallable());
+ QCOMPARE(m.property("bar").toInt(), 2);
+ QVERIFY(m.property("baz").isCallable());
+ QVERIFY(m.property("foo2").isCallable());
+ QCOMPARE(m.property("baz2").toInt(), 3);
+
+ const QJSValue getterInClass = engine.evaluate(R"(
+ class Tester {
+ constructor () {
+ this.a = 1;
+ this.b = 1;
+ }
+
+ get sum() {
+ const sum = this.a + this.b;
+ return sum;
+ }
+ }
+ )");
+
+ QVERIFY(!getterInClass.isError());
+
+ const QJSValue innerName = engine.evaluate(R"(
+ const a = 2;
+ var b = function a() { return a };
+ ({a: a, b: b, c: b()})
+ )");
+
+ QVERIFY(!innerName.isError());
+ const QJSManagedValue m2(innerName, &engine);
+ QCOMPARE(m2.property("a").toInt(), 2);
+ QVERIFY(m2.property("b").isCallable());
+ QVERIFY(m2.property("c").isCallable());
+}
+
+
+void tst_qqmlecmascript::functionAsDefaultArgument()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("functionAsDefaultArgument.qml"));
+ QScopedPointer root(component.create());
+ QVERIFY(root);
+ QCOMPARE(root->objectName(), "didRun");
+}
+
+void tst_qqmlecmascript::internalClassParentGc()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("internalClassParentGc.qml"));
+ QScopedPointer root(component.create());
+ QVERIFY(root);
+ QCOMPARE(root->objectName(), "3");
+}
+
+void tst_qqmlecmascript::methodTypeMismatch()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("methodTypeMismatch.qml"));
+
+ QScopedPointer<MyInvokableObject> object(new MyInvokableObject());
+
+ QScopedPointer<QObject> o(component.create());
+ QVERIFY2(o, qPrintable(component.errorString()));
+ o->setProperty("object", QVariant::fromValue(object.get()));
+
+ auto mo = o->metaObject();
+ QVERIFY(mo);
+
+ auto method = mo->method(mo->indexOfMethod("callWithFont()"));
+ QVERIFY(method.isValid());
+ QVERIFY(method.invoke(o.get()));
+ QCOMPARE(object->actuals(), QVariantList() << QVariant(object->someFont()));
+
+ QRegularExpression argumentConversionErrorMatcher("Could not convert argument 0");
+ QRegularExpression argumentConversionErrorMatcher2(".*/methodTypeMismatch.qml");
+ QRegularExpression typeErrorMatcher(
+ ".*/methodTypeMismatch\\.qml:..: TypeError: Passing incompatible arguments to C\\+\\+ "
+ "functions from JavaScript is not allowed.");
+
+ QTest::ignoreMessage(QtWarningMsg, argumentConversionErrorMatcher);
+ QTest::ignoreMessage(QtWarningMsg, argumentConversionErrorMatcher2);
+ QTest::ignoreMessage(QtWarningMsg, typeErrorMatcher);
+ object->reset();
+ method = mo->method(mo->indexOfMethod("callWithInt()"));
+ QVERIFY(method.isValid());
+ QVERIFY(method.invoke(o.get()));
+ QCOMPARE(object->actuals().size(),
+ 0); // actuals() should not contain reinterpret_cast<QFont>(123) !!!
+
+ QTest::ignoreMessage(QtWarningMsg, argumentConversionErrorMatcher);
+ QTest::ignoreMessage(QtWarningMsg, argumentConversionErrorMatcher2);
+ QTest::ignoreMessage(QtWarningMsg, typeErrorMatcher);
+ object->reset();
+ method = mo->method(mo->indexOfMethod("callWithInt2()"));
+ QVERIFY(method.isValid());
+ QVERIFY(method.invoke(o.get()));
+ QCOMPARE(object->actuals().size(),
+ 0); // actuals() should not contain reinterpret_cast<QFont>(0) !!!
+
+ QTest::ignoreMessage(QtWarningMsg, argumentConversionErrorMatcher);
+ QTest::ignoreMessage(QtWarningMsg, argumentConversionErrorMatcher2);
+ QTest::ignoreMessage(QtWarningMsg, typeErrorMatcher);
+ object->reset();
+ method = mo->method(mo->indexOfMethod("callWithNull()"));
+ QVERIFY(method.isValid());
+ QVERIFY(method.invoke(o.get()));
+ QCOMPARE(object->actuals().size(),
+ 0); // actuals() should not contain reinterpret_cast<QFont>(nullptr) !!!
+
+ // make sure that null is still accepted by functions accepting, e.g., a QObject*!
+ object->reset();
+ method = mo->method(mo->indexOfMethod("callWithAllowedNull()"));
+ QVERIFY(method.isValid());
+ QVERIFY(method.invoke(o.get()));
+ QCOMPARE(object->actuals(), QVariantList() << QVariant::fromValue((QObject *)nullptr));
+}
+
+void tst_qqmlecmascript::doNotCrashOnReadOnlyBindable()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("readOnlyBindable.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+#ifndef QT_NO_DEBUG
+ QTest::ignoreMessage(
+ QtWarningMsg,
+ "setBinding: Could not set binding via bindable interface. "
+ "The QBindable is read-only.");
+#endif
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(o);
+ QCOMPARE(o->property("x").toInt(), 7);
+}
+
QTEST_MAIN(tst_qqmlecmascript)
#include "tst_qqmlecmascript.moc"
diff --git a/tests/auto/qml/qqmlengine/CMakeLists.txt b/tests/auto/qml/qqmlengine/CMakeLists.txt
index f143dddb25..43fec7cb90 100644
--- a/tests/auto/qml/qqmlengine/CMakeLists.txt
+++ b/tests/auto/qml/qqmlengine/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlengine
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlengine.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -38,6 +36,9 @@ qt_internal_add_resource(tst_qqmlengine "qmake_immediate"
${qmake_immediate_resource_files}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlengine)
+endif()
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
index e1dff63e03..d2ec48ffb4 100644
--- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
+++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
@@ -26,7 +26,6 @@
**
****************************************************************************/
-#include "../../shared/util.h"
#include <QQmlEngine>
#include <QQmlContext>
#include <QNetworkAccessManager>
@@ -46,12 +45,13 @@
#include <private/qqmltypedata_p.h>
#include <private/qqmlcomponentattached_p.h>
#include <QQmlAbstractUrlInterceptor>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlengine : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlengine() {}
+ tst_qqmlengine() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
@@ -91,6 +91,7 @@ private slots:
void listWrapperAsListReference();
void attachedObjectAsObject();
void listPropertyAsQJSValue();
+ void stringToColor();
public slots:
QObject *createAQObjectForOwnershipTest ()
@@ -1410,6 +1411,31 @@ void tst_qqmlengine::listPropertyAsQJSValue()
QCOMPARE(prop.at(&prop, 0), &c);
}
+void tst_qqmlengine::stringToColor()
+{
+ QQmlEngine engine;
+
+ // Make it import QtQuick, so that color becomes available.
+ QQmlComponent c(&engine);
+ c.setData("import QtQuick\nItem {}", QUrl());
+ QVERIFY(c.isReady());
+ QScopedPointer<QObject> o(c.create());
+
+ const QMetaType metaType(QMetaType::QColor);
+ QVariant color(metaType);
+ QVERIFY(engine.handle()->metaTypeFromJS(
+ engine.handle()->newString(QStringLiteral("#abcdef"))->asReturnedValue(),
+ metaType, color.data()));
+ QVERIFY(color.isValid());
+ QCOMPARE(color.metaType(), metaType);
+
+ QVariant variant(QStringLiteral("#abcdef"));
+ QVERIFY(variant.convert(metaType));
+ QCOMPARE(variant.metaType(), metaType);
+
+ QCOMPARE(color, variant);
+}
+
QTEST_MAIN(tst_qqmlengine)
#include "tst_qqmlengine.moc"
diff --git a/tests/auto/qml/qqmlenginecleanup/BLACKLIST b/tests/auto/qml/qqmlenginecleanup/BLACKLIST
index 4fb1d9be4c..f88fad8dd8 100644
--- a/tests/auto/qml/qqmlenginecleanup/BLACKLIST
+++ b/tests/auto/qml/qqmlenginecleanup/BLACKLIST
@@ -1,2 +1,5 @@
[test_customModuleCleanup]
windows gcc ci
+# QTBUG-102833
+[test_customModuleCleanup]
+android
diff --git a/tests/auto/qml/qqmlenginecleanup/CMakeLists.txt b/tests/auto/qml/qqmlenginecleanup/CMakeLists.txt
index f8637755b7..fcc9358cd3 100644
--- a/tests/auto/qml/qqmlenginecleanup/CMakeLists.txt
+++ b/tests/auto/qml/qqmlenginecleanup/CMakeLists.txt
@@ -4,15 +4,20 @@
## tst_qqmlenginecleanup Test:
#####################################################################
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
qt_internal_add_test(tst_qqmlenginecleanup
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlenginecleanup.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Qml
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
## Scopes:
diff --git a/tests/auto/qml/qqmlenginecleanup/tst_qqmlenginecleanup.cpp b/tests/auto/qml/qqmlenginecleanup/tst_qqmlenginecleanup.cpp
index 31a71d5e6a..d8bf86d91a 100644
--- a/tests/auto/qml/qqmlenginecleanup/tst_qqmlenginecleanup.cpp
+++ b/tests/auto/qml/qqmlenginecleanup/tst_qqmlenginecleanup.cpp
@@ -26,20 +26,20 @@
**
****************************************************************************/
-#include "../../shared/util.h"
#include <QtCore/QObject>
#include <QtQml/qqml.h>
#include <QtQml/QQmlEngine>
#include <QtQml/QQmlComponent>
#include <private/qhashedstring_p.h>
#include <private/qqmlmetatype_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
//Separate test, because if engine cleanup attempts fail they can easily break unrelated tests
class tst_qqmlenginecleanup : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlenginecleanup() {}
+ tst_qqmlenginecleanup() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void test_qmlClearTypeRegistrations();
diff --git a/tests/auto/qml/qqmlerror/CMakeLists.txt b/tests/auto/qml/qqmlerror/CMakeLists.txt
index 7bb8715b01..359dd82658 100644
--- a/tests/auto/qml/qqmlerror/CMakeLists.txt
+++ b/tests/auto/qml/qqmlerror/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlerror
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlerror.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlerror/tst_qqmlerror.cpp b/tests/auto/qml/qqmlerror/tst_qqmlerror.cpp
index f282e60417..6ddf7dfe48 100644
--- a/tests/auto/qml/qqmlerror/tst_qqmlerror.cpp
+++ b/tests/auto/qml/qqmlerror/tst_qqmlerror.cpp
@@ -29,11 +29,15 @@
#include <qtest.h>
#include <QQmlError>
#include <QDebug>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlerror : public QQmlDataTest
{
Q_OBJECT
+
+public:
+ tst_qqmlerror();
+
private slots:
void url();
void description();
@@ -45,6 +49,11 @@ private slots:
void debug();
};
+tst_qqmlerror::tst_qqmlerror()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qqmlerror::url()
{
QQmlError error;
diff --git a/tests/auto/qml/qqmlexpression/CMakeLists.txt b/tests/auto/qml/qqmlexpression/CMakeLists.txt
index cc5e69d4bc..ec90797d41 100644
--- a/tests/auto/qml/qqmlexpression/CMakeLists.txt
+++ b/tests/auto/qml/qqmlexpression/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlexpression
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlexpression.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlexpression/tst_qqmlexpression.cpp b/tests/auto/qml/qqmlexpression/tst_qqmlexpression.cpp
index 494d5af2b8..aec1816b82 100644
--- a/tests/auto/qml/qqmlexpression/tst_qqmlexpression.cpp
+++ b/tests/auto/qml/qqmlexpression/tst_qqmlexpression.cpp
@@ -32,13 +32,13 @@
#include <QtQml/qqmlcomponent.h>
#include <QtQml/qqmlexpression.h>
#include <QtQml/qqmlscriptstring.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlexpression : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlexpression() {}
+ tst_qqmlexpression() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void scriptString();
diff --git a/tests/auto/qml/qqmlfile/tst_qqmlfile.cpp b/tests/auto/qml/qqmlfile/tst_qqmlfile.cpp
index a1c8daddcf..77909d8576 100644
--- a/tests/auto/qml/qqmlfile/tst_qqmlfile.cpp
+++ b/tests/auto/qml/qqmlfile/tst_qqmlfile.cpp
@@ -38,19 +38,145 @@ public:
tst_qqmlfile() {}
private Q_SLOTS:
+ void isLocalFile_data();
+ void isLocalFile();
+
+ void urlToLocalFileOrQrcOverloads_data();
void urlToLocalFileOrQrcOverloads();
+
+private:
+ void urlData();
};
+void tst_qqmlfile::urlData()
+{
+ QTest::addColumn<QString>("urlString");
+ QTest::addColumn<bool>("isLocal");
+ QTest::addColumn<QString>("localPath");
+
+ const QString invalid;
+ const QString relative = QStringLiteral("foo/bar");
+ const QString absolute = QStringLiteral("/foo/bar");
+
+ QTest::addRow("plain empty") << QStringLiteral("") << false << invalid;
+ QTest::addRow("plain no slash") << QStringLiteral("foo/bar") << false << invalid;
+ QTest::addRow("plain 1 slash") << QStringLiteral("/foo/bar") << false << invalid;
+ QTest::addRow("plain 2 slashes") << QStringLiteral("//foo/bar") << false << invalid;
+ QTest::addRow("plain 3 slashes") << QStringLiteral("///foo/bar") << false << invalid;
+
+ QTest::addRow(": empty") << QStringLiteral(":") << false << invalid;
+ QTest::addRow(": no slash") << QStringLiteral(":foo/bar") << false << invalid;
+ QTest::addRow(": 1 slash") << QStringLiteral(":/foo/bar") << false << invalid;
+ QTest::addRow(": 2 slashes") << QStringLiteral("://foo/bar") << false << invalid;
+ QTest::addRow(": 3 slashes") << QStringLiteral(":///foo/bar") << false << invalid;
+
+ QTest::addRow("C empty") << QStringLiteral("C:") << false << invalid;
+ QTest::addRow("C no slash") << QStringLiteral("C:foo/bar") << false << invalid;
+ QTest::addRow("C 1 slash") << QStringLiteral("C:/foo/bar") << false << invalid;
+ QTest::addRow("C 2 slashes") << QStringLiteral("C://foo/bar") << false << invalid;
+ QTest::addRow("C 3 slashes") << QStringLiteral("C:///foo/bar") << false << invalid;
+
+ QTest::addRow("file empty") << QStringLiteral("file:") << true << QString();
+ QTest::addRow("file no slash") << QStringLiteral("file:foo/bar") << true << relative;
+ QTest::addRow("file 1 slash") << QStringLiteral("file:/foo/bar") << true << absolute;
+ QTest::addRow("file 2 slashes") << QStringLiteral("file://foo/bar") << true << QStringLiteral("//foo/bar");
+ QTest::addRow("file 3 slashes") << QStringLiteral("file:///foo/bar") << true << absolute;
+
+ QTest::addRow("qrc empty") << QStringLiteral("qrc:") << true << QStringLiteral(":");
+ QTest::addRow("qrc no slash") << QStringLiteral("qrc:foo/bar") << true << u':' + relative;
+ QTest::addRow("qrc 1 slash") << QStringLiteral("qrc:/foo/bar") << true << u':' + absolute;
+ QTest::addRow("qrc 2 slashes") << QStringLiteral("qrc://foo/bar") << false << invalid;
+ QTest::addRow("qrc 3 slashes") << QStringLiteral("qrc:///foo/bar") << true << u':' + absolute;
+
+ QTest::addRow("file+stuff empty") << QStringLiteral("file+stuff:") << false << invalid;
+ QTest::addRow("file+stuff no slash") << QStringLiteral("file+stuff:foo/bar") << false << invalid;
+ QTest::addRow("file+stuff 1 slash") << QStringLiteral("file+stuff:/foo/bar") << false << invalid;
+ QTest::addRow("file+stuff 2 slashes") << QStringLiteral("file+stuff://foo/bar") << false << invalid;
+ QTest::addRow("file+stuff 3 slashes") << QStringLiteral("file+stuff:///foo/bar") << false << invalid;
+
+ // "assets:" and "content:" URLs are only treated as local files on android. In contrast to
+ // "qrc:" and "file:" we're not trying to be clever about multiple slashes. Two slashes are
+ // prohibited as that says part of what we would recognize as path is actually a URL authority.
+ // Everything else is android's problem.
+
+#ifdef Q_OS_ANDROID
+ const bool hasAssetsAndContent = true;
+#else
+ const bool hasAssetsAndContent = false;
+#endif
+
+ const QString assetsEmpty = hasAssetsAndContent ? QStringLiteral("assets:") : invalid;
+ const QString assetsRelative = hasAssetsAndContent ? (QStringLiteral("assets:") + relative) : invalid;
+ const QString assetsAbsolute = hasAssetsAndContent ? (QStringLiteral("assets:") + absolute) : invalid;
+ const QString assetsThreeSlashes = hasAssetsAndContent ? (QStringLiteral("assets://") + absolute) : invalid;
+
+ QTest::addRow("assets empty") << QStringLiteral("assets:") << hasAssetsAndContent << assetsEmpty;
+ QTest::addRow("assets no slash") << QStringLiteral("assets:foo/bar") << hasAssetsAndContent << assetsRelative;
+ QTest::addRow("assets 1 slash") << QStringLiteral("assets:/foo/bar") << hasAssetsAndContent << assetsAbsolute;
+ QTest::addRow("assets 2 slashes") << QStringLiteral("assets://foo/bar") << false << invalid;
+ QTest::addRow("assets 3 slashes") << QStringLiteral("assets:///foo/bar") << hasAssetsAndContent << assetsThreeSlashes;
+
+ const QString contentEmpty = hasAssetsAndContent ? QStringLiteral("content:") : invalid;
+ const QString contentRelative = hasAssetsAndContent ? (QStringLiteral("content:") + relative) : invalid;
+ const QString contentAbsolute = hasAssetsAndContent ? (QStringLiteral("content:") + absolute) : invalid;
+ const QString contentThreeSlashes = hasAssetsAndContent ? (QStringLiteral("content://") + absolute) : invalid;
+
+ QTest::addRow("content empty") << QStringLiteral("content:") << hasAssetsAndContent << contentEmpty;
+ QTest::addRow("content no slash") << QStringLiteral("content:foo/bar") << hasAssetsAndContent << contentRelative;
+ QTest::addRow("content 1 slash") << QStringLiteral("content:/foo/bar") << hasAssetsAndContent << contentAbsolute;
+ QTest::addRow("content 2 slashes") << QStringLiteral("content://foo/bar") << false << invalid;
+ QTest::addRow("content 3 slashes") << QStringLiteral("content:///foo/bar") << hasAssetsAndContent << contentThreeSlashes;
+
+
+ // These are local files everywhere. Their paths are only meaningful on android, though.
+ // The inner slashes of the path do not influence the URL parsing.
+
+ QTest::addRow("file:assets empty") << QStringLiteral("file:assets:") << true << QStringLiteral("assets:");
+ QTest::addRow("file:assets no slash") << QStringLiteral("file:assets:foo/bar") << true << QStringLiteral("assets:foo/bar");
+ QTest::addRow("file:assets 1 slash") << QStringLiteral("file:assets:/foo/bar") << true << QStringLiteral("assets:/foo/bar");
+ QTest::addRow("file:assets 2 slashes") << QStringLiteral("file:assets://foo/bar") << true << QStringLiteral("assets://foo/bar");
+ QTest::addRow("file:assets 3 slashes") << QStringLiteral("file:assets:///foo/bar") << true << QStringLiteral("assets:///foo/bar");
+
+ QTest::addRow("file:content empty") << QStringLiteral("file:content:") << true << QStringLiteral("content:");
+ QTest::addRow("file:content no slash") << QStringLiteral("file:content:foo/bar") << true << QStringLiteral("content:foo/bar");
+ QTest::addRow("file:content 1 slash") << QStringLiteral("file:content:/foo/bar") << true << QStringLiteral("content:/foo/bar");
+ QTest::addRow("file:content 2 slashes") << QStringLiteral("file:content://foo/bar") << true << QStringLiteral("content://foo/bar");
+ QTest::addRow("file:content 3 slashes") << QStringLiteral("file:content:///foo/bar") << true << QStringLiteral("content:///foo/bar");
+}
+
+void tst_qqmlfile::isLocalFile_data()
+{
+ urlData();
+}
+
+void tst_qqmlfile::isLocalFile()
+{
+ QFETCH(QString, urlString);
+ QFETCH(bool, isLocal);
+
+ const QUrl url(urlString);
+
+ QCOMPARE(QQmlFile::isLocalFile(urlString), isLocal);
+ QCOMPARE(QQmlFile::isLocalFile(url), isLocal);
+}
+
+void tst_qqmlfile::urlToLocalFileOrQrcOverloads_data()
+{
+ urlData();
+}
+
void tst_qqmlfile::urlToLocalFileOrQrcOverloads()
{
- const QString urlString = QStringLiteral("qrc:///example.qml");
+ QFETCH(QString, urlString);
+ QFETCH(QString, localPath);
+
const QUrl url(urlString);
const QString pathForUrlString = QQmlFile::urlToLocalFileOrQrc(urlString);
const QString pathForUrl = QQmlFile::urlToLocalFileOrQrc(url);
- QCOMPARE(pathForUrlString, pathForUrl);
- QCOMPARE(pathForUrlString, QStringLiteral(":/example.qml"));
+ QCOMPARE(pathForUrlString, localPath);
+ QCOMPARE(pathForUrl, localPath);
}
QTEST_GUILESS_MAIN(tst_qqmlfile)
diff --git a/tests/auto/qml/qqmlfileselector/CMakeLists.txt b/tests/auto/qml/qqmlfileselector/CMakeLists.txt
index 61707f79c7..4d7c4f840b 100644
--- a/tests/auto/qml/qqmlfileselector/CMakeLists.txt
+++ b/tests/auto/qml/qqmlfileselector/CMakeLists.txt
@@ -12,18 +12,20 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlfileselector
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlfileselector.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlfileselector)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlfileselector/data/qmldirtest/main.qml b/tests/auto/qml/qqmlfileselector/data/qmldirtest/main.qml
new file mode 100644
index 0000000000..d6dd2c9b90
--- /dev/null
+++ b/tests/auto/qml/qqmlfileselector/data/qmldirtest/main.qml
@@ -0,0 +1,13 @@
+import QtQuick
+import qmldirtest
+
+Window {
+ width: 640
+ height: 480
+ visible: true
+ property color color: mybutton.color
+
+ MyButton {
+ id: mybutton
+ }
+}
diff --git a/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/+linux/MyButton.qml b/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/+linux/MyButton.qml
new file mode 100644
index 0000000000..cc6eb967da
--- /dev/null
+++ b/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/+linux/MyButton.qml
@@ -0,0 +1,7 @@
+import QtQuick
+
+Rectangle {
+ width: 300
+ height: 50
+ color: "blue"
+}
diff --git a/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/+macos/MyButton.qml b/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/+macos/MyButton.qml
new file mode 100644
index 0000000000..5bf632c48d
--- /dev/null
+++ b/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/+macos/MyButton.qml
@@ -0,0 +1,7 @@
+import QtQuick
+
+Rectangle {
+ width: 300
+ height: 50
+ color: "yellow"
+}
diff --git a/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/MyButton.qml b/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/MyButton.qml
new file mode 100644
index 0000000000..32db428c4f
--- /dev/null
+++ b/tests/auto/qml/qqmlfileselector/data/qmldirtest/qml/MyButton.qml
@@ -0,0 +1,7 @@
+import QtQuick
+
+Rectangle {
+ width: 300
+ height: 50
+ color: "green"
+}
diff --git a/tests/auto/qml/qqmlfileselector/data/qmldirtest/qmldir b/tests/auto/qml/qqmlfileselector/data/qmldirtest/qmldir
new file mode 100644
index 0000000000..ac68d9097d
--- /dev/null
+++ b/tests/auto/qml/qqmlfileselector/data/qmldirtest/qmldir
@@ -0,0 +1,5 @@
+module qmldirtest
+MyButton 1.0 qml/MyButton.qml
+MyButton 1.0 qml/+linux/MyButton.qml
+MyButton 1.0 qml/+macos/MyButton.qml
+
diff --git a/tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp b/tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp
index bc5cd2cdae..fe55d8b056 100644
--- a/tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp
+++ b/tests/auto/qml/qqmlfileselector/tst_qqmlfileselector.cpp
@@ -35,19 +35,19 @@
#include <QQmlContext>
#include <QLoggingCategory>
#include <qqmlinfo.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlfileselector : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlfileselector() {}
+ tst_qqmlfileselector() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void basicTest();
void basicTestCached();
void applicationEngineTest();
-
+ void qmldirCompatibility();
};
void tst_qqmlfileselector::basicTest()
@@ -86,19 +86,30 @@ void tst_qqmlfileselector::basicTestCached()
void tst_qqmlfileselector::applicationEngineTest()
{
QQmlApplicationEngine engine;
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- QQmlFileSelector* selector = QQmlFileSelector::get(&engine);
-QT_WARNING_POP
- QVERIFY(selector != nullptr);
- selector->setExtraSelectors(QStringList() << "basic");
+ engine.setExtraFileSelectors(QStringList() << "basic");
+ engine.load(testFileUrl("basicTest.qml"));
- QQmlComponent component(&engine, testFileUrl("basicTest.qml"));
- QObject *object = component.create();
+ QVERIFY(!engine.rootObjects().isEmpty());
+ QObject *object = engine.rootObjects().at(0);
QVERIFY(object != nullptr);
QCOMPARE(object->property("value").toString(), QString("selected"));
+}
- delete object;
+void tst_qqmlfileselector::qmldirCompatibility()
+{
+ QQmlApplicationEngine engine;
+ engine.addImportPath(dataDirectory());
+ engine.load(testFileUrl("qmldirtest/main.qml"));
+ QVERIFY(!engine.rootObjects().isEmpty());
+ QObject *object = engine.rootObjects().at(0);
+ auto color = object->property("color").value<QColor>();
+#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
+ QCOMPARE(color, QColorConstants::Svg::blue);
+#elif defined(Q_OS_DARWIN)
+ QCOMPARE(color, QColorConstants::Svg::yellow);
+#else
+ QCOMPARE(color, QColorConstants::Svg::green);
+#endif
}
QTEST_MAIN(tst_qqmlfileselector)
diff --git a/tests/auto/qml/qqmlimport/CMakeLists.txt b/tests/auto/qml/qqmlimport/CMakeLists.txt
index 3d4f01da2c..6392a527a4 100644
--- a/tests/auto/qml/qqmlimport/CMakeLists.txt
+++ b/tests/auto/qml/qqmlimport/CMakeLists.txt
@@ -24,15 +24,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlimport
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlimport.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
Qt::QmlPrivate
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlimport/data/absoluteImport.qml b/tests/auto/qml/qqmlimport/data/absoluteImport.qml
new file mode 100644
index 0000000000..d182fe5b71
--- /dev/null
+++ b/tests/auto/qml/qqmlimport/data/absoluteImport.qml
@@ -0,0 +1,4 @@
+import "/foo/bar/baz"
+
+QtObject {}
+
diff --git a/tests/auto/qml/qqmlimport/data/absoluteResourceImport.qml b/tests/auto/qml/qqmlimport/data/absoluteResourceImport.qml
new file mode 100644
index 0000000000..74b98664aa
--- /dev/null
+++ b/tests/auto/qml/qqmlimport/data/absoluteResourceImport.qml
@@ -0,0 +1,4 @@
+import ":/absolute/resource/path"
+
+QtObject {}
+
diff --git a/tests/auto/qml/qqmlimport/data/importQtQuickTooling.qml b/tests/auto/qml/qqmlimport/data/importQtQuickTooling.qml
new file mode 100644
index 0000000000..5b094adfff
--- /dev/null
+++ b/tests/auto/qml/qqmlimport/data/importQtQuickTooling.qml
@@ -0,0 +1,4 @@
+import QtQuick.tooling
+
+Property {
+}
diff --git a/tests/auto/qml/qqmlimport/data/relativeResourceImport.qml b/tests/auto/qml/qqmlimport/data/relativeResourceImport.qml
new file mode 100644
index 0000000000..6a7e2b7ea5
--- /dev/null
+++ b/tests/auto/qml/qqmlimport/data/relativeResourceImport.qml
@@ -0,0 +1,4 @@
+import ":relative/resource/path"
+
+QtObject {}
+
diff --git a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
index 572c8771a0..7b6c33bcc9 100644
--- a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
+++ b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
@@ -34,12 +34,15 @@
#include <QtQuick/qquickitem.h>
#include <private/qqmlimport_p.h>
#include <private/qqmlengine_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_QQmlImport : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_QQmlImport();
+
private slots:
void importPathOrder();
void testDesignerSupported();
@@ -56,6 +59,8 @@ private slots:
void cleanup();
void envResourceImportPath();
void preferResourcePath();
+ void invalidFileImport_data();
+ void invalidFileImport();
};
void tst_QQmlImport::cleanup()
@@ -101,6 +106,36 @@ void tst_QQmlImport::preferResourcePath()
QCOMPARE(o->objectName(), "right");
}
+void tst_QQmlImport::invalidFileImport_data()
+{
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QString>("import");
+ QTest::addRow("file absolute")
+ << QStringLiteral("absoluteImport.qml")
+ << QStringLiteral("/foo/bar/baz");
+ QTest::addRow("resource absolute")
+ << QStringLiteral("absoluteResourceImport.qml")
+ << QStringLiteral(":/absolute/resource/path");
+ QTest::addRow("resource relative")
+ << QStringLiteral("relativeResourceImport.qml")
+ << QStringLiteral(":relative/resource/path");
+}
+
+void tst_QQmlImport::invalidFileImport()
+{
+ QFETCH(QString, file);
+ QFETCH(QString, import);
+
+ QQmlEngine engine;
+
+ QQmlComponent component(&engine, testFileUrl(file));
+ QVERIFY(component.isError());
+ QVERIFY(component.errorString().contains(
+ QStringLiteral("\"%1\" is not a valid import URL. "
+ "You can pass relative paths or URLs with schema, "
+ "but not absolute paths or resource paths.").arg(import)));
+}
+
void tst_QQmlImport::testDesignerSupported()
{
QQuickView *window = new QQuickView();
@@ -125,7 +160,7 @@ void tst_QQmlImport::testDesignerSupported()
QVERIFY(window->errors().isEmpty());
QString warningString("%1:30:1: module does not support the designer \"MyPluginUnsupported\" \n import MyPluginUnsupported 1.0\r \n ^ ");
-#if !defined(Q_OS_WIN) && !defined(Q_OS_ANDROID)
+#if !defined(Q_OS_WIN)
warningString.remove('\r');
#endif
warningString = warningString.arg(testFileUrl("testfile_unsupported.qml").toString());
@@ -175,6 +210,11 @@ void tst_QQmlImport::uiFormatLoading()
delete test;
}
+tst_QQmlImport::tst_QQmlImport()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQmlImport::importPathOrder()
{
#ifdef Q_OS_ANDROID
@@ -302,7 +342,7 @@ void tst_QQmlImport::interceptQmldir()
QQmlComponent component(&engine);
component.loadUrl(testFileUrl("interceptQmldir.qml"));
- QVERIFY(component.isReady());
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
}
@@ -316,7 +356,7 @@ void tst_QQmlImport::singletonVersionResolution()
// Singleton with higher version is simply ignored when importing lower version of plugin
QQmlComponent component(&engine);
component.loadUrl(testFileUrl("QTBUG-77102/main.0.9.qml"));
- QVERIFY(component.isReady());
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
}
@@ -325,7 +365,7 @@ void tst_QQmlImport::singletonVersionResolution()
QQmlComponent component(&engine);
QTest::ignoreMessage(QtMsgType::QtWarningMsg, QRegularExpression {".*ReferenceError: MySettings is not defined$"} );
component.loadUrl(testFileUrl("QTBUG-77102/main.0.9.fail.qml"));
- QVERIFY(component.isReady());
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
}
@@ -333,7 +373,7 @@ void tst_QQmlImport::singletonVersionResolution()
// unless a version which is high enough is imported
QQmlComponent component(&engine);
component.loadUrl(testFileUrl("QTBUG-77102/main.1.0.qml"));
- QVERIFY(component.isReady());
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
auto item = qobject_cast<QQuickItem*>(obj.get());
@@ -343,7 +383,7 @@ void tst_QQmlImport::singletonVersionResolution()
// or when there is no number because we are importing from a path
QQmlComponent component(&engine);
component.loadUrl(testFileUrl("QTBUG-77102/main.nonumber.qml"));
- QVERIFY(component.isReady());
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
auto item = qobject_cast<QQuickItem*>(obj.get());
@@ -357,9 +397,10 @@ void tst_QQmlImport::removeDynamicPlugin()
QQmlEngine engine;
{
// Load something that adds a dynamic plugin
- QQmlComponent component(&engine);
- component.setData(QByteArray("import QtTest 1.0; TestResult{}"), QUrl());
- QVERIFY(component.isReady());
+ QQmlComponent component(&engine, testFileUrl("importQtQuickTooling.qml"));
+ // Make sure to use something other than QtTest here, since the !plugins.isEmpty()
+ // check will fail if we do.
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
}
QQmlImportDatabase *imports = &QQmlEnginePrivate::get(&engine)->importDatabase;
const QStringList &plugins = imports->dynamicPlugins();
@@ -449,7 +490,7 @@ void tst_QQmlImport::importDependenciesPrecedence()
engine.addImportPath(dataDirectory());
QQmlComponent component(&engine, testFile("dependencies.qml"));
- QVERIFY(component.isReady());
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
QScopedPointer<QObject> instance(component.create());
QVERIFY(!instance.isNull());
diff --git a/tests/auto/qml/qqmlincubator/CMakeLists.txt b/tests/auto/qml/qqmlincubator/CMakeLists.txt
index 34f794b7d9..b2ade30c39 100644
--- a/tests/auto/qml/qqmlincubator/CMakeLists.txt
+++ b/tests/auto/qml/qqmlincubator/CMakeLists.txt
@@ -12,20 +12,22 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlincubator
SOURCES
- ../../shared/util.cpp ../../shared/util.h
testtypes.cpp testtypes.h
tst_qqmlincubator.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlincubator)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlincubator/tst_qqmlincubator.cpp b/tests/auto/qml/qqmlincubator/tst_qqmlincubator.cpp
index 7784afd35b..5850ddfa54 100644
--- a/tests/auto/qml/qqmlincubator/tst_qqmlincubator.cpp
+++ b/tests/auto/qml/qqmlincubator/tst_qqmlincubator.cpp
@@ -38,16 +38,16 @@
#include <QQmlProperty>
#include <QQmlComponent>
#include <QQmlIncubator>
-#include "../../shared/util.h"
#include <private/qjsvalue_p.h>
#include <private/qqmlincubator_p.h>
#include <private/qqmlobjectcreator_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlincubator : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlincubator() {}
+ tst_qqmlincubator() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/qml/qqmlinfo/CMakeLists.txt b/tests/auto/qml/qqmlinfo/CMakeLists.txt
index 4d234e8ce0..3020b84c59 100644
--- a/tests/auto/qml/qqmlinfo/CMakeLists.txt
+++ b/tests/auto/qml/qqmlinfo/CMakeLists.txt
@@ -12,19 +12,21 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlinfo
SOURCES
- ../../shared/util.cpp ../../shared/util.h
attached.cpp attached.h
tst_qqmlinfo.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlinfo)
+endif()
+
#### Keys ignored in scope 1:.:.:qqmlinfo.pro:<TRUE>:
# QML_IMPORT_MAJOR_VERSION = "1"
# QML_IMPORT_NAME = "org.qtproject.Test"
@@ -47,4 +49,4 @@ set_target_properties(tst_qqmlinfo PROPERTIES
QT_QML_MODULE_URI org.qtproject.Test
)
-qt6_qml_type_registration(tst_qqmlinfo)
+_qt_internal_qml_type_registration(tst_qqmlinfo)
diff --git a/tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp b/tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp
index 7b7a12ee1b..e7e7d3be76 100644
--- a/tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp
+++ b/tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp
@@ -33,7 +33,7 @@
#include <QTimer>
#include <QQmlContext>
#include <qqmlinfo.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "attached.h"
@@ -41,7 +41,7 @@ class tst_qqmlinfo : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlinfo() {}
+ tst_qqmlinfo() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void qmlObject();
diff --git a/tests/auto/qml/qqmlinstantiator/CMakeLists.txt b/tests/auto/qml/qqmlinstantiator/CMakeLists.txt
index b7d967ca9f..ffe3a10b17 100644
--- a/tests/auto/qml/qqmlinstantiator/CMakeLists.txt
+++ b/tests/auto/qml/qqmlinstantiator/CMakeLists.txt
@@ -12,17 +12,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlinstantiator
SOURCES
- ../../shared/util.cpp ../../shared/util.h
stringmodel.h
tst_qqmlinstantiator.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlModelsPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlinstantiator/data/activeModelChangeInteraction.qml b/tests/auto/qml/qqmlinstantiator/data/activeModelChangeInteraction.qml
new file mode 100644
index 0000000000..2797566ad2
--- /dev/null
+++ b/tests/auto/qml/qqmlinstantiator/data/activeModelChangeInteraction.qml
@@ -0,0 +1,39 @@
+import QtQuick 2.15
+import QtQml.Models 2.15
+
+Item {
+ id: root
+ property int instanceCount: 0
+ property alias active: instantiator.active
+
+ ListModel {
+ id: listmodel
+
+ dynamicRoles: true
+ }
+
+ Component.onCompleted: {
+ listmodel.insert(listmodel.count, {name: "one"})
+ listmodel.insert(listmodel.count, {name: "two"})
+ listmodel.insert(listmodel.count, {name: "three"})
+ }
+
+ Instantiator {
+ id: instantiator
+
+ active: false
+
+ model: listmodel
+
+ delegate: Text {
+ width: 100
+ height: 20
+
+ text: name
+
+ Component.onCompleted: ++root.instanceCount
+ }
+
+ }
+}
+
diff --git a/tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp b/tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp
index 84e08c471a..3524d5de64 100644
--- a/tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp
+++ b/tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp
@@ -34,19 +34,23 @@
#include <QtQmlModels/private/qqmlinstantiator_p.h>
#include <QtQml/qqmlcontext.h>
#include <QtQml/qqmlincubator.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "stringmodel.h"
class tst_qqmlinstantiator: public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qqmlinstantiator();
+
private slots:
void createNone();
void createSingle();
void createMultiple();
void stringModel();
void activeProperty();
+ void activeModelChangeInteraction();
void intModelChange();
void createAndRemove();
@@ -54,11 +58,17 @@ private slots:
void asynchronous();
};
+tst_qqmlinstantiator::tst_qqmlinstantiator()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qqmlinstantiator::createNone()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("createNone.qml"));
- QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(component.create());
+ QScopedPointer<QObject> o(component.create());
+ QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(o.data());
QVERIFY(instantiator != nullptr);
QCOMPARE(instantiator->isActive(), true);
QCOMPARE(instantiator->count(), 0);
@@ -70,7 +80,8 @@ void tst_qqmlinstantiator::createSingle()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("createSingle.qml"));
- QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(component.create());
+ QScopedPointer<QObject> o(component.create());
+ QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(o.data());
QVERIFY(instantiator != nullptr);
QCOMPARE(instantiator->isActive(), true);
QCOMPARE(instantiator->count(), 1);
@@ -87,7 +98,8 @@ void tst_qqmlinstantiator::createMultiple()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("createMultiple.qml"));
- QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(component.create());
+ QScopedPointer<QObject> o(component.create());
+ QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(o.data());
QVERIFY(instantiator != nullptr);
QCOMPARE(instantiator->isActive(), true);
QCOMPARE(instantiator->count(), 10);
@@ -105,7 +117,8 @@ void tst_qqmlinstantiator::stringModel()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("stringModel.qml"));
- QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(component.create());
+ QScopedPointer<QObject> o(component.create());
+ QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(o.data());
QVERIFY(instantiator != nullptr);
QCOMPARE(instantiator->isActive(), true);
QCOMPARE(instantiator->count(), 4);
@@ -122,7 +135,8 @@ void tst_qqmlinstantiator::activeProperty()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("inactive.qml"));
- QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(component.create());
+ QScopedPointer<QObject> o(component.create());
+ QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(o.data());
QVERIFY(instantiator != nullptr);
QSignalSpy activeSpy(instantiator, SIGNAL(activeChanged()));
QSignalSpy countSpy(instantiator, SIGNAL(countChanged()));
@@ -153,11 +167,32 @@ void tst_qqmlinstantiator::activeProperty()
QCOMPARE(object->property("idx").toInt(), 0);
}
+void tst_qqmlinstantiator::activeModelChangeInteraction()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("activeModelChangeInteraction.qml"));
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY(root);
+
+ // If the instantiator is inactive, a model change does not lead to items being loaded
+ bool ok = false;
+ int count = root->property("instanceCount").toInt(&ok);
+ QVERIFY(ok);
+ QCOMPARE(count, 0);
+
+ // When turning the instantiator active, it will however reflect the model
+ root->setProperty("active", true);
+ count = root->property("instanceCount").toInt(&ok);
+ QVERIFY(ok);
+ QCOMPARE(count, 3);
+}
+
void tst_qqmlinstantiator::intModelChange()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("createMultiple.qml"));
- QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(component.create());
+ QScopedPointer<QObject> o(component.create());
+ QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(o.data());
QVERIFY(instantiator != nullptr);
QSignalSpy activeSpy(instantiator, SIGNAL(activeChanged()));
QSignalSpy countSpy(instantiator, SIGNAL(countChanged()));
@@ -193,7 +228,7 @@ void tst_qqmlinstantiator::createAndRemove()
QScopedPointer<StringModel> model {new StringModel("model1")};
qmlRegisterSingletonInstance("Test", 1, 0, "Model1", model.get());
QQmlComponent component(&engine, testFileUrl("createAndRemove.qml"));
- QObject *rootObject = component.create();
+ QScopedPointer<QObject> rootObject(component.create());
QVERIFY(rootObject != nullptr);
QQmlInstantiator *instantiator =
diff --git a/tests/auto/qml/qqmlitemmodels/CMakeLists.txt b/tests/auto/qml/qqmlitemmodels/CMakeLists.txt
index 5246638739..7955eeba7b 100644
--- a/tests/auto/qml/qqmlitemmodels/CMakeLists.txt
+++ b/tests/auto/qml/qqmlitemmodels/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlitemmodels
SOURCES
- ../../shared/util.cpp ../../shared/util.h
qtestmodel.h
testtypes.h
tst_qqmlitemmodels.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlitemmodels/data/modelindex.qml b/tests/auto/qml/qqmlitemmodels/data/modelindex.qml
index 0d6e3624cb..2756f04120 100644
--- a/tests/auto/qml/qqmlitemmodels/data/modelindex.qml
+++ b/tests/auto/qml/qqmlitemmodels/data/modelindex.qml
@@ -1,3 +1,4 @@
+import QtQml 2.0
import Test 1.0
ItemModelsTest {
diff --git a/tests/auto/qml/qqmlitemmodels/data/persistentmodelindex.qml b/tests/auto/qml/qqmlitemmodels/data/persistentmodelindex.qml
index 13037065a6..85987bdcac 100644
--- a/tests/auto/qml/qqmlitemmodels/data/persistentmodelindex.qml
+++ b/tests/auto/qml/qqmlitemmodels/data/persistentmodelindex.qml
@@ -1,3 +1,4 @@
+import QtQml 2.0
import Test 1.0
ItemModelsTest {
diff --git a/tests/auto/qml/qqmlitemmodels/tst_qqmlitemmodels.cpp b/tests/auto/qml/qqmlitemmodels/tst_qqmlitemmodels.cpp
index 21bde0dd14..6fb86b98d5 100644
--- a/tests/auto/qml/qqmlitemmodels/tst_qqmlitemmodels.cpp
+++ b/tests/auto/qml/qqmlitemmodels/tst_qqmlitemmodels.cpp
@@ -31,7 +31,7 @@
#include <QQmlComponent>
#include <QDebug>
#include <QStringListModel>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "testtypes.h"
#include "qtestmodel.h"
@@ -45,7 +45,7 @@ class tst_qqmlitemmodels : public QQmlDataTest
Q_OBJECT
public:
- tst_qqmlitemmodels() {}
+ tst_qqmlitemmodels() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/qml/qqmljsscope/BLACKLIST b/tests/auto/qml/qqmljsscope/BLACKLIST
new file mode 100644
index 0000000000..1cae50360f
--- /dev/null
+++ b/tests/auto/qml/qqmljsscope/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-100020
+[orderedBindings]
+android
diff --git a/tests/auto/qml/qqmllanguage/CMakeLists.txt b/tests/auto/qml/qqmllanguage/CMakeLists.txt
index e7fa05d23e..08d747b818 100644
--- a/tests/auto/qml/qqmllanguage/CMakeLists.txt
+++ b/tests/auto/qml/qqmllanguage/CMakeLists.txt
@@ -12,18 +12,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmllanguage
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
testtypes.cpp testtypes.h
tst_qqmllanguage.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -67,4 +64,4 @@ set_target_properties(tst_qqmllanguage PROPERTIES
QT_QML_MODULE_URI StaticTest
)
-qt6_qml_type_registration(tst_qqmllanguage)
+_qt_internal_qml_type_registration(tst_qqmllanguage)
diff --git a/tests/auto/qml/qqmllanguage/data/Broken.qml b/tests/auto/qml/qqmllanguage/data/Broken.qml
new file mode 100644
index 0000000000..e1b61f31f4
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/Broken.qml
@@ -0,0 +1,5 @@
+import QtQml
+
+QtObject {
+ notThere: 5
+}
diff --git a/tests/auto/qml/qqmllanguage/data/ComponentType.qml b/tests/auto/qml/qqmllanguage/data/ComponentType.qml
new file mode 100644
index 0000000000..e8addde1c4
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/ComponentType.qml
@@ -0,0 +1,8 @@
+import QtQml
+
+Component {
+ id: componentRoot
+ QtObject {
+ objectName: "enclosed"
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/GroupFailureInner.qml b/tests/auto/qml/qqmllanguage/data/GroupFailureInner.qml
new file mode 100644
index 0000000000..7972cc9683
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/GroupFailureInner.qml
@@ -0,0 +1,2 @@
+import QtQml
+QtObject { property url u }
diff --git a/tests/auto/qml/qqmllanguage/data/GroupFailureOuter.qml b/tests/auto/qml/qqmllanguage/data/GroupFailureOuter.qml
new file mode 100644
index 0000000000..2a34a29789
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/GroupFailureOuter.qml
@@ -0,0 +1,5 @@
+import QtQml
+
+QtObject {
+ property GroupFailureInner b
+}
diff --git a/tests/auto/qml/qqmllanguage/data/MyRectangle.qml b/tests/auto/qml/qqmllanguage/data/MyRectangle.qml
new file mode 100644
index 0000000000..4d5e7c6c8d
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/MyRectangle.qml
@@ -0,0 +1,10 @@
+import QtQuick
+
+Item {
+ property alias rectangle1AnchorsleftMargin: rectangle1.anchors.leftMargin
+
+ Rectangle {
+ id: rectangle1
+ anchors.leftMargin: 250
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/SignalInlineComponentArg.qml b/tests/auto/qml/qqmllanguage/data/SignalInlineComponentArg.qml
new file mode 100644
index 0000000000..0424ac1534
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/SignalInlineComponentArg.qml
@@ -0,0 +1,21 @@
+import QtQuick
+
+Item {
+ component Abc: Item {
+ property string success
+ }
+
+ signal canYouFeelIt(arg1: Abc)
+ property Abc someAbc: Abc {
+ success: "Signal was called"
+ }
+ property string success: "Signal not called yet"
+
+ Component.onCompleted: {
+ canYouFeelIt(someAbc);
+ }
+
+ onCanYouFeelIt: (arg) => {
+ success = arg.success
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/alias.15.qml b/tests/auto/qml/qqmllanguage/data/alias.15.qml
index 5f3de9c83e..7e362d8823 100644
--- a/tests/auto/qml/qqmllanguage/data/alias.15.qml
+++ b/tests/auto/qml/qqmllanguage/data/alias.15.qml
@@ -9,4 +9,25 @@ Item {
Item {
id: symbol
}
+
+ Rectangle {
+ id: txtElevationValue
+
+ property Rectangle background: Rectangle { }
+
+ state: "ValidatorInvalid"
+
+ states: [
+ State {
+ name: "ValidatorInvalid"
+ PropertyChanges {
+ target: txtElevationValue
+ background.border.color: "red" // this line caused the segfault in qtbug107795
+ }
+ },
+ State {
+ name: "ValidatorAcceptable"
+ }
+ ]
+ }
}
diff --git a/tests/auto/qml/qqmllanguage/data/alias.15a.qml b/tests/auto/qml/qqmllanguage/data/alias.15a.qml
new file mode 100644
index 0000000000..ba8097c997
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/alias.15a.qml
@@ -0,0 +1,12 @@
+import QtQuick 2.15
+
+Item {
+ id: root
+
+ property alias symbol: symbol
+ symbol.layer.enabled: true
+
+ Item {
+ id: symbol
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/alias.19.qml b/tests/auto/qml/qqmllanguage/data/alias.19.qml
new file mode 100644
index 0000000000..a96c0c694d
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/alias.19.qml
@@ -0,0 +1,11 @@
+import QtQuick
+
+Item {
+ id: myThing
+ width: 1920
+
+ MyRectangle {
+ rectangle1AnchorsleftMargin: myThing.width / 2
+ Component.onCompleted: myThing.height = rectangle1AnchorsleftMargin
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/ambiguousBinding/TestCase.qml b/tests/auto/qml/qqmllanguage/data/ambiguousBinding/TestCase.qml
new file mode 100644
index 0000000000..c76d2b679e
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/ambiguousBinding/TestCase.qml
@@ -0,0 +1,6 @@
+import QtQml 2.15
+import QtTest 1.0
+
+QtObject {
+ component Comp: QtObject {}
+}
diff --git a/tests/auto/qml/qqmllanguage/data/ambiguousBinding/ambiguousContainingType.qml b/tests/auto/qml/qqmllanguage/data/ambiguousBinding/ambiguousContainingType.qml
new file mode 100644
index 0000000000..765dc91fe1
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/ambiguousBinding/ambiguousContainingType.qml
@@ -0,0 +1,3 @@
+import QtQml 2.15
+
+TestCase {}
diff --git a/tests/auto/qml/qqmllanguage/data/asBroken.qml b/tests/auto/qml/qqmllanguage/data/asBroken.qml
new file mode 100644
index 0000000000..381a012df6
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/asBroken.qml
@@ -0,0 +1,6 @@
+import QtQml
+
+QtObject {
+ id: self
+ property var selfAsBroken: self as Broken
+}
diff --git a/tests/auto/qml/qqmllanguage/data/badGroupedProperty.qml b/tests/auto/qml/qqmllanguage/data/badGroupedProperty.qml
new file mode 100644
index 0000000000..1b8ba61725
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/badGroupedProperty.qml
@@ -0,0 +1,10 @@
+import QtQml
+
+QtObject {
+ id: testItem
+ property rect rect
+ onComplete {
+ rect.x: 2
+ rect.width: 22
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/bindingAliasToComponentUrl.qml b/tests/auto/qml/qqmllanguage/data/bindingAliasToComponentUrl.qml
new file mode 100644
index 0000000000..44fbd03354
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/bindingAliasToComponentUrl.qml
@@ -0,0 +1,10 @@
+import QtQuick
+Item {
+ id: root
+ Component {
+ id: accessibleNormal
+ Item {}
+ }
+ property alias accessibleNormalUrl: accessibleNormal.url
+ property url urlClone: root.accessibleNormalUrl // crashes qml utility
+}
diff --git a/tests/auto/qml/qqmllanguage/data/bindingAliasToComponentUrl2.qml b/tests/auto/qml/qqmllanguage/data/bindingAliasToComponentUrl2.qml
new file mode 100644
index 0000000000..cfdec5e39b
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/bindingAliasToComponentUrl2.qml
@@ -0,0 +1,11 @@
+import QtQuick
+Item {
+ id: root
+ Component {
+ id: accessibleNormal
+ ComponentType {
+ id: inaccessibleNormal
+ }
+ }
+ property alias accessibleNormalProgress: accessibleNormal.progress
+}
diff --git a/tests/auto/qml/qqmllanguage/data/componentMix.qml b/tests/auto/qml/qqmllanguage/data/componentMix.qml
new file mode 100644
index 0000000000..0edc997484
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/componentMix.qml
@@ -0,0 +1,18 @@
+import QtQml
+
+QtObject {
+ component View: QtObject {
+ default property Component delegate
+ }
+
+ component Things : QtObject {
+ property QtObject view: View { delegate: QtObject {} }
+ }
+
+ component Delegated : View {
+ delegate: QtObject {}
+ }
+
+ property Things things: Things {}
+ property Delegated delegated: Delegated {}
+}
diff --git a/tests/auto/qml/qqmllanguage/data/foreignExtended.qml b/tests/auto/qml/qqmllanguage/data/foreignExtended.qml
index 4863e0d567..b01af6d229 100644
--- a/tests/auto/qml/qqmllanguage/data/foreignExtended.qml
+++ b/tests/auto/qml/qqmllanguage/data/foreignExtended.qml
@@ -5,12 +5,17 @@ QtObject {
property Foreign foreign: Foreign {
objectName: "foreign"
}
- property Extended extended: Extended {}
+ property Extended extended: Extended {
+ objectName: "extended"
+ property int changeCount: 0
+ onExtensionChanged: ++changeCount
+ }
property ForeignExtended foreignExtended: ForeignExtended {
objectName: "foreignExtended"
}
property int extendedBase: extended.base
+ property int extendedChangeCount: extended.changeCount
property int extendedInvokable: extended.invokable()
property int extendedSlot: extended.slot()
diff --git a/tests/auto/qml/qqmllanguage/data/fuzzed.1.errors.txt b/tests/auto/qml/qqmllanguage/data/fuzzed.1.errors.txt
index e399799fe9..758be7feae 100644
--- a/tests/auto/qml/qqmllanguage/data/fuzzed.1.errors.txt
+++ b/tests/auto/qml/qqmllanguage/data/fuzzed.1.errors.txt
@@ -1,2 +1 @@
-2:8:Cannot assign to non-existent property "_G"
-
+2:11:Non-existent attached object
diff --git a/tests/auto/qml/qqmllanguage/data/groupFailure.qml b/tests/auto/qml/qqmllanguage/data/groupFailure.qml
new file mode 100644
index 0000000000..e8f8999482
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/groupFailure.qml
@@ -0,0 +1,5 @@
+import QtQml
+
+GroupFailureOuter {
+ b.u: null
+}
diff --git a/tests/auto/qml/qqmllanguage/data/jittedAsCast.qml b/tests/auto/qml/qqmllanguage/data/jittedAsCast.qml
new file mode 100644
index 0000000000..e1798a5d35
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/jittedAsCast.qml
@@ -0,0 +1,15 @@
+import QtQml
+
+QtObject {
+ property QtObject obj: Timer {
+ interval: 1
+ running: true
+ repeat: true
+ onTriggered: {
+ if (++interval === 10)
+ running = false
+ }
+ }
+ property bool running: (obj as Timer).running
+ property int interval: (obj as Timer).interval
+}
diff --git a/tests/auto/qml/qqmllanguage/data/sameNameAliasProperty.qml b/tests/auto/qml/qqmllanguage/data/sameNameAliasProperty.qml
new file mode 100644
index 0000000000..288fd618a6
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/sameNameAliasProperty.qml
@@ -0,0 +1,7 @@
+import QtQml 2.15
+
+QtObject {
+ id: root
+ property int a
+ property alias a: root.a
+}
diff --git a/tests/auto/qml/qqmllanguage/data/sameNamePropertyAlias.qml b/tests/auto/qml/qqmllanguage/data/sameNamePropertyAlias.qml
new file mode 100644
index 0000000000..bb26ba4396
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/sameNamePropertyAlias.qml
@@ -0,0 +1,7 @@
+import QtQml 2.15
+
+QtObject {
+ id: root
+ property alias a: root.a
+ property int a
+}
diff --git a/tests/auto/qml/qqmllanguage/data/signalInlineComponentArg1.qml b/tests/auto/qml/qqmllanguage/data/signalInlineComponentArg1.qml
new file mode 100644
index 0000000000..e20710edd9
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/signalInlineComponentArg1.qml
@@ -0,0 +1,30 @@
+import QtQuick
+
+// this file performs two tests: first, using a signal with a inline component from another file
+// and second, calling the signal from another file using an inline component from another file
+
+Item {
+ signal canYouFeelIt(arg1:SignalInlineComponentArg.Abc)
+
+ property SignalInlineComponentArg.Abc someAbc: SignalInlineComponentArg.Abc {
+ success: "Own signal was called with component from another file"
+ }
+
+ property SignalInlineComponentArg fromAnotherFile: SignalInlineComponentArg {}
+
+ // success of own signal call with parameter from another file
+ property string successFromOwnSignal: "Signal not called yet"
+ // makes it easier to test
+ property string successFromSignalFromFile: fromAnotherFile.success
+
+ Component.onCompleted: {
+ canYouFeelIt(someAbc);
+ fromAnotherFile.someAbc.success = "Signal was called from another file"
+ fromAnotherFile.canYouFeelIt(fromAnotherFile.someAbc)
+ }
+
+ onCanYouFeelIt: (arg) => {
+ successFromOwnSignal = arg.success
+ }
+}
+
diff --git a/tests/auto/qml/qqmllanguage/data/thisInArrow.qml b/tests/auto/qml/qqmllanguage/data/thisInArrow.qml
new file mode 100644
index 0000000000..7dd19782e6
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/thisInArrow.qml
@@ -0,0 +1,39 @@
+import QtQml
+
+QtObject {
+ id: root
+
+ property int width: 43
+ Component.onCompleted: () => { console.log(this.width); }
+
+ property var arrow: () => { return this; }
+ property var func: function() { return this; }
+
+ property QtObject child: QtObject {
+ property var aa;
+ property var ff;
+
+ Component.onCompleted: {
+ root.arrowResult = root.arrow();
+ root.funcResult = root.func();
+
+ var a = root.arrow;
+ root.aResult = a();
+ var f = root.func;
+ root.fResult = f();
+
+ aa = a;
+ root.aaResult = aa();
+
+ ff = f;
+ root.ffResult = ff();
+ }
+ }
+
+ property var arrowResult
+ property var funcResult
+ property var aResult
+ property var fResult
+ property var aaResult
+ property var ffResult
+}
diff --git a/tests/auto/qml/qqmllanguage/data/uncreatableAttached.qml b/tests/auto/qml/qqmllanguage/data/uncreatableAttached.qml
new file mode 100644
index 0000000000..4a861ea075
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/uncreatableAttached.qml
@@ -0,0 +1,8 @@
+import QtQml
+import ABC
+
+QtObject {
+ id: testItem
+ objectName: "00000000000000000000"
+ ItemAttached.attachedName: "111111111"
+}
diff --git a/tests/auto/qml/qqmllanguage/data/variantListConversion.qml b/tests/auto/qml/qqmllanguage/data/variantListConversion.qml
index 334bf17393..19760a64ee 100644
--- a/tests/auto/qml/qqmllanguage/data/variantListConversion.qml
+++ b/tests/auto/qml/qqmllanguage/data/variantListConversion.qml
@@ -1,7 +1,8 @@
import Test
+import QtQml
Foo {
a.a: 12
b.a: 13
- fooProperty: [a, b]
+ fooProperty: [a, b, Component]
}
diff --git a/tests/auto/qml/qqmllanguage/testtypes.cpp b/tests/auto/qml/qqmllanguage/testtypes.cpp
index fd541fd36a..92e24bc332 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.cpp
+++ b/tests/auto/qml/qqmllanguage/testtypes.cpp
@@ -177,7 +177,7 @@ void EnumSupportingCustomParser::verifyBindings(const QQmlRefPointer<QV4::Execut
return;
}
- if (binding->type != QV4::CompiledData::Binding::Type_Script) {
+ if (binding->type() != QV4::CompiledData::Binding::Type_Script) {
error(binding, QStringLiteral("Custom parser invoked with the wrong property value. Expected script that evaluates to enum"));
return;
}
diff --git a/tests/auto/qml/qqmllanguage/testtypes.h b/tests/auto/qml/qqmllanguage/testtypes.h
index 2ffc324cae..e43424c9ca 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.h
+++ b/tests/auto/qml/qqmllanguage/testtypes.h
@@ -1464,13 +1464,23 @@ public:
class Extension : public QObject
{
Q_OBJECT
- Q_PROPERTY(int extension READ extension CONSTANT)
+ Q_PROPERTY(int extension READ extension WRITE setExtension NOTIFY extensionChanged FINAL)
public:
Extension(QObject *parent = nullptr) : QObject(parent) {}
- int extension() const { return 42; }
+ int extension() const { return ext; }
+ void setExtension(int e) {
+ if (e != ext) {
+ ext = e;
+ emit extensionChanged();
+ }
+ }
Q_INVOKABLE int invokable() { return 123; }
+Q_SIGNALS:
+ void extensionChanged();
public slots:
int slot() { return 456; }
+private:
+ int ext = 42;
};
class Extended : public QObject
@@ -1566,6 +1576,33 @@ public:
int own() const { return 93; }
};
+class ExtendedNamespaceByObject : public QObject
+{
+ Q_OBJECT
+ QML_ELEMENT
+ QML_EXTENDED_NAMESPACE(Extension)
+
+ Q_PROPERTY(QString dummy READ dummy CONSTANT)
+ Q_PROPERTY(int extension READ extension WRITE setExtension NOTIFY extensionChanged)
+
+ int m_ext = 0;
+
+public:
+ ExtendedNamespaceByObject(QObject *parent = nullptr) : QObject(parent) {}
+ QString dummy() const { return QStringLiteral("dummy"); }
+ int extension() const { return m_ext; }
+ void setExtension(int e)
+ {
+ if (e != m_ext) {
+ m_ext = e;
+ Q_EMIT extensionChanged();
+ }
+ }
+
+Q_SIGNALS:
+ void extensionChanged();
+};
+
class FactorySingleton : public QObject
{
Q_OBJECT
@@ -1773,6 +1810,60 @@ private:
QVariantList mFooProperty;
};
+class ItemAttached : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString attachedName READ attachedName WRITE setAttachedName NOTIFY attachedNameChanged)
+ QML_ELEMENT
+ QML_ATTACHED(ItemAttached)
+public:
+ ItemAttached(QObject *parent = nullptr) : QObject(parent) {}
+
+ QString attachedName() const { return m_name; }
+ void setAttachedName(const QString &name)
+ {
+ if (name != m_name) {
+ m_name = name;
+ emit attachedNameChanged();
+ }
+ }
+
+ static ItemAttached *qmlAttachedProperties(QObject *object)
+ {
+ if (object->objectName() != QLatin1String("foo")) {
+ qWarning("Only foo can have ItemAttached!");
+ return nullptr;
+ }
+
+ return new ItemAttached(object);
+ }
+
+signals:
+ void attachedNameChanged();
+
+private:
+ QString m_name;
+};
+
+class BindableOnly : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QByteArray data READ data WRITE setData BINDABLE dataBindable FINAL)
+ QML_ELEMENT
+public:
+ BindableOnly(QObject *parent = nullptr)
+ : QObject(parent)
+ {}
+
+ QBindable<QByteArray> dataBindable() { return QBindable<QByteArray>(&m_data); }
+
+ QByteArray data() const { return m_data.value(); }
+ void setData(const QByteArray &newData) { m_data.setValue(newData); }
+
+private:
+ QProperty<QByteArray> m_data;
+};
+
void registerTypes();
#endif // TESTTYPES_H
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index d09f903ccb..047df2f6d0 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -50,11 +50,12 @@
#include <private/qqmlvmemetaobject_p.h>
#include <private/qqmlcomponent_p.h>
#include <private/qqmltype_p_p.h>
+#include <private/qqmlcomponentattached_p.h>
+#include <private/qv4debugging_p.h>
#include "testtypes.h"
-#include "testhttpserver.h"
-
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
#include <deque>
@@ -85,6 +86,9 @@ class tst_qqmllanguage : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qqmllanguage();
+
private slots:
void initTestCase() override;
void cleanupTestCase();
@@ -242,6 +246,8 @@ private slots:
void deepProperty();
+ void groupAssignmentFailure();
+
void compositeSingletonProperties();
void compositeSingletonSameEngine();
void compositeSingletonDifferentEngine();
@@ -345,6 +351,7 @@ private slots:
void checkURLtoURLObject();
void registerValueTypes();
void extendedNamespace();
+ void extendedNamespaceByObject();
void factorySingleton();
void extendedSingleton();
void qtbug_85932();
@@ -363,7 +370,23 @@ private slots:
void propertyObserverOnReadonly();
+ void propertyAndAliasMustHaveDistinctNames_data();
+ void propertyAndAliasMustHaveDistinctNames();
+
void variantListConversion();
+ void thisInArrowFunction();
+
+ void jittedAsCast();
+
+ void ambiguousContainingType();
+ void objectAsBroken();
+ void componentMix();
+ void uncreatableAttached();
+
+ void bindableOnly();
+ void badGroupedProperty();
+ void bindingAliasToComponentUrl();
+ void signalInlineComponentArg();
private:
QQmlEngine engine;
@@ -2141,6 +2164,22 @@ void tst_qqmllanguage::aliasProperties()
QCOMPARE(subItem->property("y").toInt(), 1);
}
+ // Nested property bindings on group properties that are actually aliases (QTBUG-94983)
+ {
+ QQmlComponent component(&engine, testFileUrl("alias.15a.qml"));
+ VERIFY_ERRORS(0);
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(!object.isNull());
+
+ QPointer<QObject> subItem = qvariant_cast<QObject*>(object->property("symbol"));
+ QVERIFY(!subItem.isNull());
+
+ QPointer<QObject> subSubItem = qvariant_cast<QObject*>(subItem->property("layer"));
+
+ QCOMPARE(subSubItem->property("enabled").value<bool>(), true);
+ }
+
// Alias to sub-object with binding (QTBUG-57041)
{
// This is shold *not* crash.
@@ -2218,6 +2257,16 @@ void tst_qqmllanguage::aliasProperties()
QQmlComponent component(&engine, testFileUrl("alias.18.qml"));
VERIFY_ERRORS("alias.18.errors.txt");
}
+
+ // Binding on deep alias
+ {
+ QQmlComponent component(&engine, testFileUrl("alias.19.qml"));
+ VERIFY_ERRORS(0);
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(!object.isNull());
+ QCOMPARE(object->property("height").toInt(), 960);
+ }
}
// QTBUG-13374 Test that alias properties and signals can coexist
@@ -3730,6 +3779,11 @@ void tst_qqmllanguage::uncreatableTypesAsProperties()
QVERIFY(!object.isNull());
}
+tst_qqmllanguage::tst_qqmllanguage()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qqmllanguage::initTestCase()
{
QQmlDataTest::initTestCase();
@@ -4355,6 +4409,17 @@ void tst_qqmllanguage::deepProperty()
QCOMPARE(font.family(), QStringLiteral("test"));
}
+void tst_qqmllanguage::groupAssignmentFailure()
+{
+ auto ep = std::make_unique<QQmlEngine>();
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, QRegularExpression(".*Invalid property assignment: url expected - Assigning null to incompatible properties in QML is deprecated. This will become a compile error in future versions of Qt..*"));
+ QQmlComponent component(ep.get(), testFileUrl("groupFailure.qml"));
+ QScopedPointer<QObject> o(component.create());
+ QVERIFY(!o);
+ ep.reset();
+ // ~QQmlComponent should not crash here
+}
+
// Tests that the implicit import has lowest precedence, in the case where
// there are conflicting types and types only found in the local import.
// Tests that just check one (or the root) type are in ::importsOrder
@@ -5502,9 +5567,20 @@ void tst_qqmllanguage::extendedForeignTypes()
QScopedPointer<QObject> o(component.create());
QVERIFY(!o.isNull());
+ QObject *extended = o->property("extended").value<QObject *>();
+ QVERIFY(extended);
+ QSignalSpy extensionChangedSpy(extended, SIGNAL(extensionChanged()));
+
QCOMPARE(o->property("extendedBase").toInt(), 43);
QCOMPARE(o->property("extendedExtension").toInt(), 42);
QCOMPARE(o->property("foreignExtendedExtension").toInt(), 42);
+
+ QCOMPARE(extensionChangedSpy.count(), 0);
+ extended->setProperty("extension", 44);
+ QCOMPARE(extensionChangedSpy.count(), 1);
+ QCOMPARE(o->property("extendedChangeCount").toInt(), 1);
+ QCOMPARE(o->property("extendedExtension").toInt(), 44);
+
QCOMPARE(o->property("foreignObjectName").toString(), QLatin1String("foreign"));
QCOMPARE(o->property("foreignExtendedObjectName").toString(), QLatin1String("foreignExtended"));
QCOMPARE(o->property("extendedInvokable").toInt(), 123);
@@ -6096,6 +6172,22 @@ void tst_qqmllanguage::extendedNamespace()
QCOMPARE(obj->property("fromExtension").toInt(), 9);
}
+void tst_qqmllanguage::extendedNamespaceByObject()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine);
+ c.setData("import StaticTest\n"
+ "import QtQml\n"
+ "ExtendedNamespaceByObject {\n"
+ " extension: 10\n"
+ "}", QUrl());
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> obj(c.create());
+ QVERIFY(!obj.isNull());
+
+ QCOMPARE(obj->property("extension").toInt(), 10);
+}
+
void tst_qqmllanguage::factorySingleton()
{
QQmlEngine engine;
@@ -6294,8 +6386,23 @@ void tst_qqmllanguage::bareInlineComponent()
QVERIFY(tab1Found);
}
+struct DummyDebugger : public QV4::Debugging::Debugger
+{
+ bool pauseAtNextOpportunity() const final { return false; }
+ void maybeBreakAtInstruction() final { }
+ void enteringFunction() final { }
+ void leavingFunction(const QV4::ReturnedValue &) final { }
+ void aboutToThrow() final { }
+};
+
void tst_qqmllanguage::hangOnWarning()
{
+ QQmlEngine engine;
+
+ // A debugger prevents the disk cache.
+ // If we load the file from disk cache we don't parse it and we don't see the warning.
+ engine.handle()->setDebugger(new DummyDebugger);
+
QTest::ignoreMessage(QtWarningMsg,
qPrintable(QStringLiteral("%1:3 : Ignored annotation")
.arg(testFileUrl("hangOnWarning.qml").toString())));
@@ -6355,6 +6462,26 @@ void tst_qqmllanguage::propertyObserverOnReadonly()
QCOMPARE(o->property("height").toDouble(), 54.2);
}
+void tst_qqmllanguage::propertyAndAliasMustHaveDistinctNames_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QString>("error");
+
+ QTest::addRow("sameNamePropertyAlias") << "sameNamePropertyAlias.qml" << "Property duplicates alias name";
+ QTest::addRow("sameNameAliasProperty") << "sameNameAliasProperty.qml" << "Alias has same name as existing property";
+}
+
+void tst_qqmllanguage::propertyAndAliasMustHaveDistinctNames()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QString, error);
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl(fileName));
+ QVERIFY(!c.isReady());
+ auto actualError = c.errorString();
+ QVERIFY2(actualError.contains(error), qPrintable(actualError));
+}
+
void tst_qqmllanguage::variantListConversion()
{
QQmlEngine engine;
@@ -6365,11 +6492,181 @@ void tst_qqmllanguage::variantListConversion()
Foo *foo = qobject_cast<Foo *>(o.data());
QVERIFY(foo);
const QVariantList list = foo->getList();
- QCOMPARE(list.length(), 2);
+ QCOMPARE(list.length(), 3);
const Large l0 = qvariant_cast<Large>(list.at(0));
QCOMPARE(l0.a, 12ull);
const Large l1 = qvariant_cast<Large>(list.at(1));
QCOMPARE(l1.a, 13ull);
+ const QObject *attached = qvariant_cast<QObject *>(list.at(2));
+ QVERIFY(attached);
+ QCOMPARE(attached->metaObject(), &QQmlComponentAttached::staticMetaObject);
+}
+
+void tst_qqmllanguage::thisInArrowFunction()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("thisInArrow.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+
+ QTest::ignoreMessage(QtDebugMsg, "43");
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+
+ QCOMPARE(qvariant_cast<QObject *>(o->property("arrowResult")), o.data());
+ QCOMPARE(qvariant_cast<QObject *>(o->property("funcResult")), o.data());
+ QCOMPARE(qvariant_cast<QObject *>(o->property("aResult")), o.data());
+ QCOMPARE(qvariant_cast<QObject *>(o->property("aaResult")), o.data());
+
+ QCOMPARE(qvariant_cast<QObject *>(o->property("fResult")), nullptr);
+ QCOMPARE(o->property("fResult").metaType(), QMetaType::fromType<QJSValue>());
+ QVERIFY(qvariant_cast<QJSValue>(o->property("fResult")).isObject());
+
+ QObject *child = qvariant_cast<QObject *>(o->property("child"));
+ QVERIFY(child != nullptr);
+ QCOMPARE(qvariant_cast<QObject *>(o->property("ffResult")), child);
+}
+
+void tst_qqmllanguage::jittedAsCast()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("jittedAsCast.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QCOMPARE(o->property("running").toBool(), true);
+ QTRY_COMPARE(o->property("running").toBool(), false);
+ QCOMPARE(o->property("interval").toInt(), 10);
+}
+
+void tst_qqmllanguage::ambiguousContainingType()
+{
+ // Need to do it twice, so that we load from disk cache the second time.
+ for (int i = 0; i < 2; ++i) {
+ QQmlEngine engine;
+
+ // Should not crash when loading the type
+ QQmlComponent c(&engine, testFileUrl("ambiguousBinding/ambiguousContainingType.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+ }
+}
+
+void tst_qqmllanguage::objectAsBroken()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("asBroken.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+ QVariant selfAsBroken = o->property("selfAsBroken");
+ QVERIFY(selfAsBroken.isValid());
+ QCOMPARE(selfAsBroken.metaType(), QMetaType::fromType<std::nullptr_t>());
+
+ QQmlComponent b(&engine, testFileUrl("Broken.qml"));
+ QVERIFY(b.isError());
+}
+
+void tst_qqmllanguage::componentMix()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("componentMix.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+ QObject *things = qvariant_cast<QObject *>(o->property("things"));
+ QVERIFY(things);
+ QObject *delegated = qvariant_cast<QObject *>(o->property("delegated"));
+ QVERIFY(delegated);
+ QObject *view = qvariant_cast<QObject *>(things->property("view"));
+ QVERIFY(view);
+ QObject *delegate = qvariant_cast<QObject *>(view->property("delegate"));
+ QVERIFY(delegate);
+ QCOMPARE(delegate->metaObject(), &QQmlComponent::staticMetaObject);
+ QObject *delegate2 = qvariant_cast<QObject *>(delegated->property("delegate"));
+ QVERIFY(delegate2);
+ QCOMPARE(delegate2->metaObject(), &QQmlComponent::staticMetaObject);
+}
+
+void tst_qqmllanguage::uncreatableAttached()
+{
+ qmlRegisterTypesAndRevisions<ItemAttached>("ABC", 1);
+ QQmlEngine engine;
+ const QUrl url = testFileUrl("uncreatableAttached.qml");
+ QQmlComponent c(&engine, url);
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QTest::ignoreMessage(QtWarningMsg, "Only foo can have ItemAttached!");
+ QScopedPointer o(c.create());
+ QVERIFY(o.isNull());
+ QVERIFY(c.errorString().contains(
+ QLatin1String("Could not create attached properties object 'ItemAttached'")));
+}
+
+void tst_qqmllanguage::bindableOnly()
+{
+ qmlRegisterTypesAndRevisions<BindableOnly>("ABC", 1);
+ QQmlEngine engine;
+
+ QQmlComponent c(&engine);
+ c.setData("import ABC\nBindableOnly {\n"
+ " data: \"sc\" + \"ore\"\n"
+ " objectName: data\n"
+ "}", QUrl(u"bindableOnly.qml"_qs));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+ QCOMPARE(o->property("data").value<QByteArray>(), QByteArray("score"));
+ QCOMPARE(o->objectName(), QStringLiteral("score"));
+}
+
+void tst_qqmllanguage::badGroupedProperty()
+{
+ QQmlEngine engine;
+ const QUrl url = testFileUrl("badGroupedProperty.qml");
+ QQmlComponent c(&engine, url);
+ QVERIFY(c.isError());
+ QCOMPARE(c.errorString(),
+ QStringLiteral("%1:6 Cannot assign to non-existent property \"onComplete\"\n")
+ .arg(url.toString()));
+}
+
+void tst_qqmllanguage::bindingAliasToComponentUrl()
+{
+ QQmlEngine engine;
+ {
+ QQmlComponent component(&engine, testFileUrl("bindingAliasToComponentUrl.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(object);
+ QCOMPARE(object->property("accessibleNormalUrl"), object->property("urlClone"));
+ }
+ {
+ QQmlComponent component(&engine, testFileUrl("bindingAliasToComponentUrl2.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(object);
+ QCOMPARE(object->property("accessibleNormalProgress"), QVariant(1.0));
+ }
+}
+
+void tst_qqmllanguage::signalInlineComponentArg()
+{
+ QQmlEngine engine;
+ {
+ QQmlComponent component(&engine, testFileUrl("SignalInlineComponentArg.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> object(component.create());
+
+ QCOMPARE(object->property("success"), QStringLiteral("Signal was called"));
+ }
+ {
+ QQmlComponent component(&engine, testFileUrl("signalInlineComponentArg1.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> object(component.create());
+
+ QCOMPARE(object->property("successFromOwnSignal"),
+ QStringLiteral("Own signal was called with component from another file"));
+ QCOMPARE(object->property("successFromSignalFromFile"),
+ QStringLiteral("Signal was called from another file"));
+ }
}
QTEST_MAIN(tst_qqmllanguage)
diff --git a/tests/auto/qml/qqmllistcompositor/tst_qqmllistcompositor.cpp b/tests/auto/qml/qqmllistcompositor/tst_qqmllistcompositor.cpp
index b49832499e..9315b2d24d 100644
--- a/tests/auto/qml/qqmllistcompositor/tst_qqmllistcompositor.cpp
+++ b/tests/auto/qml/qqmllistcompositor/tst_qqmllistcompositor.cpp
@@ -89,15 +89,13 @@ QT_END_NAMESPACE
static const C::Group Visible = C::Group(2);
static const C::Group Selection = C::Group(3);
+constexpr auto VisibleFlag = C::Flag(0x04);
+constexpr auto SelectionFlag = C::Flag(0x08);
+
class tst_qqmllistcompositor : public QObject
{
Q_OBJECT
- enum {
- VisibleFlag = 0x04,
- SelectionFlag = 0x08
- };
-
void populateChange(
C::Change &change, int sIndex, int vIndex, int dIndex, int cIndex, int count, int flags, int moveId)
{
diff --git a/tests/auto/qml/qqmllistmodel/CMakeLists.txt b/tests/auto/qml/qqmllistmodel/CMakeLists.txt
index d583dc3b0e..18c247f5b9 100644
--- a/tests/auto/qml/qqmllistmodel/CMakeLists.txt
+++ b/tests/auto/qml/qqmllistmodel/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmllistmodel
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmllistmodel.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qqmllistmodel
Qt::QmlModelsPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmllistmodel/data/destroyObject.qml b/tests/auto/qml/qqmllistmodel/data/destroyObject.qml
new file mode 100644
index 0000000000..e6b3f33bb9
--- /dev/null
+++ b/tests/auto/qml/qqmllistmodel/data/destroyObject.qml
@@ -0,0 +1,23 @@
+import QtQml
+
+QtObject {
+ id: root
+ property ListModel projects: ListModel {}
+ property var object
+
+ Component.onCompleted: {
+ var comp= Qt.createComponent("dummyItem.qml");
+ object = comp.createObject(root, {});
+ projects.append({"obj": object});
+ }
+
+ function destroy() {
+ try {
+ object.destroy();
+ } catch(e) {
+ console.warn(e);
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/tests/auto/qml/qqmllistmodel/data/dummyItem.qml b/tests/auto/qml/qqmllistmodel/data/dummyItem.qml
new file mode 100644
index 0000000000..c9939efcdf
--- /dev/null
+++ b/tests/auto/qml/qqmllistmodel/data/dummyItem.qml
@@ -0,0 +1,5 @@
+import QtQml
+
+QtObject {
+ property var random: null
+}
diff --git a/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml b/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml
new file mode 100644
index 0000000000..0ebb29d75b
--- /dev/null
+++ b/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml
@@ -0,0 +1,27 @@
+import QtQuick
+
+ListView {
+ id: root
+ width: 100
+ height: 100
+
+ delegate: Component {
+ Item {
+ property Item myItem: refItem
+ }
+ }
+
+ model: ListModel {
+ id: listModel
+ objectName: "listModel"
+
+ function addItem() {
+ append({"refItem": cppOwnedItem});
+ }
+ }
+
+ function checkItem() {
+ root.currentIndex = 0;
+ currentItem.myItem.dummy();
+ }
+}
diff --git a/tests/auto/qml/qqmllistmodel/data/protectQObjectFromGC.qml b/tests/auto/qml/qqmllistmodel/data/protectQObjectFromGC.qml
new file mode 100644
index 0000000000..43b375b681
--- /dev/null
+++ b/tests/auto/qml/qqmllistmodel/data/protectQObjectFromGC.qml
@@ -0,0 +1,21 @@
+import QtQml
+import QtQml.Models
+
+ListModel {
+ id: filesModel
+ property Component testComponent: Component {
+ id: testComponent
+ QtObject {
+ required property string name
+ }
+ }
+ Component.onCompleted: {
+ filesModel.clear()
+ for(let i = 0; i < 10; i++) {
+ filesModel.append({
+ path: testComponent.createObject(null, { name: "" + i })
+ })
+ }
+ gc()
+ }
+}
diff --git a/tests/auto/qml/qqmllistmodel/data/urls.qml b/tests/auto/qml/qqmllistmodel/data/urls.qml
index b7fe57402e..9e59a70cb6 100644
--- a/tests/auto/qml/qqmllistmodel/data/urls.qml
+++ b/tests/auto/qml/qqmllistmodel/data/urls.qml
@@ -4,16 +4,23 @@ import QtQml.Models 2
Item {
id: root
readonly property url url1: "http://qt-project.org"
+
property var result1
property var result2
+
+ property var alive1
+ property var alive2
+
ListModel {id: myModel}
Component.onCompleted: {
- myModel.append({"url": new URL("http://qt.io")})
- myModel.append({"url": url1})
+ myModel.append({"url": new URL("http://qt.io"), "alive": "indeed"})
+ myModel.append({"url": url1, "alive": "and kicking"})
const entry1 = myModel.get(0)
root.result1 = entry1.url;
+ root.alive1 = entry1.alive;
const entry2 = myModel.get(1)
root.result2 = entry2.url;
+ root.alive2 = entry2.alive;
}
}
diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
index a9b6ec03a4..fbdf6d90f3 100644
--- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
+++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
@@ -39,7 +39,7 @@
#include <QtCore/qtranslator.h>
#include <QSignalSpy>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
Q_DECLARE_METATYPE(QList<int>)
Q_DECLARE_METATYPE(QList<QVariantHash>)
@@ -74,6 +74,7 @@ class tst_qqmllistmodel : public QQmlDataTest
Q_OBJECT
public:
tst_qqmllistmodel()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qRegisterMetaType<QVector<int> >();
}
@@ -136,6 +137,9 @@ private slots:
void destroyObject();
void emptyStringNotUndefined();
void listElementWithTemplateString();
+ void destroyComponentObject();
+ void objectOwnershipFlip();
+ void protectQObjectFromGC();
};
bool tst_qqmllistmodel::compareVariantList(const QVariantList &testList, QVariant object)
@@ -1406,6 +1410,8 @@ void tst_qqmllistmodel::url()
QVERIFY(o);
QCOMPARE(o->property("result1").toUrl(), QUrl("http://qt.io"));
QCOMPARE(o->property("result2").toUrl(), QUrl("http://qt-project.org"));
+ QCOMPARE(o->property("alive1").toString(), QStringLiteral("indeed"));
+ QCOMPARE(o->property("alive2").toString(), QStringLiteral("and kicking"));
}
void tst_qqmllistmodel::datetime()
@@ -1856,6 +1862,84 @@ void tst_qqmllistmodel::listElementWithTemplateString()
QVERIFY(!root.isNull());
}
+//QTBUG-95895
+void tst_qqmllistmodel::destroyComponentObject()
+{
+ QQmlEngine eng;
+ QQmlComponent component(&eng, testFileUrl("destroyObject.qml"));
+ QVERIFY(!component.isError());
+ QScopedPointer<QObject> obj(component.create());
+ QVERIFY(!obj.isNull());
+ QQmlListModel *list = qvariant_cast<QQmlListModel *>(obj->property("projects"));
+ QVERIFY(list != nullptr);
+ QCOMPARE(list->count(), 1);
+ QPointer<QObject> created(qvariant_cast<QObject *>(obj->property("object")));
+ QVERIFY(!created.isNull());
+ QCOMPARE(list->get(0).property("obj").toQObject(), created.data());
+ QVariant retVal;
+ QMetaObject::invokeMethod(obj.data(),
+ "destroy",
+ Qt::DirectConnection,
+ Q_RETURN_ARG(QVariant, retVal));
+ QVERIFY(retVal.toBool());
+ QTRY_VERIFY(created.isNull());
+ QTRY_VERIFY(list->get(0).property("obj").isNull());
+ QCOMPARE(list->count(), 1);
+}
+
+// Used for objectOwnershipFlip
+class TestItem : public QQuickItem
+{
+ Q_OBJECT
+public:
+ // To trigger QQmlData::setImplicitDestructible through QV4::CallArgument::toValue
+ Q_INVOKABLE TestItem* dummy() { return this; }
+};
+
+void tst_qqmllistmodel::objectOwnershipFlip()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("objectOwnership.qml"));
+ QVERIFY(!component.isError());
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY(!root.isNull());
+ QQmlListModel *model = root->findChild<QQmlListModel*>("listModel");
+ QVERIFY(model != nullptr);
+
+ QScopedPointer<TestItem> item(new TestItem());
+ item->setObjectName("cppOwnedItem");
+ QJSEngine::setObjectOwnership(item.data(), QJSEngine::CppOwnership);
+ QCOMPARE(QJSEngine::objectOwnership(item.data()), QJSEngine::CppOwnership);
+
+ engine.rootContext()->setContextProperty("cppOwnedItem", item.data());
+
+ QMetaObject::invokeMethod(model, "addItem");
+ QCOMPARE(model->count(), 1);
+
+ QMetaObject::invokeMethod(root.data(), "checkItem");
+
+ QCOMPARE(QJSEngine::objectOwnership(item.data()), QJSEngine::CppOwnership);
+}
+
+void tst_qqmllistmodel::protectQObjectFromGC()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("protectQObjectFromGC.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY(!root.isNull());
+
+ QQmlListModel *listModel = qobject_cast<QQmlListModel *>(root.data());
+ QVERIFY(listModel);
+ QCOMPARE(listModel->count(), 10);
+
+ for (int i = 0; i < 10; ++i) {
+ QObject *element = qjsvalue_cast<QObject *>(listModel->get(i).property("path"));
+ QVERIFY(element);
+ QCOMPARE(element->property("name").toString(), QString::number(i));
+ }
+}
+
QTEST_MAIN(tst_qqmllistmodel)
#include "tst_qqmllistmodel.moc"
diff --git a/tests/auto/qml/qqmllistmodelworkerscript/CMakeLists.txt b/tests/auto/qml/qqmllistmodelworkerscript/CMakeLists.txt
index 66c7c3a557..577ba74f9a 100644
--- a/tests/auto/qml/qqmllistmodelworkerscript/CMakeLists.txt
+++ b/tests/auto/qml/qqmllistmodelworkerscript/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmllistmodelworkerscript
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmllistmodelworkerscript.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qqmllistmodelworkerscript
Qt::QmlModelsPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmllistmodelworkerscript/tst_qqmllistmodelworkerscript.cpp b/tests/auto/qml/qqmllistmodelworkerscript/tst_qqmllistmodelworkerscript.cpp
index 262ac25d6a..93378ff647 100644
--- a/tests/auto/qml/qqmllistmodelworkerscript/tst_qqmllistmodelworkerscript.cpp
+++ b/tests/auto/qml/qqmllistmodelworkerscript/tst_qqmllistmodelworkerscript.cpp
@@ -38,7 +38,7 @@
#include <QtCore/qtranslator.h>
#include <QSignalSpy>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
Q_DECLARE_METATYPE(QList<int>)
Q_DECLARE_METATYPE(QList<QVariantHash>)
@@ -73,6 +73,7 @@ class tst_qqmllistmodelworkerscript : public QQmlDataTest
Q_OBJECT
public:
tst_qqmllistmodelworkerscript()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qRegisterMetaType<QVector<int> >();
}
diff --git a/tests/auto/qml/qqmllistreference/CMakeLists.txt b/tests/auto/qml/qqmllistreference/CMakeLists.txt
index 15fa87b0b7..9d4b3cac7a 100644
--- a/tests/auto/qml/qqmllistreference/CMakeLists.txt
+++ b/tests/auto/qml/qqmllistreference/CMakeLists.txt
@@ -12,19 +12,21 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmllistreference
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmllistreference.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmllistreference)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp b/tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp
index 61565162e5..23b3847bc1 100644
--- a/tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp
+++ b/tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp
@@ -37,13 +37,13 @@
#include <QtQml/qqmlproperty.h>
#include <QDebug>
#include <private/qquickstate_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmllistreference : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmllistreference() {}
+ tst_qqmllistreference() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private:
void modeData();
diff --git a/tests/auto/qml/qqmllocale/CMakeLists.txt b/tests/auto/qml/qqmllocale/CMakeLists.txt
index 4022cb8cc4..ca7f464c37 100644
--- a/tests/auto/qml/qqmllocale/CMakeLists.txt
+++ b/tests/auto/qml/qqmllocale/CMakeLists.txt
@@ -12,14 +12,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmllocale
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmllocale.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Qml
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmllocale/data/functions.qml b/tests/auto/qml/qqmllocale/data/functions.qml
index 9fee78a836..42e26a508c 100644
--- a/tests/auto/qml/qqmllocale/data/functions.qml
+++ b/tests/auto/qml/qqmllocale/data/functions.qml
@@ -3,9 +3,6 @@ import QtQuick
QtObject {
property var locale: Qt.locale()
- // TODO: Workaround for not being able to use "Locale" in QQmlExpression (QTBUG-91747).
- property var localeType: Locale
-
function setLocale(l) {
locale = Qt.locale(l)
}
diff --git a/tests/auto/qml/qqmllocale/tst_qqmllocale.cpp b/tests/auto/qml/qqmllocale/tst_qqmllocale.cpp
index 3c9b1f1314..564c66c723 100644
--- a/tests/auto/qml/qqmllocale/tst_qqmllocale.cpp
+++ b/tests/auto/qml/qqmllocale/tst_qqmllocale.cpp
@@ -37,7 +37,7 @@
#include <QtCore/qscopedpointer.h>
#include <QtCore/qtimezone.h>
#include <qcolor.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <time.h>
@@ -45,7 +45,7 @@ class tst_qqmllocale : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmllocale() { }
+ tst_qqmllocale() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
private slots:
void defaultLocale();
@@ -659,15 +659,15 @@ void tst_qqmllocale::addFormattedDataSizeDataForLocale(const QString &localeStr)
expectedResult = locale.formattedDataSize(1000000, 3);
QTest::newRow(qPrintable(makeTag())) << localeStr << functionCallScript << expectedResult << expectedErrorMessage;
- functionCallScript = QLatin1String("locale.formattedDataSize(1000000, 3, localeType.DataSizeIecFormat)");
+ functionCallScript = QLatin1String("locale.formattedDataSize(1000000, 3, Locale.DataSizeIecFormat)");
expectedResult = locale.formattedDataSize(1000000, 3, QLocale::DataSizeIecFormat);
QTest::newRow(qPrintable(makeTag())) << localeStr << functionCallScript << expectedResult << expectedErrorMessage;
- functionCallScript = QLatin1String("locale.formattedDataSize(1000000, 3, localeType.DataSizeTraditionalFormat)");
+ functionCallScript = QLatin1String("locale.formattedDataSize(1000000, 3, Locale.DataSizeTraditionalFormat)");
expectedResult = locale.formattedDataSize(1000000, 3, QLocale::DataSizeTraditionalFormat);
QTest::newRow(qPrintable(makeTag())) << localeStr << functionCallScript << expectedResult << expectedErrorMessage;
- functionCallScript = QLatin1String("locale.formattedDataSize(1000000, 3, localeType.DataSizeSIFormat)");
+ functionCallScript = QLatin1String("locale.formattedDataSize(1000000, 3, Locale.DataSizeSIFormat)");
expectedResult = locale.formattedDataSize(1000000, 3, QLocale::DataSizeSIFormat);
QTest::newRow(qPrintable(makeTag())) << localeStr << functionCallScript << expectedResult << expectedErrorMessage;
}
@@ -691,7 +691,7 @@ void tst_qqmllocale::formattedDataSize_data()
QString errorMessage = ".*Locale: formattedDataSize\\(\\): Expected 1-3 arguments, but received 0";
QTest::newRow("too few args") << "en_AU" << functionCallScript << QString() << errorMessage;
- functionCallScript = "locale.formattedDataSize(10, 1, localeType.DataSizeIecFormat, \"foo\")";
+ functionCallScript = "locale.formattedDataSize(10, 1, Locale.DataSizeIecFormat, \"foo\")";
errorMessage = ".*Locale: formattedDataSize\\(\\): Expected 1-3 arguments, but received 4";
QTest::newRow("too many args") << "en_AU" << functionCallScript << QString() << errorMessage;
@@ -723,7 +723,9 @@ void tst_qqmllocale::formattedDataSize()
QVERIFY(QMetaObject::invokeMethod(object.data(), "setLocale", Qt::DirectConnection,
Q_ARG(QVariant, QVariant(localeStr))));
- QQmlExpression qmlExpression(engine.rootContext(), object.data(), functionCallScript);
+ // Make sure that we use the object's context rather than the root context,
+ // so that e.g. enums from the Locale type are available (QTBUG-91747).
+ QQmlExpression qmlExpression(qmlContext(object.data()), object.data(), functionCallScript);
const QVariant evaluationResult = qmlExpression.evaluate();
if (expectedErrorMessagePattern.isEmpty()) {
QVERIFY2(!qmlExpression.hasError(), qPrintable(qmlExpression.error().toString()));
@@ -1437,7 +1439,7 @@ void tst_qqmllocale::timeZoneUpdated()
obj.reset(c.create());
QVERIFY(obj);
-#if !defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)
+#if (!defined(Q_OS_LINUX) && !defined(Q_OS_QNX)) || defined(Q_OS_ANDROID)
QEXPECT_FAIL("",
"Date.timeZoneUpdated() only works on non-Android Linux with QT_CONFIG(timezone).",
Continue);
@@ -1449,7 +1451,7 @@ void tst_qqmllocale::timeZoneUpdated()
QMetaObject::invokeMethod(obj.data(), "check");
-#if !defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)
+#if (!defined(Q_OS_LINUX) && !defined(Q_OS_QNX)) || defined(Q_OS_ANDROID)
QEXPECT_FAIL("",
"Date.timeZoneUpdated() only works on non-Android Linux with QT_CONFIG(timezone).",
Continue);
diff --git a/tests/auto/qml/qqmlmetaobject/CMakeLists.txt b/tests/auto/qml/qqmlmetaobject/CMakeLists.txt
index c7ec398a5d..93edb03527 100644
--- a/tests/auto/qml/qqmlmetaobject/CMakeLists.txt
+++ b/tests/auto/qml/qqmlmetaobject/CMakeLists.txt
@@ -12,17 +12,19 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlmetaobject
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlmetaobject.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Qml
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlmetaobject)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlmetaobject/tst_qqmlmetaobject.cpp b/tests/auto/qml/qqmlmetaobject/tst_qqmlmetaobject.cpp
index af285fb58b..81c6b0d2a1 100644
--- a/tests/auto/qml/qqmlmetaobject/tst_qqmlmetaobject.cpp
+++ b/tests/auto/qml/qqmlmetaobject/tst_qqmlmetaobject.cpp
@@ -29,7 +29,7 @@
#include <QtTest/QtTest>
#include <QtQml/qqmlcomponent.h>
#include <QtQml/qqmlengine.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
Q_DECLARE_METATYPE(QMetaMethod::MethodType)
@@ -42,6 +42,10 @@ QML_DECLARE_TYPE(MyQmlObject)
class tst_QQmlMetaObject : public QQmlDataTest
{
Q_OBJECT
+
+public:
+ tst_QQmlMetaObject();
+
private slots:
void initTestCase() override;
@@ -54,6 +58,11 @@ private:
MyQmlObject myQmlObject;
};
+tst_QQmlMetaObject::tst_QQmlMetaObject()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQmlMetaObject::initTestCase()
{
QQmlDataTest::initTestCase();
diff --git a/tests/auto/qml/qqmlmetatype/CMakeLists.txt b/tests/auto/qml/qqmlmetatype/CMakeLists.txt
index 55eebaa651..74146bb49b 100644
--- a/tests/auto/qml/qqmlmetatype/CMakeLists.txt
+++ b/tests/auto/qml/qqmlmetatype/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlmetatype
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlmetatype.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -48,6 +46,9 @@ qt_internal_add_resource(tst_qqmlmetatype "qmake_qmldirresource"
${qmake_qmldirresource_resource_files}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlmetatype)
+endif()
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp b/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp
index 4d2e8c2b5d..f726855727 100644
--- a/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp
+++ b/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp
@@ -37,13 +37,13 @@
#include <private/qqmlpropertyvalueinterceptor_p.h>
#include <private/qqmlengine_p.h>
#include <private/qqmlanybinding_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlmetatype : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlmetatype() {}
+ tst_qqmlmetatype() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
@@ -72,6 +72,8 @@ private slots:
void enumsInRecursiveImport_data();
void enumsInRecursiveImport();
+
+ void clearPropertyCaches();
};
class TestType : public QObject
@@ -734,6 +736,24 @@ void tst_qqmlmetatype::enumsInRecursiveImport()
QTRY_COMPARE(obj->property("color").toString(), QString("green"));
}
+void tst_qqmlmetatype::clearPropertyCaches()
+{
+ qmlClearTypeRegistrations();
+ qmlRegisterType<TestType>("ClearPropertyCaches", 1, 0, "A");
+
+ QQmlRefPointer<QQmlPropertyCache> oldCache(
+ QQmlMetaType::propertyCache(&TestType::staticMetaObject));
+ QVERIFY(oldCache);
+
+ qmlClearTypeRegistrations();
+ qmlRegisterType<TestType>("ClearPropertyCaches", 1, 0, "B");
+ QQmlRefPointer<QQmlPropertyCache> newCache(
+ QQmlMetaType::propertyCache(&TestType::staticMetaObject));
+ QVERIFY(newCache);
+
+ QVERIFY(oldCache.data() != newCache.data());
+}
+
QTEST_MAIN(tst_qqmlmetatype)
#include "tst_qqmlmetatype.moc"
diff --git a/tests/auto/qml/qqmlmoduleplugin/CMakeLists.txt b/tests/auto/qml/qqmlmoduleplugin/CMakeLists.txt
index 18bd80b588..43b4c032df 100644
--- a/tests/auto/qml/qqmlmoduleplugin/CMakeLists.txt
+++ b/tests/auto/qml/qqmlmoduleplugin/CMakeLists.txt
@@ -20,17 +20,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlmoduleplugin
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlmoduleplugin.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
Qt::QuickShapesPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlmoduleplugin/protectedModule/plugin.cpp b/tests/auto/qml/qqmlmoduleplugin/protectedModule/plugin.cpp
index 4b58348962..8321e02d79 100644
--- a/tests/auto/qml/qqmlmoduleplugin/protectedModule/plugin.cpp
+++ b/tests/auto/qml/qqmlmoduleplugin/protectedModule/plugin.cpp
@@ -47,9 +47,9 @@ public:
void registerTypes(const char *uri) override
{
- // The module is protected. The plugin can still be loaded, but it cannot register
- // any types.
+ // Because the module is protected, this plugin should never be loaded
Q_UNUSED(uri);
+ Q_UNREACHABLE();
}
};
diff --git a/tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp b/tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp
index f1e6f7aa5a..dba70ac979 100644
--- a/tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp
+++ b/tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp
@@ -46,8 +46,8 @@
#include <unistd.h>
#endif
-#include "../../shared/testhttpserver.h"
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
// Note: this test does not use module identifier directives in the qmldir files, because
// it would result in repeated attempts to insert types into the same namespace.
@@ -58,6 +58,7 @@ class tst_qqmlmoduleplugin : public QQmlDataTest
{
Q_OBJECT
public:
+ tst_qqmlmoduleplugin();
private slots:
void initTestCase() override;
@@ -175,6 +176,11 @@ void registerStaticPlugin(const char *uri)
qRegisterStaticPluginFunction(plugin);
};
+tst_qqmlmoduleplugin::tst_qqmlmoduleplugin()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qqmlmoduleplugin::initTestCase()
{
QQmlDataTest::initTestCase();
diff --git a/tests/auto/qml/qqmlnotifier/CMakeLists.txt b/tests/auto/qml/qqmlnotifier/CMakeLists.txt
index 5cc0495393..4056f06458 100644
--- a/tests/auto/qml/qqmlnotifier/CMakeLists.txt
+++ b/tests/auto/qml/qqmlnotifier/CMakeLists.txt
@@ -12,16 +12,18 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlnotifier
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlnotifier.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlnotifier)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlnotifier/tst_qqmlnotifier.cpp b/tests/auto/qml/qqmlnotifier/tst_qqmlnotifier.cpp
index 836b94ad45..25eaa22b86 100644
--- a/tests/auto/qml/qqmlnotifier/tst_qqmlnotifier.cpp
+++ b/tests/auto/qml/qqmlnotifier/tst_qqmlnotifier.cpp
@@ -36,7 +36,7 @@
#include <QProcess>
#endif
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class ExportedClass : public QObject
{
@@ -140,7 +140,7 @@ class tst_qqmlnotifier : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlnotifier() {}
+ tst_qqmlnotifier() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp b/tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp
index 6265c6ca67..27ecf24f26 100644
--- a/tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp
+++ b/tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp
@@ -52,7 +52,9 @@ void tst_qqmlopenmetaobject::createProperties()
{
QQmlEngine engine;
CustomObject object;
- const QQmlRefPointer<QQmlOpenMetaObjectType> mot = new QQmlOpenMetaObjectType(object.metaObject());
+ const QQmlRefPointer<QQmlOpenMetaObjectType> mot(
+ new QQmlOpenMetaObjectType(object.metaObject()),
+ QQmlRefPointer<QQmlOpenMetaObjectType>::Adopt);
QQmlOpenMetaObject *const mo = new QQmlOpenMetaObject(&object, mot.data());
mo->setCached(true);
mot->createProperty("customProperty");
diff --git a/tests/auto/qml/qqmlparser/CMakeLists.txt b/tests/auto/qml/qqmlparser/CMakeLists.txt
index c322e29e94..004bb8ea31 100644
--- a/tests/auto/qml/qqmlparser/CMakeLists.txt
+++ b/tests/auto/qml/qqmlparser/CMakeLists.txt
@@ -12,16 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlparser
SOURCES
- ../../shared/qqmljsastdumper.cpp ../../shared/qqmljsastdumper.h
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlparser.cpp
DEFINES
SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"
- INCLUDE_DIRECTORIES
- ../../shared ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp b/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
index a480214219..1268ef8900 100644
--- a/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
+++ b/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
@@ -32,8 +32,8 @@
#include <private/qqmljsastvisitor_p.h>
#include <private/qqmljsast_p.h>
-#include "../../shared/util.h"
-#include "../../shared/qqmljsastdumper.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/qqmljsastdumper_p.h>
#include <qtest.h>
#include <QDir>
@@ -240,6 +240,7 @@ private:
}
tst_qqmlparser::tst_qqmlparser()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/qml/qqmlpromise/CMakeLists.txt b/tests/auto/qml/qqmlpromise/CMakeLists.txt
index e972ab08fb..ac0ffebabe 100644
--- a/tests/auto/qml/qqmlpromise/CMakeLists.txt
+++ b/tests/auto/qml/qqmlpromise/CMakeLists.txt
@@ -12,20 +12,22 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlpromise
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlpromise.cpp
DEFINES
QT_DISABLE_DEPRECATED_BEFORE=0
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlpromise)
+endif()
+
#### Keys ignored in scope 1:.:.:qqmlpromise.pro:<TRUE>:
# DISTFILES = "data/then-fulfilled-non-callable.qml" "data/then-reject-non-callable.qml" "data/then-resolve-multiple-then.qml" "data/then-resolve-chaining.qml" "data/then-reject-chaining.qml" "data/promise-resolve-with-value.qml" "data/promise-resolve-with-promise.qml" "data/promise-reject-with-value.qml" "data/promise-executor-resolve.qml" "data/promise-get-length.qml" "data/promise-executor-reject.qml" "data/promise-reject-catch.qml" "data/promise-async-resolve-with-value.qml" "data/promise-async-reject-with-value.qml" "data/promise-all-resolve.qml" "data/promise-all-empty-input.qml" "data/promise-resolve-with-array.qml" "data/promise-all-reject-reject-is-last.qml" "data/promise-all-reject-reject-is-mid.qml" "data/promise-race-resolve-1st.qml" "data/promise-race-empty-input.qml" "data/promise-race-resolve-2nd.qml" "data/promise-race-resolve-1st-in-executor-function.qml" "data/promise-resolve-is-a-function.qml" "data/promise-resolve-function-length.qml" "data/promise-all-invoke-then-method.qml" "data/promise-resolve-with-empty.qml" "data/promise-executor-throw-exception.qml" "data/promise-executor-function-extensible.qml" "data/promise-all-noniterable-input.qml"
# OTHER_FILES = <EMPTY>
diff --git a/tests/auto/qml/qqmlpromise/tst_qqmlpromise.cpp b/tests/auto/qml/qqmlpromise/tst_qqmlpromise.cpp
index b430434526..2049376a86 100644
--- a/tests/auto/qml/qqmlpromise/tst_qqmlpromise.cpp
+++ b/tests/auto/qml/qqmlpromise/tst_qqmlpromise.cpp
@@ -42,14 +42,14 @@
#include <QQmlComponent>
#include <QDebug>
#include <QScopedPointer>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlpromise : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlpromise() {}
+ tst_qqmlpromise() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void promise_all_empty_input();
diff --git a/tests/auto/qml/qqmlproperty/CMakeLists.txt b/tests/auto/qml/qqmlproperty/CMakeLists.txt
index 2dabf0f948..1c695251f9 100644
--- a/tests/auto/qml/qqmlproperty/CMakeLists.txt
+++ b/tests/auto/qml/qqmlproperty/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlproperty
SOURCES
- ../../shared/util.cpp ../../shared/util.h
interfaces.h
tst_qqmlproperty.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -47,4 +45,4 @@ set_target_properties(tst_qqmlproperty PROPERTIES
QT_QML_MODULE_URI io.qt.bugreports
)
-qt6_qml_type_registration(tst_qqmlproperty)
+_qt_internal_qml_type_registration(tst_qqmlproperty)
diff --git a/tests/auto/qml/qqmlproperty/data/bindToNonQObjectTarget.qml b/tests/auto/qml/qqmlproperty/data/bindToNonQObjectTarget.qml
new file mode 100644
index 0000000000..d8a06aa5f9
--- /dev/null
+++ b/tests/auto/qml/qqmlproperty/data/bindToNonQObjectTarget.qml
@@ -0,0 +1,20 @@
+import QtQuick
+
+Item {
+ id: top;
+ visible:true;
+ width:300;
+ height:300
+ Text {
+ id: text
+ width: 30; height: 30
+ text: "1234.56"
+ font.bold: true
+ Binding {
+ target: text.font // which is not a QObject, so can't use it as a binding target
+ property: 'bold'
+ value: false;
+ when: width < 30
+ }
+ }
+}
diff --git a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
index a1eae50048..7ea9b4183e 100644
--- a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
+++ b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
@@ -40,8 +40,11 @@
#if QT_CONFIG(regularexpression)
#include <QtCore/qregularexpression.h>
#endif
+#if QT_CONFIG(process)
+#include <QtCore/qprocess.h>
+#endif
#include <QtCore/private/qobject_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "qobject.h"
#include <QtQml/QQmlPropertyMap>
@@ -140,7 +143,7 @@ class tst_qqmlproperty : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlproperty() {}
+ tst_qqmlproperty() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
@@ -199,6 +202,10 @@ private slots:
void signalExpressionWithoutObject();
void dontRemoveQPropertyBinding();
+ void compatResolveUrls();
+
+ void bindToNonQObjectTarget();
+
private:
QQmlEngine engine;
};
@@ -1995,7 +2002,8 @@ void tst_qqmlproperty::copy()
{
PropertyObject object;
- QQmlProperty *property = new QQmlProperty(&object, QLatin1String("defaultProperty"));
+ QScopedPointer<QQmlProperty> property(
+ new QQmlProperty(&object, QLatin1String("defaultProperty")));
QCOMPARE(property->name(), QString("defaultProperty"));
QCOMPARE(property->read(), QVariant(10));
QCOMPARE(property->type(), QQmlProperty::Property);
@@ -2018,7 +2026,7 @@ void tst_qqmlproperty::copy()
QCOMPARE(p2.propertyTypeCategory(), QQmlProperty::Normal);
QCOMPARE(p2.propertyType(), QMetaType::Int);
- delete property; property = nullptr;
+ property.reset();
QCOMPARE(p1.name(), QString("defaultProperty"));
QCOMPARE(p1.read(), QVariant(10));
@@ -2031,6 +2039,16 @@ void tst_qqmlproperty::copy()
QCOMPARE(p2.type(), QQmlProperty::Property);
QCOMPARE(p2.propertyTypeCategory(), QQmlProperty::Normal);
QCOMPARE(p2.propertyType(), QMetaType::Int);
+
+ p1 = QQmlProperty();
+ QQmlPropertyPrivate *p2d = QQmlPropertyPrivate::get(p2);
+ QCOMPARE(p2d->count(), 1);
+
+ // Use a pointer to avoid compiler warning about self-assignment.
+ QQmlProperty *p2p = &p2;
+ *p2p = p2;
+
+ QCOMPARE(p2d->count(), 1);
}
void tst_qqmlproperty::noContext()
@@ -2300,6 +2318,64 @@ void tst_qqmlproperty::dontRemoveQPropertyBinding()
QVERIFY(!object.bindableObjectName().hasBinding());
}
+void tst_qqmlproperty::compatResolveUrls()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine);
+ c.setData(R"(
+ import QtQml
+ QtObject {
+ property url a: "relative/url.png"
+ }
+ )", QUrl(QStringLiteral("qrc:/some/resource/path.qml")));
+ QVERIFY(c.isReady());
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+
+ if (qEnvironmentVariableIsSet("QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT")) {
+ QCOMPARE(qvariant_cast<QUrl>(o->property("a")),
+ QUrl(QStringLiteral("qrc:/some/resource/relative/url.png")));
+ return;
+ }
+
+ QCOMPARE(qvariant_cast<QUrl>(o->property("a")), QUrl(QStringLiteral("relative/url.png")));
+
+#ifdef Q_OS_ANDROID
+ QSKIP("Can't start QProcess to run a custom user binary on Android");
+#endif
+
+#if QT_CONFIG(process)
+ QProcess process;
+ process.setProgram(QCoreApplication::applicationFilePath());
+ process.setEnvironment(QProcess::systemEnvironment()
+ + QStringList(u"QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT=1"_qs));
+ process.setArguments({QStringLiteral("compatResolveUrls")});
+ process.start();
+ QVERIFY(process.waitForFinished());
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 0);
+#else
+ QSKIP("Testing the QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT "
+ "environment variable requires QProcess.");
+#endif
+}
+
+void tst_qqmlproperty::bindToNonQObjectTarget()
+{
+ QQmlEngine engine;
+ const QUrl url = testFileUrl("bindToNonQObjectTarget.qml");
+ QQmlComponent component(&engine, url);
+
+ // Yes, we can still create the component. The result of the script expression will only be
+ // known once it's executed.
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+
+ QTest::ignoreMessage(QtWarningMsg,
+ qPrintable(url.toString() + ":14:7: Unable to assign QFont to QObject*"));
+ QScopedPointer<QObject> o(component.create());
+ QVERIFY(!o.isNull());
+}
+
QTEST_MAIN(tst_qqmlproperty)
#include "tst_qqmlproperty.moc"
diff --git a/tests/auto/qml/qqmlpropertycache/CMakeLists.txt b/tests/auto/qml/qqmlpropertycache/CMakeLists.txt
index 55f8c7b76b..cb396998bc 100644
--- a/tests/auto/qml/qqmlpropertycache/CMakeLists.txt
+++ b/tests/auto/qml/qqmlpropertycache/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlpropertycache
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlpropertycache.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp b/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp
index a3d84e3eb6..f8ca5e067e 100644
--- a/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp
+++ b/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp
@@ -34,13 +34,13 @@
#include <private/qmetaobjectbuilder_p.h>
#include <private/qqmlcontextdata_p.h>
#include <QCryptographicHash>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlpropertycache : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlpropertycache() {}
+ tst_qqmlpropertycache() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void properties();
@@ -200,9 +200,8 @@ void tst_qqmlpropertycache::properties()
DerivedObject object;
const QMetaObject *metaObject = object.metaObject();
- QQmlRefPointer<QQmlPropertyCache> cache(new QQmlPropertyCache(metaObject),
- QQmlRefPointer<QQmlPropertyCache>::Adopt);
- QQmlPropertyData *data;
+ QQmlRefPointer<QQmlPropertyCache> cache = QQmlPropertyCache::createStandalone(metaObject);
+ const QQmlPropertyData *data;
QVERIFY((data = cacheProperty(cache, "propertyA")));
QCOMPARE(data->coreIndex(), metaObject->indexOfProperty("propertyA"));
@@ -223,12 +222,12 @@ void tst_qqmlpropertycache::propertiesDerived()
DerivedObject object;
const QMetaObject *metaObject = object.metaObject();
- QQmlRefPointer<QQmlPropertyCache> parentCache(
- new QQmlPropertyCache(&BaseObject::staticMetaObject),
+ QQmlRefPointer<QQmlPropertyCache> parentCache
+ = QQmlPropertyCache::createStandalone(&BaseObject::staticMetaObject);
+ QQmlRefPointer<QQmlPropertyCache> cache(
+ parentCache->copyAndAppend(object.metaObject(), QTypeRevision()),
QQmlRefPointer<QQmlPropertyCache>::Adopt);
- QQmlRefPointer<QQmlPropertyCache> cache(parentCache->copyAndAppend(object.metaObject(), QTypeRevision()),
- QQmlRefPointer<QQmlPropertyCache>::Adopt);
- QQmlPropertyData *data;
+ const QQmlPropertyData *data;
QVERIFY((data = cacheProperty(cache, "propertyA")));
QCOMPARE(data->coreIndex(), metaObject->indexOfProperty("propertyA"));
@@ -251,11 +250,10 @@ void tst_qqmlpropertycache::revisionedProperties()
DerivedObject object;
const QMetaObject *metaObject = object.metaObject();
- QQmlRefPointer<QQmlPropertyCache> cacheWithoutVersion(new QQmlPropertyCache(metaObject),
- QQmlRefPointer<QQmlPropertyCache>::Adopt);
- QQmlRefPointer<QQmlPropertyCache> cacheWithVersion(
- new QQmlPropertyCache(metaObject, QTypeRevision::fromMinorVersion(1)),
- QQmlRefPointer<QQmlPropertyCache>::Adopt);
+ QQmlRefPointer<QQmlPropertyCache> cacheWithoutVersion
+ = QQmlPropertyCache::createStandalone(metaObject);
+ QQmlRefPointer<QQmlPropertyCache> cacheWithVersion
+ = QQmlPropertyCache::createStandalone(metaObject, QTypeRevision::fromMinorVersion(1));
QQmlPropertyData *data;
QVERIFY((data = cacheProperty(cacheWithoutVersion, "propertyE")));
@@ -269,9 +267,8 @@ void tst_qqmlpropertycache::methods()
DerivedObject object;
const QMetaObject *metaObject = object.metaObject();
- QQmlRefPointer<QQmlPropertyCache> cache(new QQmlPropertyCache(metaObject),
- QQmlRefPointer<QQmlPropertyCache>::Adopt);
- QQmlPropertyData *data;
+ QQmlRefPointer<QQmlPropertyCache> cache(QQmlPropertyCache::createStandalone(metaObject));
+ const QQmlPropertyData *data;
QVERIFY((data = cacheProperty(cache, "slotA")));
QCOMPARE(data->coreIndex(), metaObject->indexOfMethod("slotA()"));
@@ -305,10 +302,10 @@ void tst_qqmlpropertycache::methodsDerived()
const QMetaObject *metaObject = object.metaObject();
QQmlRefPointer<QQmlPropertyCache> parentCache(
- new QQmlPropertyCache(&BaseObject::staticMetaObject),
+ QQmlPropertyCache::createStandalone(&BaseObject::staticMetaObject));
+ QQmlRefPointer<QQmlPropertyCache> cache(
+ parentCache->copyAndAppend(object.metaObject(), QTypeRevision {}),
QQmlRefPointer<QQmlPropertyCache>::Adopt);
- QQmlRefPointer<QQmlPropertyCache> cache(parentCache->copyAndAppend(object.metaObject(), QTypeRevision {}),
- QQmlRefPointer<QQmlPropertyCache>::Adopt);
QQmlPropertyData *data;
QVERIFY((data = cacheProperty(cache, "slotA")));
@@ -342,9 +339,8 @@ void tst_qqmlpropertycache::signalHandlers()
DerivedObject object;
const QMetaObject *metaObject = object.metaObject();
- QQmlRefPointer<QQmlPropertyCache> cache(new QQmlPropertyCache(metaObject),
- QQmlRefPointer<QQmlPropertyCache>::Adopt);
- QQmlPropertyData *data;
+ QQmlRefPointer<QQmlPropertyCache> cache(QQmlPropertyCache::createStandalone(metaObject));
+ const QQmlPropertyData *data;
QVERIFY((data = cacheProperty(cache, "onSignalA")));
QCOMPARE(data->coreIndex(), metaObject->indexOfMethod("signalA()"));
@@ -372,10 +368,10 @@ void tst_qqmlpropertycache::signalHandlersDerived()
const QMetaObject *metaObject = object.metaObject();
QQmlRefPointer<QQmlPropertyCache> parentCache(
- new QQmlPropertyCache(&BaseObject::staticMetaObject),
+ QQmlPropertyCache::createStandalone(&BaseObject::staticMetaObject));
+ QQmlRefPointer<QQmlPropertyCache> cache(
+ parentCache->copyAndAppend(object.metaObject(), QTypeRevision{}),
QQmlRefPointer<QQmlPropertyCache>::Adopt);
- QQmlRefPointer<QQmlPropertyCache> cache(parentCache->copyAndAppend(object.metaObject(), QTypeRevision{}),
- QQmlRefPointer<QQmlPropertyCache>::Adopt);
QQmlPropertyData *data;
QVERIFY((data = cacheProperty(cache, "onSignalA")));
@@ -578,10 +574,28 @@ class TestClassWithClassInfo : public QObject
#define ARRAY_SIZE(arr) \
int(sizeof(arr) / sizeof(arr[0]))
+template <typename T, typename = void>
+struct SizeofOffsetsAndSizes_helper
+{
+ static constexpr size_t value = sizeof(T::offsetsAndSize); // old moc
+};
+
+template <typename T>
+struct SizeofOffsetsAndSizes_helper<T, std::void_t<decltype(T::offsetsAndSizes)>>
+{
+ static constexpr size_t value = sizeof(T::offsetsAndSizes); // new moc
+};
+
+template <typename T>
+constexpr size_t sizeofOffsetsAndSizes(const T &)
+{
+ return SizeofOffsetsAndSizes_helper<T>::value;
+}
+
#define TEST_CLASS(Class) \
QTest::newRow(#Class) \
<< &Class::staticMetaObject << ARRAY_SIZE(qt_meta_data_##Class) \
- << int(sizeof(qt_meta_stringdata_##Class.offsetsAndSize) / (sizeof(uint) * 2))
+ << int(sizeofOffsetsAndSizes(qt_meta_stringdata_##Class) / (sizeof(uint) * 2))
Q_DECLARE_METATYPE(const QMetaObject*);
diff --git a/tests/auto/qml/qqmlpropertymap/CMakeLists.txt b/tests/auto/qml/qqmlpropertymap/CMakeLists.txt
index 3092aa4eb2..291c221b23 100644
--- a/tests/auto/qml/qqmlpropertymap/CMakeLists.txt
+++ b/tests/auto/qml/qqmlpropertymap/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlpropertymap
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlpropertymap.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlpropertymap/data/cached.qml b/tests/auto/qml/qqmlpropertymap/data/cached.qml
new file mode 100644
index 0000000000..3222a672c3
--- /dev/null
+++ b/tests/auto/qml/qqmlpropertymap/data/cached.qml
@@ -0,0 +1,5 @@
+import QtQml
+
+QtObject {
+ property string text: map ? map.c : "yada"
+}
diff --git a/tests/auto/qml/qqmlpropertymap/dummy_imports.qml b/tests/auto/qml/qqmlpropertymap/dummy_imports.qml
index 4ae9d3f2cf..63d33cbea6 100644
--- a/tests/auto/qml/qqmlpropertymap/dummy_imports.qml
+++ b/tests/auto/qml/qqmlpropertymap/dummy_imports.qml
@@ -1,8 +1,7 @@
// This file exists for the sole purpose for qmlimportscanner to find
// which modules it needs to extract for deployment.
-// Otherwise, it fails to find the imports that are expressed in the
-// C++ code belonging to the test.
+// Otherwise, it fails to find the imports that are expressed in C++.
-import QtQuick 2.0
+import QtQuick
-QtObject { } // This is needed in order to keep importscanner happy
+QtObject { }
diff --git a/tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp b/tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp
index 07afc69a6d..a6eca4825a 100644
--- a/tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp
+++ b/tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp
@@ -26,7 +26,7 @@
**
****************************************************************************/
#include <qtest.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlcontext.h>
#include <QtQml/qqmlpropertymap.h>
@@ -39,7 +39,7 @@ class tst_QQmlPropertyMap : public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQmlPropertyMap() {}
+ tst_QQmlPropertyMap() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
@@ -64,6 +64,7 @@ private slots:
void QTBUG_48136();
void lookupsInSubTypes();
void freeze();
+ void cachedSignals();
};
class LazyPropertyMap : public QQmlPropertyMap, public QQmlParserStatus
@@ -595,6 +596,46 @@ void tst_QQmlPropertyMap::freeze()
QCOMPARE(map.value("key1").toString(), QStringLiteral("Hello World"));
}
+class Map: public QQmlPropertyMap
+{
+ Q_OBJECT
+public:
+ Map(QObject *parent = nullptr)
+ : QQmlPropertyMap(this, parent)
+ {
+ insert( "a", u"yayayaya"_qs );
+ insert( "b", u"yayayayb"_qs);
+ insert( "c", u"yayayayc"_qs);
+ insert( "d", u"yayayayd"_qs);
+
+ freeze();
+ }
+};
+
+void tst_QQmlPropertyMap::cachedSignals()
+{
+ Map foo;
+ QQmlEngine engine;
+ engine.rootContext()->setContextProperty("map", &foo);
+ const QUrl url = testFileUrl("cached.qml");
+ QQmlComponent c(&engine, url);
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+ QCOMPARE(o->property("text").toString(), u"yayayayc"_qs);
+ foo.setProperty("c", u"something"_qs);
+ QCOMPARE(o->property("text").toString(), u"something"_qs);
+ foo.insert("c", u"other"_qs);
+ QCOMPARE(o->property("text").toString(), u"other"_qs);
+ QTest::ignoreMessage(
+ QtWarningMsg,
+ qPrintable(url.toString() + u":4:5: Unable to assign [undefined] to QString"_qs));
+ foo.clear("c");
+ QCOMPARE(o->property("text").toString(), u"other"_qs);
+ foo.insert("c", u"final"_qs);
+ QCOMPARE(o->property("text").toString(), u"final"_qs);
+}
+
QTEST_MAIN(tst_QQmlPropertyMap)
#include "tst_qqmlpropertymap.moc"
diff --git a/tests/auto/qml/qqmlqt/CMakeLists.txt b/tests/auto/qml/qqmlqt/CMakeLists.txt
index 1c965d5c5a..863057372b 100644
--- a/tests/auto/qml/qqmlqt/CMakeLists.txt
+++ b/tests/auto/qml/qqmlqt/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlqt
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlqt.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlqt/data/Other/A.qml b/tests/auto/qml/qqmlqt/data/Other/A.qml
new file mode 100644
index 0000000000..7f0ce43d00
--- /dev/null
+++ b/tests/auto/qml/qqmlqt/data/Other/A.qml
@@ -0,0 +1,8 @@
+import QtQml
+
+QtObject {
+ property QtObject there: QtObject {}
+ property url here: Qt.resolvedUrl(somewhere, there)
+ property url somewhere
+}
+
diff --git a/tests/auto/qml/qqmlqt/data/Other/qmldir b/tests/auto/qml/qqmlqt/data/Other/qmldir
new file mode 100644
index 0000000000..bee6252331
--- /dev/null
+++ b/tests/auto/qml/qqmlqt/data/Other/qmldir
@@ -0,0 +1,2 @@
+module Other
+A 1.0 A.qml
diff --git a/tests/auto/qml/qqmlqt/data/resolvedUrl.qml b/tests/auto/qml/qqmlqt/data/resolvedUrl.qml
index aa57c73627..77c00c8618 100644
--- a/tests/auto/qml/qqmlqt/data/resolvedUrl.qml
+++ b/tests/auto/qml/qqmlqt/data/resolvedUrl.qml
@@ -1,6 +1,8 @@
import QtQuick 2.0
+import Other
QtObject {
+ id: self
property string result
property bool isString: false
property bool isObject: false
@@ -11,5 +13,19 @@ QtObject {
isString = (typeof a) == "string"
isObject = (typeof a) == "object"
}
+
+ property A here: A {
+ there: self
+ somewhere: "somewhere.qml"
+ }
+
+ property A there: A {
+ somewhere: "somewhere.qml"
+ }
+
+ property url resolvedHere: here.here
+ property url resolvedThere: there.here
+
+ property var unresolvedUrl: Qt.url("nowhere/else.js")
}
diff --git a/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp b/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
index 62e42072b0..98308ddfa9 100644
--- a/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
+++ b/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
@@ -44,14 +44,14 @@
#include <QQuaternion>
#include <QMatrix4x4>
#include <QFont>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qglobal_p.h>
class tst_qqmlqt : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlqt() {}
+ tst_qqmlqt() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
@@ -634,8 +634,9 @@ void tst_qqmlqt::openUrlExternally()
{
MyUrlHandler handler;
+ const QUrl htmlTestFile = testFileUrl("test.html");
QDesktopServices::setUrlHandler("test", &handler, "noteCall");
- QDesktopServices::setUrlHandler("file", &handler, "noteCall");
+ QDesktopServices::setUrlHandler(htmlTestFile.scheme(), &handler, "noteCall");
QQmlComponent component(&engine, testFileUrl("openUrlExternally.qml"));
QScopedPointer<QObject> object(component.create());
@@ -646,18 +647,19 @@ void tst_qqmlqt::openUrlExternally()
object->setProperty("testFile", true);
QCOMPARE(handler.called,2);
- QCOMPARE(handler.last, testFileUrl("test.html"));
+ QCOMPARE(handler.last, htmlTestFile);
QDesktopServices::unsetUrlHandler("test");
- QDesktopServices::unsetUrlHandler("file");
+ QDesktopServices::unsetUrlHandler(htmlTestFile.scheme());
}
void tst_qqmlqt::openUrlExternally_pragmaLibrary()
{
MyUrlHandler handler;
+ const QUrl htmlTestFile = testFileUrl("test.html");
QDesktopServices::setUrlHandler("test", &handler, "noteCall");
- QDesktopServices::setUrlHandler("file", &handler, "noteCall");
+ QDesktopServices::setUrlHandler(htmlTestFile.scheme(), &handler, "noteCall");
QQmlComponent component(&engine, testFileUrl("openUrlExternally_lib.qml"));
QScopedPointer<QObject> object(component.create());
@@ -668,10 +670,10 @@ void tst_qqmlqt::openUrlExternally_pragmaLibrary()
object->setProperty("testFile", true);
QCOMPARE(handler.called,2);
- QCOMPARE(handler.last, testFileUrl("test.html"));
+ QCOMPARE(handler.last, htmlTestFile);
QDesktopServices::unsetUrlHandler("test");
- QDesktopServices::unsetUrlHandler("file");
+ QDesktopServices::unsetUrlHandler(htmlTestFile.scheme());
}
void tst_qqmlqt::md5()
@@ -1166,6 +1168,8 @@ void tst_qqmlqt::exit()
void tst_qqmlqt::resolvedUrl()
{
+ QQmlEngine engine;
+ engine.addImportPath(dataDirectory());
QQmlComponent component(&engine, testFileUrl("resolvedUrl.qml"));
QScopedPointer<QObject> object(component.create());
@@ -1174,6 +1178,15 @@ void tst_qqmlqt::resolvedUrl()
QCOMPARE(object->property("result").toString(), component.url().toString());
QCOMPARE(object->property("isString").toBool(), false);
QCOMPARE(object->property("isObject").toBool(), true);
+
+ QCOMPARE(qvariant_cast<QUrl>(object->property("resolvedHere")),
+ dataDirectoryUrl().resolved(QStringLiteral("somewhere.qml")));
+ QCOMPARE(qvariant_cast<QUrl>(object->property("resolvedThere")),
+ dataDirectoryUrl().resolved(QStringLiteral("Other/somewhere.qml")));
+
+ QVariant unresolved = object->property("unresolvedUrl");
+ QCOMPARE(unresolved.metaType(), QMetaType::fromType<QUrl>());
+ QCOMPARE(qvariant_cast<QUrl>(unresolved), QUrl(QStringLiteral("nowhere/else.js")));
}
void tst_qqmlqt::later_data()
@@ -1354,7 +1367,7 @@ class TimeZoneSwitch
{
public:
TimeZoneSwitch(const char *newZone)
- : doChangeZone(qstrcmp(newZone, "localtime") == 0)
+ : doChangeZone(qstrcmp(newZone, "localtime") != 0)
{
if (!doChangeZone)
return;
@@ -1392,6 +1405,9 @@ void tst_qqmlqt::timeRoundtrip_data()
// Local timezone:
QTest::newRow("localtime") << QTime(0, 0, 0);
+#if defined(Q_OS_WIN) || defined(Q_OS_ANDROID) || defined(Q_OS_MACOS)
+ qInfo("Omitting the tests that depend on setting local time's zone");
+#else
// No DST:
QTest::newRow("UTC") << QTime(0, 0, 0);
QTest::newRow("Europe/Amsterdam") << QTime(1, 0, 0);
@@ -1403,14 +1419,11 @@ void tst_qqmlqt::timeRoundtrip_data()
QTest::newRow("Australia/Hobart") << QTime(10, 0, 0);
QTest::newRow("Pacific/Auckland") << QTime(12, 0, 0);
QTest::newRow("Pacific/Samoa") << QTime(13, 0, 0);
+#endif
}
void tst_qqmlqt::timeRoundtrip()
{
-#ifdef Q_OS_WIN
- QSKIP("On Windows, the DateObject doesn't handle DST transitions correctly when the timezone is not localtime."); // I.e.: for this test.
-#endif
-
TimeZoneSwitch tzs(QTest::currentDataTag());
QFETCH(QTime, time);
qmlRegisterTypesAndRevisions<TimeProvider>("Test", 1);
diff --git a/tests/auto/qml/qqmlsettings/CMakeLists.txt b/tests/auto/qml/qqmlsettings/CMakeLists.txt
index 01d35824da..5b5ba1e257 100644
--- a/tests/auto/qml/qqmlsettings/CMakeLists.txt
+++ b/tests/auto/qml/qqmlsettings/CMakeLists.txt
@@ -12,13 +12,11 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlsettings
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlsettings.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlsettings/tst_qqmlsettings.cpp b/tests/auto/qml/qqmlsettings/tst_qqmlsettings.cpp
index 60daeb0724..baaf126be3 100644
--- a/tests/auto/qml/qqmlsettings/tst_qqmlsettings.cpp
+++ b/tests/auto/qml/qqmlsettings/tst_qqmlsettings.cpp
@@ -34,12 +34,15 @@
#include <QtGui/QFont>
#include <QtQml/QQmlEngine>
#include <QtQml/QQmlComponent>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_QQmlSettings : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_QQmlSettings();
+
private slots:
void initTestCase() override;
@@ -144,6 +147,11 @@ private:
QFont m_fontProperty;
};
+tst_QQmlSettings::tst_QQmlSettings()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQmlSettings::initTestCase()
{
QQmlDataTest::initTestCase();
diff --git a/tests/auto/qml/qqmlsqldatabase/CMakeLists.txt b/tests/auto/qml/qqmlsqldatabase/CMakeLists.txt
index b9762b2eb6..aa40348e42 100644
--- a/tests/auto/qml/qqmlsqldatabase/CMakeLists.txt
+++ b/tests/auto/qml/qqmlsqldatabase/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlsqldatabase
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlsqldatabase.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qqmlsqldatabase
Qt::QmlPrivate
Qt::QuickPrivate
Qt::Sql
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlsqldatabase/dummy_imports.qml b/tests/auto/qml/qqmlsqldatabase/dummy_imports.qml
index 4ae9d3f2cf..63d33cbea6 100644
--- a/tests/auto/qml/qqmlsqldatabase/dummy_imports.qml
+++ b/tests/auto/qml/qqmlsqldatabase/dummy_imports.qml
@@ -1,8 +1,7 @@
// This file exists for the sole purpose for qmlimportscanner to find
// which modules it needs to extract for deployment.
-// Otherwise, it fails to find the imports that are expressed in the
-// C++ code belonging to the test.
+// Otherwise, it fails to find the imports that are expressed in C++.
-import QtQuick 2.0
+import QtQuick
-QtObject { } // This is needed in order to keep importscanner happy
+QtObject { }
diff --git a/tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp b/tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp
index 654877c7ea..b1516644a3 100644
--- a/tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp
+++ b/tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp
@@ -34,13 +34,14 @@
#include <QtSql/qsqldatabase.h>
#include <QtCore/qdir.h>
#include <QtCore/qfile.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmlsqldatabase : public QQmlDataTest
{
Q_OBJECT
public:
tst_qqmlsqldatabase()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qApp->setApplicationName("tst_qqmlsqldatabase");
qApp->setOrganizationName("QtProject");
diff --git a/tests/auto/qml/qqmltablemodel/CMakeLists.txt b/tests/auto/qml/qqmltablemodel/CMakeLists.txt
index 75da1fc93f..02f93b5802 100644
--- a/tests/auto/qml/qqmltablemodel/CMakeLists.txt
+++ b/tests/auto/qml/qqmltablemodel/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmltablemodel
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmltablemodel.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
Qt::QmlPrivate
Qt::Quick
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmltablemodel/data/setDataThroughDelegate.qml b/tests/auto/qml/qqmltablemodel/data/setDataThroughDelegate.qml
index ebfe4ed930..fa5d5bf8bb 100644
--- a/tests/auto/qml/qqmltablemodel/data/setDataThroughDelegate.qml
+++ b/tests/auto/qml/qqmltablemodel/data/setDataThroughDelegate.qml
@@ -65,21 +65,21 @@ Item {
Connections {
target: root
enabled: column === 1
- onShouldModify: model.display = 18
+ function onShouldModify() { model.display = 18 }
}
Connections {
target: root
enabled: column === 0
// Invalid: should be "display".
- onShouldModifyInvalidRole: model.age = 100
+ function onShouldModifyInvalidRole() { model.age = 100 }
}
Connections {
target: root
enabled: column === 1
// Invalid: should be string.
- onShouldModifyInvalidType: model.display = "Whoops"
+ function onShouldModifyInvalidType() { model.display = "Whoops" }
}
}
}
diff --git a/tests/auto/qml/qqmltablemodel/tst_qqmltablemodel.cpp b/tests/auto/qml/qqmltablemodel/tst_qqmltablemodel.cpp
index 3923824fa2..a5db6bdd66 100644
--- a/tests/auto/qml/qqmltablemodel/tst_qqmltablemodel.cpp
+++ b/tests/auto/qml/qqmltablemodel/tst_qqmltablemodel.cpp
@@ -36,14 +36,14 @@
#include <QtQuick/qquickview.h>
#include <QtQuick/private/qquicktableview_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_QQmlTableModel : public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQmlTableModel() {}
+ tst_QQmlTableModel() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void appendRemoveRow();
diff --git a/tests/auto/qml/qqmltimer/dummy_imports.qml b/tests/auto/qml/qqmltimer/dummy_imports.qml
index f78e04d489..e189da6689 100644
--- a/tests/auto/qml/qqmltimer/dummy_imports.qml
+++ b/tests/auto/qml/qqmltimer/dummy_imports.qml
@@ -1,9 +1,8 @@
// This file exists for the sole purpose for qmlimportscanner to find
// which modules it needs to extract for deployment.
-// Otherwise, it fails to find the imports that are expressed in the
-// C++ code belonging to the test.
+// Otherwise, it fails to find the imports that are expressed in C++.
-import QtQml 2.0
-import QtQuick 2.0
+import QtQml
+import QtQuick
-QtObject { } // This is needed in order to keep importscanner happy
+QtObject { }
diff --git a/tests/auto/qml/qqmltranslation/CMakeLists.txt b/tests/auto/qml/qqmltranslation/CMakeLists.txt
index cb402b3e64..67047ff604 100644
--- a/tests/auto/qml/qqmltranslation/CMakeLists.txt
+++ b/tests/auto/qml/qqmltranslation/CMakeLists.txt
@@ -12,16 +12,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmltranslation
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmltranslation.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QmlModelsPrivate
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -39,6 +38,13 @@ set_source_files_properties(
)
# special case end
+# On platforms where TESTDATA is embedded into resources (Android, iOS and
+# INTEGRITY), the QT_RESOURCE_ALIAS property was previously set when processing
+# TESTDATA, so we need to reset it. Otherwise the wrong alias will be written
+# to introspect.qrc, and the related test will fail.
+set_source_files_properties(${translation_resource_files} PROPERTIES
+ QT_RESOURCE_ALIAS "NOTFOUND")
+
qt_internal_add_resource(tst_qqmltranslation "translation"
PREFIX
"/"
diff --git a/tests/auto/qml/qqmltranslation/data/translatedElements.qml b/tests/auto/qml/qqmltranslation/data/translatedElements.qml
new file mode 100644
index 0000000000..c2edfe8c78
--- /dev/null
+++ b/tests/auto/qml/qqmltranslation/data/translatedElements.qml
@@ -0,0 +1,15 @@
+import QtQml
+import QtQml.Models
+
+DelegateModel {
+ model: ListModel {
+ ListElement { dish: qsTr("soup"); price: 60 }
+ ListElement { dish: qsTr("fish"); price: 100 }
+ ListElement { dish: qsTr("meat"); price: 230 }
+ ListElement { dish: qsTr("bread"); price: 10 }
+ }
+
+ delegate: QtObject {
+ required property string dish
+ }
+}
diff --git a/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp b/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp
index 73cdba5f8c..5e0046fb03 100644
--- a/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp
+++ b/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp
@@ -34,13 +34,14 @@
#include <QQuickItem>
#include <private/qqmlengine_p.h>
#include <private/qqmltypedata_p.h>
-#include "../../shared/util.h"
+#include <private/qqmldelegatemodel_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qqmltranslation : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmltranslation() {}
+ tst_qqmltranslation() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void translation_data();
@@ -48,6 +49,7 @@ private slots:
void idTranslation();
void translationChange();
void preferJSContext();
+ void listModel();
};
void tst_qqmltranslation::translation_data()
@@ -97,13 +99,13 @@ void tst_qqmltranslation::translation()
const bool expectCompiledTranslation = compiledTranslations.contains(propertyName);
if (expectCompiledTranslation) {
- if (binding->type != QV4::CompiledData::Binding::Type_Translation)
+ if (binding->type() != QV4::CompiledData::Binding::Type_Translation)
qDebug() << "binding for property" << propertyName << "is not a compiled translation";
- QCOMPARE(quint32(binding->type), quint32(QV4::CompiledData::Binding::Type_Translation));
+ QCOMPARE(binding->type(), QV4::CompiledData::Binding::Type_Translation);
} else {
- if (binding->type == QV4::CompiledData::Binding::Type_Translation)
+ if (binding->type() == QV4::CompiledData::Binding::Type_Translation)
qDebug() << "binding for property" << propertyName << "is not supposed to be a compiled translation";
- QVERIFY(binding->type != QV4::CompiledData::Binding::Type_Translation);
+ QVERIFY(binding->type() != QV4::CompiledData::Binding::Type_Translation);
}
}
}
@@ -149,11 +151,11 @@ void tst_qqmltranslation::idTranslation()
for (quint32 i = 0; i < rootObject->nBindings; ++i, ++binding) {
const QString propertyName = compilationUnit->stringAt(binding->propertyNameIndex);
if (propertyName == "idTranslation") {
- if (binding->type != QV4::CompiledData::Binding::Type_TranslationById)
+ if (binding->type() != QV4::CompiledData::Binding::Type_TranslationById)
qDebug() << "binding for property" << propertyName << "is not a compiled translation";
- QCOMPARE(quint32(binding->type), quint32(QV4::CompiledData::Binding::Type_TranslationById));
+ QCOMPARE(binding->type(), QV4::CompiledData::Binding::Type_TranslationById);
} else {
- QVERIFY(binding->type != QV4::CompiledData::Binding::Type_Translation);
+ QVERIFY(binding->type() != QV4::CompiledData::Binding::Type_Translation);
}
}
}
@@ -193,6 +195,14 @@ class DummyTranslator : public QTranslator
return QString::fromUtf8("Deutsch in mylibrary");
if (!qstrcmp(sourceText, "English in translation") && !qstrcmp(context, "nested_js_translation"))
return QString::fromUtf8("Deutsch in Setzung");
+ if (!qstrcmp(sourceText, "soup"))
+ return QString::fromUtf8("Suppe");
+ if (!qstrcmp(sourceText, "fish"))
+ return QString::fromUtf8("Fisch");
+ if (!qstrcmp(sourceText, "meat"))
+ return QString::fromUtf8("Fleisch");
+ if (!qstrcmp(sourceText, "bread"))
+ return QString::fromUtf8("Brot");
return QString();
}
@@ -254,6 +264,35 @@ void tst_qqmltranslation::preferJSContext()
QCoreApplication::removeTranslator(&translator);
}
+void tst_qqmltranslation::listModel()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("translatedElements.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> o(component.create());
+ QVERIFY(o);
+
+ QQmlDelegateModel *model = qobject_cast<QQmlDelegateModel *>(o.data());
+ QVERIFY(model);
+
+ QCOMPARE(model->count(), 4);
+
+ QCOMPARE(model->object(0)->property("dish").toString(), QStringLiteral("soup"));
+ QCOMPARE(model->object(1)->property("dish").toString(), QStringLiteral("fish"));
+ QCOMPARE(model->object(2)->property("dish").toString(), QStringLiteral("meat"));
+ QCOMPARE(model->object(3)->property("dish").toString(), QStringLiteral("bread"));
+
+ DummyTranslator translator;
+ QCoreApplication::installTranslator(&translator);
+ engine.setUiLanguage(QStringLiteral("xxx"));
+ engine.retranslate();
+
+ QCOMPARE(model->object(0)->property("dish").toString(), QStringLiteral("Suppe"));
+ QCOMPARE(model->object(1)->property("dish").toString(), QStringLiteral("Fisch"));
+ QCOMPARE(model->object(2)->property("dish").toString(), QStringLiteral("Fleisch"));
+ QCOMPARE(model->object(3)->property("dish").toString(), QStringLiteral("Brot"));
+}
+
QTEST_MAIN(tst_qqmltranslation)
#include "tst_qqmltranslation.moc"
diff --git a/tests/auto/qml/qqmltypeloader/CMakeLists.txt b/tests/auto/qml/qqmltypeloader/CMakeLists.txt
index b56dbd8944..e4f99ceaf3 100644
--- a/tests/auto/qml/qqmltypeloader/CMakeLists.txt
+++ b/tests/auto/qml/qqmltypeloader/CMakeLists.txt
@@ -12,16 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmltypeloader
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
declarativetesttype.h
tst_qqmltypeloader.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Qml
Qt::QmlPrivate
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -56,5 +53,5 @@ set_target_properties(tst_qqmltypeloader PROPERTIES
QT_QML_MODULE_URI declarative.import.for.typeloader.test
)
-qt6_qml_type_registration(tst_qqmltypeloader)
+_qt_internal_qml_type_registration(tst_qqmltypeloader)
add_subdirectory(SlowImport)
diff --git a/tests/auto/qml/qqmltypeloader/dummy_imports.qml b/tests/auto/qml/qqmltypeloader/dummy_imports.qml
index a4684b2007..e189da6689 100644
--- a/tests/auto/qml/qqmltypeloader/dummy_imports.qml
+++ b/tests/auto/qml/qqmltypeloader/dummy_imports.qml
@@ -1,9 +1,8 @@
// This file exists for the sole purpose for qmlimportscanner to find
// which modules it needs to extract for deployment.
-// Otherwise, it fails to find the imports that are expressed in the
-// C++ code belonging to the test.
+// Otherwise, it fails to find the imports that are expressed in C++.
-import QtQml 2.0
-import QtQuick 2.6
+import QtQml
+import QtQuick
-QtObject { } // This is needed in order to keep importscanner happy
+QtObject { }
diff --git a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
index c765a44637..9cbca71c28 100644
--- a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
+++ b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
@@ -40,13 +40,16 @@
#include <QtQml/private/qqmltypeloader_p.h>
#include <QtQml/private/qqmlirbuilder_p.h>
#include <QtQml/private/qqmlirloader_p.h>
-#include "../../shared/testhttpserver.h"
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_QQMLTypeLoader : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_QQMLTypeLoader();
+
private slots:
void testLoadComplete();
void loadComponentSynchronously();
@@ -73,6 +76,11 @@ private:
void checkSingleton(const QString & dataDirectory);
};
+tst_QQMLTypeLoader::tst_QQMLTypeLoader()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQMLTypeLoader::testLoadComplete()
{
#ifdef Q_OS_ANDROID
@@ -562,6 +570,10 @@ void tst_QQMLTypeLoader::implicitComponentModule()
void tst_QQMLTypeLoader::customDiskCachePath()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Android seems to have problems with QProcess");
+#endif
+
#if QT_CONFIG(process)
const char *skipKey = "QT_TST_QQMLTYPELOADER_SKIP_MISMATCH";
if (qEnvironmentVariableIsSet(skipKey)) {
@@ -725,6 +737,9 @@ void tst_QQMLTypeLoader::signalHandlersAreCompatible()
// make sure that units really come from different places (the machinery
// could in theory be smart enough to figure the qmlcachegen cached
// version), fairly questionable check but better than nothing
+#ifdef Q_OS_ANDROID
+ QSKIP("qrc and file system is the same thing on Android");
+#endif
QVERIFY(unitFromCachegen->url() != unitFromTypeCompiler->url());
}
diff --git a/tests/auto/qml/qqmlvaluetypeproviders/CMakeLists.txt b/tests/auto/qml/qqmlvaluetypeproviders/CMakeLists.txt
index 697f501153..2ee105c48d 100644
--- a/tests/auto/qml/qqmlvaluetypeproviders/CMakeLists.txt
+++ b/tests/auto/qml/qqmlvaluetypeproviders/CMakeLists.txt
@@ -12,17 +12,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlvaluetypeproviders
SOURCES
- ../../shared/util.cpp ../../shared/util.h
testtypes.cpp testtypes.h
tst_qqmlvaluetypeproviders.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp b/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
index c0bc090bd9..6212c2d169 100644
--- a/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
+++ b/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
@@ -34,7 +34,7 @@
#include <QScopedPointer>
#include <private/qqmlglobal_p.h>
#include <private/qquickvaluetypes_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "testtypes.h"
QT_BEGIN_NAMESPACE
@@ -50,7 +50,7 @@ class tst_qqmlvaluetypeproviders : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlvaluetypeproviders() {}
+ tst_qqmlvaluetypeproviders() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/qml/qqmlvaluetypes/CMakeLists.txt b/tests/auto/qml/qqmlvaluetypes/CMakeLists.txt
index fc76a3ff12..25bf4a4c9e 100644
--- a/tests/auto/qml/qqmlvaluetypes/CMakeLists.txt
+++ b/tests/auto/qml/qqmlvaluetypes/CMakeLists.txt
@@ -12,17 +12,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlvaluetypes
SOURCES
- ../../shared/util.cpp ../../shared/util.h
testtypes.cpp testtypes.h
tst_qqmlvaluetypes.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp b/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp
index c062b9cd56..d4524fb421 100644
--- a/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp
+++ b/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp
@@ -36,7 +36,7 @@
#include <private/qqmlglobal_p.h>
#include <private/qv4engine_p.h>
#include <private/qv4variantobject_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "testtypes.h"
QT_BEGIN_NAMESPACE
@@ -47,7 +47,7 @@ class tst_qqmlvaluetypes : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlvaluetypes() {}
+ tst_qqmlvaluetypes() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
@@ -102,6 +102,7 @@ private slots:
void char16Type();
void writeBackOnFunctionCall();
void valueTypeConversions();
+ void readReferenceOnGetOwnProperty();
private:
QQmlEngine engine;
@@ -1976,6 +1977,35 @@ void tst_qqmlvaluetypes::valueTypeConversions()
QCOMPARE(resultB.b, a.a);
}
+class Chose : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QRectF f READ ff CONSTANT)
+public:
+ Chose(QObject *parent = nullptr) : QObject(parent) {}
+ QRectF ff() const { return QRectF(); }
+ Q_INVOKABLE bool g(QJSValue v) { return v.hasProperty("x"); }
+};
+
+void tst_qqmlvaluetypes::readReferenceOnGetOwnProperty()
+{
+ Chose chose;
+ QQmlEngine engine;
+ engine.rootContext()->setContextProperty(QStringLiteral("chose"), &chose);
+ QQmlComponent c(&engine);
+ c.setData(R"fin(
+ import QtQml
+ QtObject {
+ property bool allo: chose.g(chose.f)
+ }
+ )fin", QUrl());
+
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+ QVERIFY(o->property("allo").toBool());
+}
+
#undef CHECK_TYPE_IS_NOT_VALUETYPE
QTEST_MAIN(tst_qqmlvaluetypes)
diff --git a/tests/auto/qml/qqmlxmlhttprequest/CMakeLists.txt b/tests/auto/qml/qqmlxmlhttprequest/CMakeLists.txt
index 4f428fe3a1..ea244fcbe4 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/CMakeLists.txt
+++ b/tests/auto/qml/qqmlxmlhttprequest/CMakeLists.txt
@@ -12,20 +12,21 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlxmlhttprequest
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlxmlhttprequest.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Network
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qqmlxmlhttprequest)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.collection.allprop.expect b/tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.collection.allprop.expect
index 69330e441a..6dba52d2de 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.collection.allprop.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.collection.allprop.expect
@@ -2,7 +2,6 @@ PROPFIND /container/ HTTP/1.1
Depth: 1
Content-Length: 95
Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
Accept-Language: en-US,*
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.file.expect b/tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.file.expect
index d752cf203a..dc7217d45c 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.file.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/WebDAV/propfind.file.expect
@@ -1,7 +1,6 @@
PROPFIND /file HTTP/1.1
Content-Length: 192
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
Accept-Language: en-US,*
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/abort.expect b/tests/auto/qml/qqmlxmlhttprequest/data/abort.expect
index d317f51b73..97c1661851 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/abort.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/abort.expect
@@ -2,8 +2,7 @@ PUT /testdocument.html HTTP/1.1
Accept-Language: en-US
Content-Type: text/plain;charset=UTF-8
Content-Length: 10
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/getResponseHeader.expect b/tests/auto/qml/qqmlxmlhttprequest/data/getResponseHeader.expect
index dbc37463f5..2270e7f3aa 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/getResponseHeader.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/getResponseHeader.expect
@@ -1,7 +1,6 @@
GET /testdocument.html HTTP/1.1
Accept-Language: en-US
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/open_network.expect b/tests/auto/qml/qqmlxmlhttprequest/data/open_network.expect
index dbc37463f5..2270e7f3aa 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/open_network.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/open_network.expect
@@ -1,7 +1,6 @@
GET /testdocument.html HTTP/1.1
Accept-Language: en-US
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/receive_binary_data.expect b/tests/auto/qml/qqmlxmlhttprequest/data/receive_binary_data.expect
index e56c2eec41..35d28ec76d 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/receive_binary_data.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/receive_binary_data.expect
@@ -1,8 +1,7 @@
GET /gml_logo.png HTTP/1.1
Accept-Language: en-US,*
Content-Type: image/png
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/receive_json_data.expect b/tests/auto/qml/qqmlxmlhttprequest/data/receive_json_data.expect
index 38a9ffd705..9784ba4a80 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/receive_json_data.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/receive_json_data.expect
@@ -1,8 +1,7 @@
GET /json.data HTTP/1.1
Accept-Language: en-US,*
Content-Type: application/jsonrequest
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.1.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.1.expect
index e24608d7c3..64bd2b3818 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.1.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.1.expect
@@ -2,8 +2,7 @@ POST /testdocument.html HTTP/1.1
Accept-Language: en-US
Content-Type: text/plain;charset=UTF-8
Content-Length: 13
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.10.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.10.expect
index 29828c06d0..2bf3b5a081 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.10.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.10.expect
@@ -2,8 +2,7 @@ OPTIONS /testdocument.html HTTP/1.1
Accept-Language: en-US,*
Content-Type: text/plain;charset=UTF-8
Content-Length: 13
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.11.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.11.expect
index e3a9aae9e2..7132819c72 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.11.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.11.expect
Binary files differ
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.4.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.4.expect
index 02f48d0abb..270ee838d9 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.4.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.4.expect
@@ -2,8 +2,7 @@ POST /testdocument.html HTTP/1.1
Accept-Language: en-US
Content-Type: charset=UTF-8;text/plain
Content-Length: 13
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.6.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.6.expect
index 2b60a6db86..f6c8083875 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.6.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.6.expect
@@ -2,8 +2,7 @@ PUT /testdocument.html HTTP/1.1
Accept-Language: en-US
Content-Type: text/plain;charset=UTF-8
Content-Length: 13
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.8.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.8.expect
index f3db27c891..bcd7e79fc1 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.8.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.8.expect
@@ -1,7 +1,6 @@
OPTIONS / HTTP/1.1
Content-Length: 0
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
Accept-Language: en-US,*
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.9.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.9.expect
index 347181efae..2d4f2c3146 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_data.9.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_data.9.expect
@@ -1,7 +1,6 @@
OPTIONS /testdocument.html HTTP/1.1
Content-Length: 0
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
Accept-Language: en-US,*
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_DELETE.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_DELETE.expect
index 0f13fc0bf9..7d96c00101 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_DELETE.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_DELETE.expect
@@ -1,7 +1,6 @@
DELETE /testdocument.html HTTP/1.1
Accept-Language: en-US
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_GET.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_GET.expect
index dbc37463f5..2270e7f3aa 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_GET.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_GET.expect
@@ -1,7 +1,6 @@
GET /testdocument.html HTTP/1.1
Accept-Language: en-US
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_HEAD.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_HEAD.expect
index 9d2d6bc475..064cf1b6b7 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_HEAD.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_ignoreData_HEAD.expect
@@ -1,7 +1,6 @@
HEAD /testdocument.html HTTP/1.1
Accept-Language: en-US
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/send_patch.expect b/tests/auto/qml/qqmlxmlhttprequest/data/send_patch.expect
index 3ff8a42028..55f7f7dceb 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/send_patch.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/send_patch.expect
@@ -3,8 +3,7 @@ Accept-Language: en-US
If-Match: "ETagNumber"
Content-Type: application/example
Content-Length: 247
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/setRequestHeader.expect b/tests/auto/qml/qqmlxmlhttprequest/data/setRequestHeader.expect
index a676062ec0..003e54f33c 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/setRequestHeader.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/setRequestHeader.expect
@@ -2,8 +2,7 @@ GET /testdocument.html HTTP/1.1
Accept-Language: en-US
Test-header: value
Test-header2: value,value2
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/status.expect b/tests/auto/qml/qqmlxmlhttprequest/data/status.expect
index dbc37463f5..2270e7f3aa 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/data/status.expect
+++ b/tests/auto/qml/qqmlxmlhttprequest/data/status.expect
@@ -1,7 +1,6 @@
GET /testdocument.html HTTP/1.1
Accept-Language: en-US
-Connection: Keep-Alive, Upgrade, HTTP2-Settings
-Upgrade: h2c
+Connection: Keep-Alive{{Ignore}}
HTTP2-Settings: {{Ignore}}
Accept-Encoding: {{Ignore}}
User-Agent: Mozilla/5.0
diff --git a/tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp b/tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp
index 401152d575..d1dcf3829a 100644
--- a/tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp
+++ b/tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp
@@ -42,14 +42,14 @@
#include <QProcessEnvironment>
#endif
-#include "testhttpserver.h"
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
class tst_qqmlxmlhttprequest : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qqmlxmlhttprequest() {}
+ tst_qqmlxmlhttprequest() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
@@ -662,6 +662,8 @@ void tst_qqmlxmlhttprequest::send_options()
void tst_qqmlxmlhttprequest::send_options_data()
{
+ if (QLocale::system() != QLocale(QLocale::English, QLocale::UnitedStates))
+ QSKIP("Test is locale dependent");
QTest::addColumn<QString>("url_suffix");
QTest::addColumn<QString>("file_expected");
QTest::addColumn<QString>("file_qml");
@@ -886,6 +888,8 @@ void tst_qqmlxmlhttprequest::getAllResponseHeaders_args()
void tst_qqmlxmlhttprequest::getBinaryData()
{
+ if (QLocale::system() != QLocale(QLocale::English, QLocale::UnitedStates))
+ QSKIP("Test is locale dependent");
TestHTTPServer server;
QVERIFY2(server.listen(), qPrintable(server.errorString()));
QVERIFY(server.wait(testFileUrl("receive_binary_data.expect"),
@@ -905,6 +909,8 @@ void tst_qqmlxmlhttprequest::getBinaryData()
void tst_qqmlxmlhttprequest::getJsonData()
{
+ if (QLocale::system() != QLocale(QLocale::English, QLocale::UnitedStates))
+ QSKIP("Test is locale dependent");
TestHTTPServer server;
QVERIFY2(server.listen(), qPrintable(server.errorString()));
QVERIFY(server.wait(testFileUrl("receive_json_data.expect"),
@@ -1087,6 +1093,10 @@ static const QString testString = QStringLiteral("Test-String");
void tst_qqmlxmlhttprequest::doFileRequest(std::function<void(QObject *component, QTemporaryFile &writeFile)> verifyFunction)
{
+#if defined(Q_OS_INTEGRITY)
+ QSKIP("There's no mounted filesystem on INTEGRITY.");
+#endif
+
// Create test files
QTemporaryFile writeFile;
QTemporaryFile readFile;
@@ -1131,6 +1141,9 @@ void tst_qqmlxmlhttprequest::sendFileRequest()
#if QT_CONFIG(process)
void tst_qqmlxmlhttprequest::sendFileRequestNotSet() {
+#ifdef Q_OS_ANDROID
+ QSKIP("Trying to run the main app .so lib crashes on Android (QTBUG-99214)");
+#endif
if (qEnvironmentVariableIsSet("TEST_CUSTOM_PERMISSIONS")) {
// Test with no settings, neither reading nor writing should work
doFileRequest([](QObject *object, QTemporaryFile &writeFile) {
@@ -1185,6 +1198,10 @@ void tst_qqmlxmlhttprequest::sendFileRequestNotSet() {
#if QT_CONFIG(process)
void tst_qqmlxmlhttprequest::sendFileRequestNoWrite() {
+#ifdef Q_OS_ANDROID
+ QSKIP("Trying to run the main app .so lib crashes on Android (QTBUG-99214)");
+#endif
+
if (qEnvironmentVariableIsSet("TEST_CUSTOM_PERMISSIONS")) {
// Test with no writing enabled
doFileRequest([](QObject* object, QTemporaryFile &writeFile) {
@@ -1214,6 +1231,10 @@ void tst_qqmlxmlhttprequest::sendFileRequestNoWrite() {
#if QT_CONFIG(process)
void tst_qqmlxmlhttprequest::sendFileRequestNoRead() {
+#ifdef Q_OS_ANDROID
+ QSKIP("Trying to run the main app .so lib crashes on Android (QTBUG-99214)");
+#endif
+
if (qEnvironmentVariableIsSet("TEST_CUSTOM_PERMISSIONS")) {
// Test with no reading enabled
doFileRequest([](QObject* object, QTemporaryFile &writeFile) {
@@ -1246,6 +1267,8 @@ void tst_qqmlxmlhttprequest::sendFileRequestNoRead() {
void tst_qqmlxmlhttprequest::sendPropfind()
{
+ if (QLocale::system() != QLocale(QLocale::English, QLocale::UnitedStates))
+ QSKIP("Test is locale dependent");
const QString prefix = "WebDAV//";
QFETCH(QString, qml);
diff --git a/tests/auto/qml/qqmlxmllistmodel/CMakeLists.txt b/tests/auto/qml/qqmlxmllistmodel/CMakeLists.txt
index 3748661ce2..b529ceed8e 100644
--- a/tests/auto/qml/qqmlxmllistmodel/CMakeLists.txt
+++ b/tests/auto/qml/qqmlxmllistmodel/CMakeLists.txt
@@ -5,14 +5,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qqmlxmllistmodel
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qqmlxmllistmodel.cpp
- INCLUDE_DIRECTORIES
- ../../shared
LIBRARIES
Qt::Core
Qt::Qml
Qt::QmlXmlListModelPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qqmlxmllistmodel/tst_qqmlxmllistmodel.cpp b/tests/auto/qml/qqmlxmllistmodel/tst_qqmlxmllistmodel.cpp
index 804a10ba72..66878e41d1 100644
--- a/tests/auto/qml/qqmlxmllistmodel/tst_qqmlxmllistmodel.cpp
+++ b/tests/auto/qml/qqmlxmllistmodel/tst_qqmlxmllistmodel.cpp
@@ -36,7 +36,7 @@
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QtQmlXmlListModel/private/qqmlxmllistmodel_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
typedef QList<QVariantList> QQmlXmlModelData;
@@ -48,7 +48,7 @@ class tst_QQmlXmlListModel : public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQmlXmlListModel() { }
+ tst_QQmlXmlListModel() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
private slots:
void initTestCase() override
@@ -132,9 +132,9 @@ private:
class ScopedFile
{
public:
- ScopedFile(const QUrl &url, const QByteArray &data) : m_fileUrl(url)
+ ScopedFile(const QString &fileName, const QByteArray &data) : m_fileName(fileName)
{
- m_file.setFileName(url.toLocalFile());
+ m_file.setFileName(fileName);
m_created = m_file.open(QIODevice::WriteOnly | QIODevice::Truncate);
if (m_created) {
const auto written = m_file.write(data);
@@ -145,11 +145,11 @@ public:
~ScopedFile() { QFile::remove(m_file.fileName()); }
bool isCreated() const { return m_created; }
- QUrl fileUrl() const { return m_fileUrl; }
+ QString fileName() const { return m_fileName; }
private:
QFile m_file;
- const QUrl m_fileUrl;
+ const QString m_fileName;
bool m_created = false;
};
@@ -380,7 +380,9 @@ void tst_QQmlXmlListModel::source()
if (model->property("source").toString().isEmpty())
QCOMPARE(qvariant_cast<QQmlXmlListModel::Status>(model->property("status")),
QQmlXmlListModel::Null);
- QCOMPARE(model->property("progress").toDouble(), qreal(source.isLocalFile() ? 1.0 : 0.0));
+ qreal expectedProgress =
+ (source.isLocalFile() || (source.scheme() == QLatin1String("qrc"))) ? 1.0 : 0.0;
+ QCOMPARE(model->property("progress").toDouble(), expectedProgress);
QTRY_COMPARE(spy.count(), 1);
spy.clear();
QCOMPARE(qvariant_cast<QQmlXmlListModel::Status>(model->property("status")),
@@ -488,6 +490,8 @@ void tst_QQmlXmlListModel::threading()
QScopedPointer<QAbstractItemModel> m3(qobject_cast<QAbstractItemModel *>(component.create()));
QVERIFY(m3 != nullptr);
+ QTemporaryDir tempDir;
+
for (int dataCount = 0; dataCount < xmlDataCount; ++dataCount) {
QString data1, data2, data3;
for (int i = 0; i < dataCount; ++i) {
@@ -499,14 +503,14 @@ void tst_QQmlXmlListModel::threading()
+ ",sport=Curling;";
}
- ScopedFile f1(testFileUrl("file1.xml"), makeItemXmlAndData(data1).toLatin1());
- ScopedFile f2(testFileUrl("file2.xml"), makeItemXmlAndData(data2).toLatin1());
- ScopedFile f3(testFileUrl("file3.xml"), makeItemXmlAndData(data3).toLatin1());
+ ScopedFile f1(tempDir.filePath("file1.xml"), makeItemXmlAndData(data1).toLatin1());
+ ScopedFile f2(tempDir.filePath("file2.xml"), makeItemXmlAndData(data2).toLatin1());
+ ScopedFile f3(tempDir.filePath("file3.xml"), makeItemXmlAndData(data3).toLatin1());
QVERIFY(f1.isCreated() && f2.isCreated() && f3.isCreated());
- m1->setProperty("source", f1.fileUrl());
- m2->setProperty("source", f2.fileUrl());
- m3->setProperty("source", f3.fileUrl());
+ m1->setProperty("source", QUrl::fromLocalFile(f1.fileName()));
+ m2->setProperty("source", QUrl::fromLocalFile(f2.fileName()));
+ m3->setProperty("source", QUrl::fromLocalFile(f3.fileName()));
QCoreApplication::processEvents();
QTRY_VERIFY(m1->rowCount() == dataCount && m2->rowCount() == dataCount
diff --git a/tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt b/tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt
index 58aa6e95f1..f6752765b4 100644
--- a/tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt
+++ b/tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt
@@ -12,15 +12,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickfolderlistmodel
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickfolderlistmodel.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -29,6 +27,13 @@ set(introspect_resource_files
"data/txtdir/hello.txt"
)
+# On platforms where TESTDATA is embedded into resources (Android, iOS and
+# INTEGRITY), the QT_RESOURCE_ALIAS property was previously set when processing
+# TESTDATA, so we need to reset it. Otherwise the wrong alias will be written
+# to introspect.qrc, and the related test will fail.
+set_source_files_properties(${introspect_resource_files} PROPERTIES
+ QT_RESOURCE_ALIAS "NOTFOUND")
+
qt_internal_add_resource(tst_qquickfolderlistmodel "introspect"
PREFIX
"/myprefix/subdir"
diff --git a/tests/auto/qml/qquickfolderlistmodel/tst_qquickfolderlistmodel.cpp b/tests/auto/qml/qquickfolderlistmodel/tst_qquickfolderlistmodel.cpp
index d49e9b952b..cc35510762 100644
--- a/tests/auto/qml/qquickfolderlistmodel/tst_qquickfolderlistmodel.cpp
+++ b/tests/auto/qml/qquickfolderlistmodel/tst_qquickfolderlistmodel.cpp
@@ -33,7 +33,7 @@
#include <QtCore/qfile.h>
#include <QtCore/qabstractitemmodel.h>
#include <QDebug>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#if defined (Q_OS_WIN)
#include <qt_windows.h>
@@ -48,7 +48,7 @@ class tst_qquickfolderlistmodel : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickfolderlistmodel() {}
+ tst_qquickfolderlistmodel() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
public slots:
void removed(const QModelIndex &, int start, int end) {
@@ -85,6 +85,10 @@ private:
void tst_qquickfolderlistmodel::initTestCase()
{
+#if defined(Q_OS_MACOS) && defined(Q_PROCESSOR_ARM_64)
+ // ### TODO: this is only a temporary workaround for QTBUG-99665
+ QSKIP("Test crashes after running to completion on macos ARM");
+#endif
// The tests rely on a fixed number of files in the directory with the qml files
// (the data dir), so disable the disk cache to avoid creating .qmlc files and
// confusing the test.
@@ -94,28 +98,27 @@ void tst_qquickfolderlistmodel::initTestCase()
void tst_qquickfolderlistmodel::basicProperties()
{
-#ifdef Q_OS_ANDROID
- QSKIP("[QTBUG-77335] Initial folder of FolderListModel on Android does not work properly,"
- " and from there on it is unreliable to change the folder");
-#endif
QQmlComponent component(&engine, testFileUrl("basic.qml"));
QTRY_VERIFY2(component.isReady(), qPrintable(component.errorString()));
QAbstractListModel *flm = qobject_cast<QAbstractListModel*>(component.create());
QVERIFY(flm != nullptr);
+ QSignalSpy folderChangedSpy(flm, SIGNAL(folderChanged()));
QCOMPARE(flm->property("nameFilters").toStringList(), QStringList() << "*.qml"); // from basic.qml
QCOMPARE(flm->property("folder").toUrl(), QUrl::fromLocalFile(QDir::currentPath()));
+ folderChangedSpy.wait(); // wait for the initial folder to be processed
- // wait for the initial directory listing (it will find at least the "data" dir,
- // and other dirs on Windows).
- QTRY_VERIFY(flm->property("count").toInt() > 0);
-
- QSignalSpy folderChangedSpy(flm, SIGNAL(folderChanged()));
flm->setProperty("folder", dataDirectoryUrl());
QVERIFY(folderChangedSpy.wait());
QCOMPARE(flm->property("count").toInt(), 9);
QCOMPARE(flm->property("folder").toUrl(), dataDirectoryUrl());
- QCOMPARE(flm->property("parentFolder").toUrl(), QUrl::fromLocalFile(QDir(directory()).canonicalPath()));
+#ifndef Q_OS_ANDROID
+ // On Android currentDir points to some dir in qrc://, which is not
+ // considered to be local file, so parentFolder is always
+ // default-constructed QUrl.
+ QCOMPARE(flm->property("parentFolder").toUrl(),
+ QUrl::fromLocalFile(QDir(directory()).canonicalPath()));
+#endif
QCOMPARE(flm->property("sortField").toInt(), int(Name));
QCOMPARE(flm->property("nameFilters").toStringList(), QStringList() << "*.qml");
QCOMPARE(flm->property("sortReversed").toBool(), false);
@@ -195,6 +198,14 @@ void tst_qquickfolderlistmodel::nameFilters()
connect(flm, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(removed(QModelIndex,int,int)));
+#ifdef Q_OS_ANDROID
+ // On Android the default folder is application's "files" dir, which
+ // requires special rights for reading. The test works when started via
+ // androidtestrunner, but fails when launching the APK directly. Set the
+ // initial folder to resources root dir, because it is always readable.
+ flm->setProperty("folder", testFileUrl(""));
+#endif
+
QTRY_VERIFY(flm->rowCount() > 0);
// read an invalid directory first...
flm->setProperty("folder", testFileUrl("nosuchdirectory"));
diff --git a/tests/auto/qml/qquickworkerscript/CMakeLists.txt b/tests/auto/qml/qquickworkerscript/CMakeLists.txt
index 52a2380ff4..94473d9032 100644
--- a/tests/auto/qml/qquickworkerscript/CMakeLists.txt
+++ b/tests/auto/qml/qquickworkerscript/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickworkerscript
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickworkerscript.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QmlWorkerScriptPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp b/tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp
index b093dcaf07..e410bf75a3 100644
--- a/tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp
+++ b/tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp
@@ -38,13 +38,13 @@
#include <private/qquickworkerscript_p.h>
#include <private/qqmlengine_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_QQuickWorkerScript : public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQuickWorkerScript() {}
+ tst_QQuickWorkerScript() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void source();
void ready();
diff --git a/tests/auto/qml/qtqmlmodules/CMakeLists.txt b/tests/auto/qml/qtqmlmodules/CMakeLists.txt
index 9637588a8b..6ff0cc01ae 100644
--- a/tests/auto/qml/qtqmlmodules/CMakeLists.txt
+++ b/tests/auto/qml/qtqmlmodules/CMakeLists.txt
@@ -12,18 +12,20 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qtqmlmodules
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qtqmlmodules.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+if(QT_BUILD_STANDALONE_TESTS)
+ qt_import_qml_plugins(tst_qtqmlmodules)
+endif()
+
## Scopes:
#####################################################################
diff --git a/tests/auto/qml/qtqmlmodules/tst_qtqmlmodules.cpp b/tests/auto/qml/qtqmlmodules/tst_qtqmlmodules.cpp
index 90b6feee28..874d6fe102 100644
--- a/tests/auto/qml/qtqmlmodules/tst_qtqmlmodules.cpp
+++ b/tests/auto/qml/qtqmlmodules/tst_qtqmlmodules.cpp
@@ -30,13 +30,13 @@
#include <QDebug>
#include <QQmlEngine>
#include <QQmlComponent>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qtqmlmodules : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qtqmlmodules() {}
+ tst_qtqmlmodules() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void baseTypes();
diff --git a/tests/auto/qml/qv4assembler/CMakeLists.txt b/tests/auto/qml/qv4assembler/CMakeLists.txt
index 1f73fd3495..486baf7deb 100644
--- a/tests/auto/qml/qv4assembler/CMakeLists.txt
+++ b/tests/auto/qml/qv4assembler/CMakeLists.txt
@@ -12,13 +12,11 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qv4assembler
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qv4assembler.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qv4assembler/tst_qv4assembler.cpp b/tests/auto/qml/qv4assembler/tst_qv4assembler.cpp
index d6bee0c96c..5667b7b8af 100644
--- a/tests/auto/qml/qv4assembler/tst_qv4assembler.cpp
+++ b/tests/auto/qml/qv4assembler/tst_qv4assembler.cpp
@@ -26,13 +26,12 @@
**
****************************************************************************/
-#include <util.h>
-
#include <QtTest/QtTest>
#include <QtCore/qprocess.h>
#include <QtCore/qtemporaryfile.h>
#include <QtQml/qqml.h>
#include <QtQml/qqmlapplicationengine.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <private/qv4global_p.h>
@@ -44,6 +43,9 @@ class tst_QV4Assembler : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_QV4Assembler();
+
private slots:
void initTestCase() override;
void perfMapFile();
@@ -51,6 +53,11 @@ private slots:
void jitEnabled();
};
+tst_QV4Assembler::tst_QV4Assembler()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QV4Assembler::initTestCase()
{
qputenv("QV4_JIT_CALL_THRESHOLD", "0");
@@ -145,6 +152,9 @@ void tst_QV4Assembler::jitEnabled()
#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
/* JIT should be disabled on iOS and tvOS. */
QVERIFY(!QT_CONFIG(qml_jit));
+#elif defined(Q_OS_ANDROID) && defined(Q_PROCESSOR_ARM)
+ /* JIT is disabled for Android on ARM/ARM64 before Qt 6.4, see QTBUG-102776. */
+ QVERIFY(!QT_CONFIG(qml_jit));
#elif defined(Q_OS_WIN) && defined(Q_PROCESSOR_ARM)
/* JIT should be disabled Windows on ARM/ARM64 for now. */
QVERIFY(!QT_CONFIG(qml_jit));
diff --git a/tests/auto/qml/qv4mm/CMakeLists.txt b/tests/auto/qml/qv4mm/CMakeLists.txt
index f5667c2b5d..93e71ac0c9 100644
--- a/tests/auto/qml/qv4mm/CMakeLists.txt
+++ b/tests/auto/qml/qv4mm/CMakeLists.txt
@@ -12,14 +12,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qv4mm
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qv4mm.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
Qt::QmlPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/qml/qv4mm/tst_qv4mm.cpp b/tests/auto/qml/qv4mm/tst_qv4mm.cpp
index b6a5753e56..fe2e267cfd 100644
--- a/tests/auto/qml/qv4mm/tst_qv4mm.cpp
+++ b/tests/auto/qml/qv4mm/tst_qv4mm.cpp
@@ -35,7 +35,7 @@
#include <private/qv4qobjectwrapper_p.h>
#include <private/qjsvalue_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <memory>
@@ -43,14 +43,22 @@ class tst_qv4mm : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qv4mm();
+
private slots:
void gcStats();
void multiWrappedQObjects();
void accessParentOnDestruction();
- void clearICParent();
+ void cleanInternalClasses();
void createObjectsOnDestruction();
};
+tst_qv4mm::tst_qv4mm()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qv4mm::gcStats()
{
QLoggingCategory::setFilterRules("qt.qml.gc.*=true");
@@ -77,10 +85,10 @@ void tst_qv4mm::multiWrappedQObjects()
QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 1);
QCOMPARE(engine2.memoryManager->m_pendingFreedObjectWrapperValue.size(), 0);
- // Moves the additional WeakValue from m_multiplyWrappedQObjects to
- // m_pendingFreedObjectWrapperValue. It's still alive after all.
+ // The additional WeakValue from m_multiplyWrappedQObjects hasn't been moved
+ // to m_pendingFreedObjectWrapperValue yet. It's still alive after all.
engine1.memoryManager->runGC();
- QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 2);
+ QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 1);
// engine2 doesn't own the object as engine1 was the first to wrap it above.
// Therefore, no effect here.
@@ -111,16 +119,41 @@ void tst_qv4mm::accessParentOnDestruction()
QCOMPARE(obj->property("destructions").toInt(), 100);
}
-void tst_qv4mm::clearICParent()
+void tst_qv4mm::cleanInternalClasses()
{
QV4::ExecutionEngine engine;
QV4::Scope scope(engine.rootContext());
QV4::ScopedObject object(scope, engine.newObject());
+ QV4::ScopedObject prototype(scope, engine.newObject());
+
+ // Set a prototype so that we get a unique IC.
+ object->setPrototypeOf(prototype);
+
+ QV4::Scoped<QV4::InternalClass> prevIC(scope, object->internalClass());
+ QVERIFY(prevIC->d()->transitions.empty());
+
+ uint prevIcChainLength = 0;
+ for (QV4::Heap::InternalClass *ic = object->internalClass(); ic; ic = ic->parent)
+ ++prevIcChainLength;
+
+ const auto checkICCHainLength = [&]() {
+ uint icChainLength = 0;
+ for (QV4::Heap::InternalClass *ic = object->internalClass(); ic; ic = ic->parent)
+ ++icChainLength;
+
+ const uint redundant = object->internalClass()->numRedundantTransitions;
+ QVERIFY(redundant <= QV4::Heap::InternalClass::MaxRedundantTransitions);
+
+ // A removal makes two transitions redundant.
+ QVERIFY(icChainLength <= prevIcChainLength + 2 * redundant);
+ };
+
+ const uint numTransitions = 16 * 1024;
// Keep identifiers in a separate array so that we don't have to allocate them in the loop that
// should test the GC on InternalClass allocations.
QV4::ScopedArrayObject identifiers(scope, engine.newArrayObject());
- for (uint i = 0; i < 16 * 1024; ++i) {
+ for (uint i = 0; i < numTransitions; ++i) {
QV4::Scope scope(&engine);
QV4::ScopedString s(scope);
s = engine.newIdentifier(QString::fromLatin1("key%1").arg(i));
@@ -131,22 +164,60 @@ void tst_qv4mm::clearICParent()
object->insertMember(s, v);
}
- // When allocating the InternalClass objects required for deleting properties, the GC should
- // eventually run and remove all but the last two.
- // If we ever manage to avoid allocating the InternalClasses in the first place we will need
- // to change this test.
- for (uint i = 0; i < 16 * 1024; ++i) {
+ // There is a chain of ICs originating from the original class.
+ QCOMPARE(prevIC->d()->transitions.size(), 1u);
+ QVERIFY(prevIC->d()->transitions.front().lookup != nullptr);
+
+ // When allocating the InternalClass objects required for deleting properties, eventually
+ // the IC chain gets truncated, dropping all the removed properties.
+ for (uint i = 0; i < numTransitions; ++i) {
QV4::Scope scope(&engine);
QV4::ScopedString s(scope, identifiers->get(i));
QV4::Scoped<QV4::InternalClass> ic(scope, object->internalClass());
QVERIFY(ic->d()->parent != nullptr);
- object->deleteProperty(s->toPropertyKey());
+ QV4::ScopedValue val(scope, object->get(s->toPropertyKey()));
+ QCOMPARE(val->toNumber(), double(i));
+ QVERIFY(object->deleteProperty(s->toPropertyKey()));
+ QVERIFY(!object->hasProperty(s->toPropertyKey()));
QVERIFY(object->internalClass() != ic->d());
- QCOMPARE(object->internalClass()->parent, ic->d());
- if (ic->d()->parent == nullptr)
- return;
}
- QFAIL("Garbage collector was not triggered by large amount of InternalClasses");
+
+ // None of the properties we've added are left
+ for (uint i = 0; i < numTransitions; ++i) {
+ QV4::ScopedString s(scope, identifiers->get(i));
+ QVERIFY(!object->hasProperty(s->toPropertyKey()));
+ }
+
+ // Also no other properties have appeared
+ QScopedPointer<QV4::OwnPropertyKeyIterator> iterator(object->ownPropertyKeys(object));
+ QVERIFY(!iterator->next(object).isValid());
+
+ checkICCHainLength();
+
+ // Add and remove properties until it clears all remaining redundant ones
+ uint i = 0;
+ while (object->internalClass()->numRedundantTransitions > 0) {
+ i = (i + 1) % numTransitions;
+ QV4::ScopedString s(scope, identifiers->get(i));
+ QV4::ScopedValue v(scope);
+ v->setDouble(i);
+ object->insertMember(s, v);
+ QVERIFY(object->deleteProperty(s->toPropertyKey()));
+ }
+
+ // Make sure that all dangling ICs are actually gone.
+ scope.engine->memoryManager->runGC();
+
+ // Now the GC has removed the ICs we originally added by adding properties.
+ QVERIFY(prevIC->d()->transitions.empty() || prevIC->d()->transitions.front().lookup == nullptr);
+
+ // Same thing with redundant prototypes
+ for (uint i = 0; i < numTransitions; ++i) {
+ QV4::ScopedObject prototype(scope, engine.newObject());
+ object->setPrototypeOf(prototype); // Makes previous prototype redundant
+ }
+
+ checkICCHainLength();
}
void tst_qv4mm::createObjectsOnDestruction()
diff --git a/tests/auto/qml/registrationmacros/CMakeLists.txt b/tests/auto/qml/registrationmacros/CMakeLists.txt
index 6ac5d4506c..3e01ae34c8 100644
--- a/tests/auto/qml/registrationmacros/CMakeLists.txt
+++ b/tests/auto/qml/registrationmacros/CMakeLists.txt
@@ -14,4 +14,4 @@ set_target_properties(tst_registrationmacros PROPERTIES
QT_QML_MODULE_URI test
)
-qt6_qml_type_registration(tst_registrationmacros)
+_qt_internal_qml_type_registration(tst_registrationmacros)
diff --git a/tests/auto/qml/v4misc/tst_v4misc.cpp b/tests/auto/qml/v4misc/tst_v4misc.cpp
index 2412ca7f92..c505396265 100644
--- a/tests/auto/qml/v4misc/tst_v4misc.cpp
+++ b/tests/auto/qml/v4misc/tst_v4misc.cpp
@@ -177,6 +177,10 @@ void tst_v4misc::subClassing()
void tst_v4misc::nestingDepth()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("tst_v4misc::nestingDepth crashes on Android, see QTBUG-103743.");
+#endif
+
{ // left recursive
QString s(40000, '`');
diff --git a/tests/auto/qmldom/domitem/tst_qmldomitem.h b/tests/auto/qmldom/domitem/tst_qmldomitem.h
index 8346649aa0..714b278e1f 100644
--- a/tests/auto/qmldom/domitem/tst_qmldomitem.h
+++ b/tests/auto/qmldom/domitem/tst_qmldomitem.h
@@ -41,6 +41,8 @@
#include <QtQmlDom/private/qqmldomtop_p.h>
#include <QtQmlDom/private/qqmldomastdumper_p.h>
#include <QtQmlDom/private/qqmldommock_p.h>
+#include <QtQmlDom/private/qqmldomcompare_p.h>
+#include <QtQmlDom/private/qqmldomfieldfilter_p.h>
#include <QtTest/QtTest>
#include <QCborValue>
@@ -423,6 +425,9 @@ private slots:
}
void testLoadDep()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Test uncompatible with Android (QTBUG-100171)");
+#endif
QString baseDir = QLatin1String(QT_QMLTEST_DATADIR) + QLatin1String("/domitem");
QStringList qmltypeDirs =
QStringList({ baseDir, QLibraryInfo::path(QLibraryInfo::Qml2ImportsPath) });
@@ -531,6 +536,17 @@ private slots:
if (!diff.isEmpty())
qDebug().nospace().noquote() << diff;
QCOMPARE(dump1, dump2);
+ QStringList diffs = domCompareStrList(f, copy, FieldFilter::compareFilter());
+ if (!diffs.isEmpty())
+ qDebug() << "testDeepCopy.diffs:" << diffs;
+ QVERIFY(diffs.isEmpty());
+ DomItem univFile = env.universe().path(f.canonicalPath());
+ MutableDomItem univFileCopy = univFile.makeCopy();
+ QStringList univFileDiffs =
+ domCompareStrList(univFile, univFileCopy, FieldFilter::compareFilter());
+ if (!univFileDiffs.isEmpty())
+ qDebug() << "testDeepCopy.univFileDiffs:" << univFileDiffs;
+ QVERIFY(univFileDiffs.isEmpty());
}
private:
diff --git a/tests/auto/qmltest/selftests/tst_grabImage.qml b/tests/auto/qmltest/selftests/tst_grabImage.qml
index 7ce7e93a07..714bc07f27 100644
--- a/tests/auto/qmltest/selftests/tst_grabImage.qml
+++ b/tests/auto/qmltest/selftests/tst_grabImage.qml
@@ -34,6 +34,7 @@ TestCase {
id: testCase
name: "tst_grabImage"
when: windowShown
+ visible: true
function test_equals() {
var rect = createTemporaryQmlObject("import QtQuick 2.0; Rectangle { color: 'red'; width: 10; height: 10; }", testCase);
@@ -47,6 +48,8 @@ TestCase {
// Don't change anything...
newImage = grabImage(rect);
try {
+ // Check that we actually grabbed something
+ compare(newImage.pixel(0, 0), "#ff0000")
compare(newImage.size, oldImage.size);
verify(newImage.equals(oldImage));
} catch (ex) {
@@ -86,6 +89,8 @@ TestCase {
try {
verify(grabbedImage2.equals(grabbedImage))
+ // Check that we actually grabbed, saved, and loaded something
+ compare(grabbedImage2.pixel(0, 0), "#ff0000")
} catch (ex) {
grabbedImage2.save("tst_grabImage_test_save2.png")
throw ex;
diff --git a/tests/auto/qmltest/shadersource/tst_SourcedFromOtherWindow.qml b/tests/auto/qmltest/shadersource/tst_SourcedFromOtherWindow.qml
index 51ad2e02f7..8cfa3ebe05 100644
--- a/tests/auto/qmltest/shadersource/tst_SourcedFromOtherWindow.qml
+++ b/tests/auto/qmltest/shadersource/tst_SourcedFromOtherWindow.qml
@@ -60,7 +60,7 @@ Item {
TestCase {
name: "shadersource-from-other-window"
- when: childWindow.isRendered
+ when: childWindow.rendered
function test_endresult() {
verify(true); // that we got here without problems...
}
diff --git a/tests/auto/quick/CMakeLists.txt b/tests/auto/quick/CMakeLists.txt
index 7f4fcc15f5..360e19470a 100644
--- a/tests/auto/quick/CMakeLists.txt
+++ b/tests/auto/quick/CMakeLists.txt
@@ -2,9 +2,14 @@
add_subdirectory(geometry)
add_subdirectory(nodes)
-add_subdirectory(drawingmodes)
add_subdirectory(qquickpixmapcache)
+# Limit set of tests to run for static Qt builds.
+if(QT_BUILD_MINIMAL_STATIC_TESTS)
+ return()
+endif()
+add_subdirectory(drawingmodes)
+
if(QT_FEATURE_private_tests)
add_subdirectory(examples)
add_subdirectory(nokeywords)
@@ -67,7 +72,9 @@ if(QT_FEATURE_private_tests)
add_subdirectory(qquickvisualdatamodel)
add_subdirectory(qquickview)
add_subdirectory(qquickview_extra)
- add_subdirectory(qquickcanvasitem)
+ if(NOT ANDROID) # QTBUG-103099
+ add_subdirectory(qquickcanvasitem)
+ endif()
add_subdirectory(qquickdesignersupport)
add_subdirectory(qquickscreen)
add_subdirectory(touchmouse)
diff --git a/tests/auto/quick/drawingmodes/BLACKLIST b/tests/auto/quick/drawingmodes/BLACKLIST
new file mode 100644
index 0000000000..2a7a12b995
--- /dev/null
+++ b/tests/auto/quick/drawingmodes/BLACKLIST
@@ -0,0 +1,11 @@
+# QTBUG-102447
+[points]
+android
+[lines]
+android
+[lineStrip]
+android
+[triangles]
+android
+[triangleStrip]
+android
diff --git a/tests/auto/quick/drawingmodes/CMakeLists.txt b/tests/auto/quick/drawingmodes/CMakeLists.txt
index f7bf15f49f..b2a059f307 100644
--- a/tests/auto/quick/drawingmodes/CMakeLists.txt
+++ b/tests/auto/quick/drawingmodes/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_drawingmodes
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_drawingmodes.cpp
DEFINES
QT_DISABLE_DEPRECATED_BEFORE=0
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/drawingmodes/tst_drawingmodes.cpp b/tests/auto/quick/drawingmodes/tst_drawingmodes.cpp
index 57c4bee118..91bef35b1b 100644
--- a/tests/auto/quick/drawingmodes/tst_drawingmodes.cpp
+++ b/tests/auto/quick/drawingmodes/tst_drawingmodes.cpp
@@ -35,7 +35,7 @@
#include <QtQuick/qsgflatcolormaterial.h>
#include <QtGui/qscreen.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_drawingmodes : public QQmlDataTest
{
@@ -138,7 +138,10 @@ bool tst_drawingmodes::hasPixelAround(const QImage &fb, int centerX, int centerY
return false;
}
-tst_drawingmodes::tst_drawingmodes() : black(qRgb(0, 0, 0)), red(qRgb(0xff, 0, 0))
+tst_drawingmodes::tst_drawingmodes()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , black(qRgb(0, 0, 0))
+ , red(qRgb(0xff, 0, 0))
{
qmlRegisterType<DrawingModeItem>("Test", 1, 0, "DrawingModeItem");
outerWindow.showNormal();
diff --git a/tests/auto/quick/examples/tst_examples.cpp b/tests/auto/quick/examples/tst_examples.cpp
index ed4428951a..21900d9eed 100644
--- a/tests/auto/quick/examples/tst_examples.cpp
+++ b/tests/auto/quick/examples/tst_examples.cpp
@@ -85,6 +85,8 @@ tst_examples::tst_examples()
excludedDirs << "snippets/qml/visualdatamodel_rootindex";
excludedDirs << "snippets/qml/qtbinding";
excludedDirs << "snippets/qml/imports";
+ excludedDirs << "examples/quickcontrols2/imagine";
+ excludedDirs << "examples/quickcontrols2/texteditor";
excludedFiles << "snippets/qml/image-ext.qml";
excludedFiles << "examples/quick/shapes/content/main.qml"; // relies on resources
excludedFiles << "examples/quick/shapes/content/interactive.qml"; // relies on resources
@@ -229,6 +231,9 @@ with a lower case letter.
*/
void tst_examples::sgexamples_data()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("tst_examples::sgexamples_data needs adaptions for Android, QTBUG-102858.");
+#endif
QTest::addColumn<QString>("file");
const QDir repoSourceDir(QLatin1String(SRCDIR) + "/../../../..");
@@ -276,6 +281,9 @@ void tst_examples::sgexamples()
void tst_examples::sgsnippets_data()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("tst_examples::sgsnippets_data needs adaptions for Android, QTBUG-102858.");
+#endif
QTest::addColumn<QString>("file");
// Add QML snippets.
diff --git a/tests/auto/quick/pointerhandlers/flickableinterop/BLACKLIST b/tests/auto/quick/pointerhandlers/flickableinterop/BLACKLIST
index 47c11f14d8..4bf1b58b9a 100644
--- a/tests/auto/quick/pointerhandlers/flickableinterop/BLACKLIST
+++ b/tests/auto/quick/pointerhandlers/flickableinterop/BLACKLIST
@@ -5,7 +5,14 @@ opensuse-leap
windows gcc
[touchDragFlickableBehindButton]
windows gcc
-[touchAndDragHandlerOnFlickable]
-macos # QTBUG-86729
[touchDragSliderAndFlickable]
* # QTBUG-86729
+
+# QTBUG-103061
+[touchDragFlickableBehindItemWithHandlers]
+android
+[mouseDragFlickableBehindItemWithHandlers]
+android
+[touchAndDragHandlerOnFlickable]
+android
+
diff --git a/tests/auto/quick/pointerhandlers/flickableinterop/CMakeLists.txt b/tests/auto/quick/pointerhandlers/flickableinterop/CMakeLists.txt
index f67f9a0a59..41045a64d5 100644
--- a/tests/auto/quick/pointerhandlers/flickableinterop/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/flickableinterop/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_flickableinterop
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_flickableinterop.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp b/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp
index 869ba80658..5925965c55 100644
--- a/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp
+++ b/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp
@@ -45,8 +45,8 @@
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlproperty.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -55,7 +55,8 @@ class tst_FlickableInterop : public QQmlDataTest
Q_OBJECT
public:
tst_FlickableInterop()
- :touchDevice(QTest::createTouchDevice())
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , touchDevice(QTest::createTouchDevice())
{}
private slots:
@@ -90,8 +91,8 @@ void tst_FlickableInterop::createView(QScopedPointer<QQuickView> &window, const
window.reset(new QQuickView);
window->setSource(testFileUrl(fileName));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
diff --git a/tests/auto/quick/pointerhandlers/mousearea_interop/CMakeLists.txt b/tests/auto/quick/pointerhandlers/mousearea_interop/CMakeLists.txt
index f799de97b8..a68d89ee29 100644
--- a/tests/auto/quick/pointerhandlers/mousearea_interop/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/mousearea_interop/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_mousearea_interop
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_mousearea_interop.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp b/tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp
index ee8f079978..ffc0cc333d 100644
--- a/tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp
+++ b/tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp
@@ -37,8 +37,8 @@
#include <QtQuick/qquickview.h>
#include <QtGui/private/qpointingdevice_p.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -47,6 +47,7 @@ class tst_MouseAreaInterop : public QQmlDataTest
Q_OBJECT
public:
tst_MouseAreaInterop()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{}
private slots:
@@ -65,8 +66,8 @@ void tst_MouseAreaInterop::createView(QScopedPointer<QQuickView> &window, const
window.reset(new QQuickView);
window->setSource(testFileUrl(fileName));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -193,19 +194,18 @@ void tst_MouseAreaInterop::hoverHandlerDoesntHoverOnPress() // QTBUG-72843
QTRY_COMPARE(handler->isHovered(), true);
// move the mouse into the "button"
QTest::mouseMove(&window, p);
- // current behavior: the mouse is still within the HoverHandler's region of interest, but MouseArea is obstructing.
- QTRY_COMPARE(handler->isHovered(), false);
+ // both the hoverhandler and the mouse area should now be hovered!
+ QTRY_COMPARE(handler->isHovered(), true);
QCOMPARE(ma->hovered(), true);
- // So HoverHandler is no longer hovered (unfortunately). Clicking should not change it.
QSignalSpy hoveredChangedSpy(handler, SIGNAL(hoveredChanged()));
QTest::mousePress(&window, Qt::LeftButton, Qt::NoModifier, p);
QTRY_COMPARE(ma->pressed(), true);
- QCOMPARE(handler->isHovered(), false);
+ QCOMPARE(handler->isHovered(), true);
QCOMPARE(hoveredChangedSpy.count(), 0);
QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, p);
QTRY_COMPARE(ma->pressed(), false);
- QCOMPARE(handler->isHovered(), false);
+ QCOMPARE(handler->isHovered(), true);
QCOMPARE(hoveredChangedSpy.count(), 0);
}
diff --git a/tests/auto/quick/pointerhandlers/multipointtoucharea_interop/CMakeLists.txt b/tests/auto/quick/pointerhandlers/multipointtoucharea_interop/CMakeLists.txt
index 4aac9440f9..03558f9bf9 100644
--- a/tests/auto/quick/pointerhandlers/multipointtoucharea_interop/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/multipointtoucharea_interop/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_multipointtoucharea_interop
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_multipointtoucharea_interop.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/multipointtoucharea_interop/tst_multipointtoucharea_interop.cpp b/tests/auto/quick/pointerhandlers/multipointtoucharea_interop/tst_multipointtoucharea_interop.cpp
index 0312ed0141..243e769658 100644
--- a/tests/auto/quick/pointerhandlers/multipointtoucharea_interop/tst_multipointtoucharea_interop.cpp
+++ b/tests/auto/quick/pointerhandlers/multipointtoucharea_interop/tst_multipointtoucharea_interop.cpp
@@ -37,8 +37,8 @@
#include <QtQuick/qquickview.h>
#include <QtGui/private/qpointingdevice_p.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -47,6 +47,7 @@ class tst_MptaInterop : public QQmlDataTest
Q_OBJECT
public:
tst_MptaInterop()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{}
private slots:
@@ -67,8 +68,8 @@ void tst_MptaInterop::createView(QScopedPointer<QQuickView> &window, const char
window.reset(new QQuickView);
window->setSource(testFileUrl(fileName));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
diff --git a/tests/auto/quick/pointerhandlers/qquickdraghandler/BLACKLIST b/tests/auto/quick/pointerhandlers/qquickdraghandler/BLACKLIST
new file mode 100644
index 0000000000..e555a4bb61
--- /dev/null
+++ b/tests/auto/quick/pointerhandlers/qquickdraghandler/BLACKLIST
@@ -0,0 +1,9 @@
+# QTBUG-103064
+[touchDragMulti]
+android
+[touchDrag]
+android
+[touchDragMultiSliders]
+android
+[touchPassiveGrabbers]
+android
diff --git a/tests/auto/quick/pointerhandlers/qquickdraghandler/CMakeLists.txt b/tests/auto/quick/pointerhandlers/qquickdraghandler/CMakeLists.txt
index 85c664f8ca..9b0cd40578 100644
--- a/tests/auto/quick/pointerhandlers/qquickdraghandler/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/qquickdraghandler/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickdraghandler
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_qquickdraghandler.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp b/tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp
index 059f06f469..8e191eb398 100644
--- a/tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp
+++ b/tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp
@@ -37,8 +37,8 @@
#include <QtQuick/qquickview.h>
#include <QtGui/private/qpointingdevice_p.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -47,7 +47,8 @@ class tst_DragHandler : public QQmlDataTest
Q_OBJECT
public:
tst_DragHandler()
- :touchDevice(QTest::createTouchDevice())
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , touchDevice(QTest::createTouchDevice())
{}
private slots:
@@ -84,8 +85,8 @@ void tst_DragHandler::createView(QScopedPointer<QQuickView> &window, const char
window.reset(new QQuickView);
window->setSource(testFileUrl(fileName));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
diff --git a/tests/auto/quick/pointerhandlers/qquickhoverhandler/BLACKLIST b/tests/auto/quick/pointerhandlers/qquickhoverhandler/BLACKLIST
index 9bb35c4770..1c4499753a 100644
--- a/tests/auto/quick/pointerhandlers/qquickhoverhandler/BLACKLIST
+++ b/tests/auto/quick/pointerhandlers/qquickhoverhandler/BLACKLIST
@@ -1,3 +1,5 @@
[movingItemWithHoverHandler]
macos # Can't move cursor (QTBUG-76312)
-
+# QTBUG-103065
+[movingItemWithHoverHandler]
+android
diff --git a/tests/auto/quick/pointerhandlers/qquickhoverhandler/CMakeLists.txt b/tests/auto/quick/pointerhandlers/qquickhoverhandler/CMakeLists.txt
index 654bf1c366..cbfadccb50 100644
--- a/tests/auto/quick/pointerhandlers/qquickhoverhandler/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/qquickhoverhandler/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickhoverhandler
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_qquickhoverhandler.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/qquickhoverhandler/data/windowCursorShape.qml b/tests/auto/quick/pointerhandlers/qquickhoverhandler/data/windowCursorShape.qml
new file mode 100644
index 0000000000..b5c1f3d2ef
--- /dev/null
+++ b/tests/auto/quick/pointerhandlers/qquickhoverhandler/data/windowCursorShape.qml
@@ -0,0 +1,13 @@
+import QtQuick 2.15
+import QtQuick.Window 2.15
+
+Window {
+ width: 320
+ height: 240
+ visible: true
+ color: hh.hovered ? "lightsteelblue" : "beige"
+ HoverHandler {
+ id: hh
+ cursorShape: Qt.OpenHandCursor
+ }
+}
diff --git a/tests/auto/quick/pointerhandlers/qquickhoverhandler/tst_qquickhoverhandler.cpp b/tests/auto/quick/pointerhandlers/qquickhoverhandler/tst_qquickhoverhandler.cpp
index de03edf577..5d729c0428 100644
--- a/tests/auto/quick/pointerhandlers/qquickhoverhandler/tst_qquickhoverhandler.cpp
+++ b/tests/auto/quick/pointerhandlers/qquickhoverhandler/tst_qquickhoverhandler.cpp
@@ -39,8 +39,8 @@
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlproperty.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -54,14 +54,17 @@ class tst_HoverHandler : public QQmlDataTest
Q_OBJECT
public:
tst_HoverHandler()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{}
private slots:
void hoverHandlerAndUnderlyingHoverHandler();
void mouseAreaAndUnderlyingHoverHandler();
void hoverHandlerAndUnderlyingMouseArea();
+ void disabledHoverHandlerAndUnderlyingMouseArea();
void movingItemWithHoverHandler();
void margin();
+ void window();
private:
void createView(QScopedPointer<QQuickView> &window, const char *fileName);
@@ -72,8 +75,8 @@ void tst_HoverHandler::createView(QScopedPointer<QQuickView> &window, const char
window.reset(new QQuickView);
window->setSource(testFileUrl(fileName));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -190,8 +193,8 @@ void tst_HoverHandler::mouseAreaAndUnderlyingHoverHandler()
#endif
QTest::mouseMove(window, buttonCenter);
- QCOMPARE(topSidebarHH->isHovered(), false);
- QCOMPARE(sidebarHoveredSpy.count(), 2);
+ QCOMPARE(topSidebarHH->isHovered(), true);
+ QCOMPARE(sidebarHoveredSpy.count(), 1);
QCOMPARE(buttonMA->hovered(), true);
QCOMPARE(buttonHoveredSpy.count(), 1);
#if QT_CONFIG(cursor)
@@ -200,7 +203,7 @@ void tst_HoverHandler::mouseAreaAndUnderlyingHoverHandler()
QTest::mouseMove(window, rightOfButton);
QCOMPARE(topSidebarHH->isHovered(), true);
- QCOMPARE(sidebarHoveredSpy.count(), 3);
+ QCOMPARE(sidebarHoveredSpy.count(), 1);
QCOMPARE(buttonMA->hovered(), false);
QCOMPARE(buttonHoveredSpy.count(), 2);
#if QT_CONFIG(cursor)
@@ -209,7 +212,7 @@ void tst_HoverHandler::mouseAreaAndUnderlyingHoverHandler()
QTest::mouseMove(window, outOfSidebar);
QCOMPARE(topSidebarHH->isHovered(), false);
- QCOMPARE(sidebarHoveredSpy.count(), 4);
+ QCOMPARE(sidebarHoveredSpy.count(), 2);
QCOMPARE(buttonMA->hovered(), false);
QCOMPARE(buttonHoveredSpy.count(), 2);
#if QT_CONFIG(cursor)
@@ -256,8 +259,8 @@ void tst_HoverHandler::hoverHandlerAndUnderlyingMouseArea()
#endif
QTest::mouseMove(window, buttonCenter);
- QCOMPARE(bottomSidebarMA->hovered(), true);
- QCOMPARE(sidebarHoveredSpy.count(), 1);
+ QCOMPARE(bottomSidebarMA->hovered(), false);
+ QCOMPARE(sidebarHoveredSpy.count(), 2);
QCOMPARE(buttonHH->isHovered(), true);
QCOMPARE(buttonHoveredSpy.count(), 1);
#if QT_CONFIG(cursor)
@@ -266,7 +269,7 @@ void tst_HoverHandler::hoverHandlerAndUnderlyingMouseArea()
QTest::mouseMove(window, rightOfButton);
QCOMPARE(bottomSidebarMA->hovered(), true);
- QCOMPARE(sidebarHoveredSpy.count(), 1);
+ QCOMPARE(sidebarHoveredSpy.count(), 3);
QCOMPARE(buttonHH->isHovered(), false);
QCOMPARE(buttonHoveredSpy.count(), 2);
#if QT_CONFIG(cursor)
@@ -275,7 +278,7 @@ void tst_HoverHandler::hoverHandlerAndUnderlyingMouseArea()
QTest::mouseMove(window, outOfSidebar);
QCOMPARE(bottomSidebarMA->hovered(), false);
- QCOMPARE(sidebarHoveredSpy.count(), 2);
+ QCOMPARE(sidebarHoveredSpy.count(), 4);
QCOMPARE(buttonHH->isHovered(), false);
QCOMPARE(buttonHoveredSpy.count(), 2);
#if QT_CONFIG(cursor)
@@ -283,6 +286,52 @@ void tst_HoverHandler::hoverHandlerAndUnderlyingMouseArea()
#endif
}
+void tst_HoverHandler::disabledHoverHandlerAndUnderlyingMouseArea()
+{
+ // Check that if a disabled HoverHandler is installed on an item, it
+ // will not participate in hover event delivery, and as such, also
+ // not block propagation to siblings.
+ QScopedPointer<QQuickView> windowPtr;
+ createView(windowPtr, "lesHoverables.qml");
+ QQuickView * window = windowPtr.data();
+ QQuickItem * bottomSidebar = window->rootObject()->findChild<QQuickItem *>("bottomSidebar");
+ QVERIFY(bottomSidebar);
+ QQuickMouseArea *bottomSidebarMA = bottomSidebar->findChild<QQuickMouseArea *>("bottomSidebarMA");
+ QVERIFY(bottomSidebarMA);
+ QQuickItem * button = bottomSidebar->findChild<QQuickItem *>("buttonWithHH");
+ QVERIFY(button);
+ QQuickHoverHandler *buttonHH = button->findChild<QQuickHoverHandler *>("buttonHH");
+ QVERIFY(buttonHH);
+
+ // By disabling the HoverHandler, it should no longer
+ // block the sibling MouseArea underneath from receiving hover events.
+ buttonHH->setEnabled(false);
+
+ QPoint buttonCenter(button->mapToScene(QPointF(button->width() / 2, button->height() / 2)).toPoint());
+ QPoint rightOfButton(button->mapToScene(QPointF(button->width() + 2, button->height() / 2)).toPoint());
+ QPoint outOfSidebar(bottomSidebar->mapToScene(QPointF(bottomSidebar->width() + 2, bottomSidebar->height() / 2)).toPoint());
+ QSignalSpy sidebarHoveredSpy(bottomSidebarMA, SIGNAL(hoveredChanged()));
+ QSignalSpy buttonHoveredSpy(buttonHH, SIGNAL(hoveredChanged()));
+
+ QTest::mouseMove(window, outOfSidebar);
+ QCOMPARE(bottomSidebarMA->hovered(), false);
+ QCOMPARE(sidebarHoveredSpy.count(), 0);
+ QCOMPARE(buttonHH->isHovered(), false);
+ QCOMPARE(buttonHoveredSpy.count(), 0);
+
+ QTest::mouseMove(window, buttonCenter);
+ QCOMPARE(bottomSidebarMA->hovered(), true);
+ QCOMPARE(sidebarHoveredSpy.count(), 1);
+ QCOMPARE(buttonHH->isHovered(), false);
+ QCOMPARE(buttonHoveredSpy.count(), 0);
+
+ QTest::mouseMove(window, rightOfButton);
+ QCOMPARE(bottomSidebarMA->hovered(), true);
+ QCOMPARE(sidebarHoveredSpy.count(), 1);
+ QCOMPARE(buttonHH->isHovered(), false);
+ QCOMPARE(buttonHoveredSpy.count(), 0);
+}
+
void tst_HoverHandler::movingItemWithHoverHandler()
{
if (isPlatformWayland())
@@ -370,6 +419,27 @@ void tst_HoverHandler::margin() // QTBUG-85303
#endif
}
+void tst_HoverHandler::window() // QTBUG-98717
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("windowCursorShape.qml"));
+ QScopedPointer<QQuickWindow> window(qobject_cast<QQuickWindow *>(component.create()));
+ QVERIFY(!window.isNull());
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+#if QT_CONFIG(cursor)
+ if (isPlatformWayland())
+ QSKIP("Wayland: QCursor::setPos() doesn't work.");
+ auto cursorPos = window->mapToGlobal(QPoint(100, 100));
+ qCDebug(lcPointerTests) << "in window @" << window->position() << "setting cursor pos" << cursorPos;
+ QCursor::setPos(cursorPos);
+ if (!QTest::qWaitFor([cursorPos]{ return QCursor::pos() == cursorPos; }))
+ QSKIP("QCursor::setPos() doesn't work (QTBUG-76312).");
+ QTRY_COMPARE(window->cursor().shape(), Qt::OpenHandCursor);
+#endif
+}
+
QTEST_MAIN(tst_HoverHandler)
#include "tst_qquickhoverhandler.moc"
diff --git a/tests/auto/quick/pointerhandlers/qquickpinchhandler/BLACKLIST b/tests/auto/quick/pointerhandlers/qquickpinchhandler/BLACKLIST
new file mode 100644
index 0000000000..701cdae344
--- /dev/null
+++ b/tests/auto/quick/pointerhandlers/qquickpinchhandler/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-103066
+[scaleNativeGesture]
+android
diff --git a/tests/auto/quick/pointerhandlers/qquickpinchhandler/CMakeLists.txt b/tests/auto/quick/pointerhandlers/qquickpinchhandler/CMakeLists.txt
index 09550b143d..777f005f7c 100644
--- a/tests/auto/quick/pointerhandlers/qquickpinchhandler/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/qquickpinchhandler/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpinchhandler
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_qquickpinchhandler.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/qquickpinchhandler/data/nullTarget.qml b/tests/auto/quick/pointerhandlers/qquickpinchhandler/data/nullTarget.qml
new file mode 100644
index 0000000000..a348938aca
--- /dev/null
+++ b/tests/auto/quick/pointerhandlers/qquickpinchhandler/data/nullTarget.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick 2.15
+
+Item {
+ width: 320; height: 320
+ property alias pinchScale: pinch.scale
+
+ Rectangle {
+ objectName: "blackrect"
+ width: 200; height: 200
+ color: "black"
+ antialiasing: true
+ scale: pinch.scale
+ rotation: pinch.rotation
+ x: pinch.translation.x
+ y: pinch.translation.y
+
+ PinchHandler {
+ id: pinch
+ target: null
+ minimumScale: 0.5
+ maximumScale: 4
+ }
+
+ Text {
+ color: "cyan"
+ anchors.centerIn: parent
+ text: "scale " + pinch.scale.toFixed(2) + " activeScale " + pinch.activeScale.toFixed(2)
+ }
+ }
+}
diff --git a/tests/auto/quick/pointerhandlers/qquickpinchhandler/data/pinchproperties.qml b/tests/auto/quick/pointerhandlers/qquickpinchhandler/data/pinchproperties.qml
index 3cabde5f59..1e6256cf03 100644
--- a/tests/auto/quick/pointerhandlers/qquickpinchhandler/data/pinchproperties.qml
+++ b/tests/auto/quick/pointerhandlers/qquickpinchhandler/data/pinchproperties.qml
@@ -30,11 +30,38 @@ import QtQuick 2.12
Rectangle {
id: whiteRect
- property real scale: -1.0
+ property real pinchScale: -1.0
property int activeCount : 0
property int deactiveCount : 0
width: 320; height: 320
color: "white"
+
+ PointHandler {
+ id: ph1
+ acceptedDevices: PointerDevice.TouchScreen
+ target: Rectangle {
+ parent: whiteRect
+ color: "cyan"
+ x: ph1.point.position.x - 3
+ y: ph1.point.position.y - 3
+ width: 6; height: 6; radius: 3
+ }
+ }
+
+ PointHandler {
+ id: ph2
+ acceptedDevices: PointerDevice.TouchScreen
+ target: Rectangle {
+ parent: whiteRect
+ color: "lightgreen"
+ x: ph2.point.position.x - 3
+ y: ph2.point.position.y - 3
+ width: 6; height: 6; radius: 3
+ }
+ }
+
+ Text { color: "magenta"; z: 1; text: "scale: " + blackRect.scale}
+
Rectangle {
id: blackRect
objectName: "blackrect"
@@ -43,8 +70,7 @@ Rectangle {
x: 50
width: 100
height: 100
- opacity: (whiteRect.width-blackRect.x+whiteRect.height-blackRect.y-199)/200
- Text { color: "white"; text: "opacity: " + blackRect.opacity + "\nscale: " + blackRect.scale}
+
Rectangle {
color: "red"
width: 6; height: 6; radius: 3
@@ -56,20 +82,20 @@ Rectangle {
PinchHandler {
id: pincharea
objectName: "pinchHandler"
- minimumScale: 1.0
+ minimumScale: 0.5
maximumScale: 4.0
minimumRotation: 0.0
maximumRotation: 90.0
xAxis.maximum: 140
yAxis.maximum: 170
onActiveChanged: {
- whiteRect.scale = pincharea.scale
+ whiteRect.pinchScale = pincharea.scale
if (active) ++activeCount
else ++deactiveCount;
}
onUpdated: {
- whiteRect.scale = pincharea.scale
+ whiteRect.pinchScale = pincharea.scale
//whiteRect.pointCount = pincharea.pointCount
}
}
diff --git a/tests/auto/quick/pointerhandlers/qquickpinchhandler/tst_qquickpinchhandler.cpp b/tests/auto/quick/pointerhandlers/qquickpinchhandler/tst_qquickpinchhandler.cpp
index 6cf6214286..7da37826b4 100644
--- a/tests/auto/quick/pointerhandlers/qquickpinchhandler/tst_qquickpinchhandler.cpp
+++ b/tests/auto/quick/pointerhandlers/qquickpinchhandler/tst_qquickpinchhandler.cpp
@@ -29,14 +29,14 @@
#include <QtTest/QtTest>
#include <QtTest/QSignalSpy>
#include <QtGui/QStyleHints>
-#include <QtGui/private/qevent_p.h>
+#include <QtGui/private/qeventpoint_p.h>
#include <qpa/qwindowsysteminterface.h>
#include <QtQuick/private/qquickpinchhandler_p.h>
#include <QtQuick/private/qquickrectangle_p.h>
#include <QtQuick/qquickview.h>
#include <QtQml/qqmlcontext.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -50,10 +50,11 @@ class tst_QQuickPinchHandler: public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQuickPinchHandler() { }
+ tst_QQuickPinchHandler() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
private slots:
void cleanupTestCase();
void pinchProperties();
+ void scale_data();
void scale();
void scaleThreeFingers();
void scaleNativeGesture_data();
@@ -67,7 +68,6 @@ private slots:
void transformedpinchHandler();
private:
- QQuickView *createView();
QPointingDevice *touchscreen = QTest::createTouchDevice();
QPointingDevice *touchpad = QTest::createTouchDevice(QInputDevice::DeviceType::TouchPad);
};
@@ -84,7 +84,7 @@ static bool withinBounds(qreal lower, qreal num, qreal upper)
void tst_QQuickPinchHandler::pinchProperties()
{
- QScopedPointer<QQuickView> window(createView());
+ QScopedPointer<QQuickView> window(QQuickViewTestUtils::createView());
window->setSource(testFileUrl("pinchproperties.qml"));
window->show();
QVERIFY(window->rootObject() != nullptr);
@@ -155,19 +155,19 @@ void tst_QQuickPinchHandler::pinchProperties()
QSignalSpy scaleMinSpy(pinchHandler, SIGNAL(minimumScaleChanged()));
QSignalSpy scaleMaxSpy(pinchHandler, SIGNAL(maximumScaleChanged()));
- QCOMPARE(pinchHandler->minimumScale(), 1.0);
+ QCOMPARE(pinchHandler->minimumScale(), 0.5);
QCOMPARE(pinchHandler->maximumScale(), 4.0);
- pinchHandler->setMinimumScale(0.5);
+ pinchHandler->setMinimumScale(0.25);
pinchHandler->setMaximumScale(1.5);
- QCOMPARE(pinchHandler->minimumScale(), 0.5);
+ QCOMPARE(pinchHandler->minimumScale(), 0.25);
QCOMPARE(pinchHandler->maximumScale(), 1.5);
QCOMPARE(scaleMinSpy.count(),1);
QCOMPARE(scaleMaxSpy.count(),1);
- pinchHandler->setMinimumScale(0.5);
+ pinchHandler->setMinimumScale(0.25);
pinchHandler->setMaximumScale(1.5);
QCOMPARE(scaleMinSpy.count(),1);
@@ -205,97 +205,126 @@ QMutableEventPoint makeTouchPoint(int id, QPoint p, QQuickView *v, QQuickItem *i
return touchPoint;
}
-void tst_QQuickPinchHandler::scale()
+void tst_QQuickPinchHandler::scale_data()
{
- QQuickView *window = createView();
- QScopedPointer<QQuickView> scope(window);
- window->setSource(testFileUrl("pinchproperties.qml"));
- window->show();
- QVERIFY(QTest::qWaitForWindowExposed(window));
- QVERIFY(window->rootObject() != nullptr);
- qApp->processEvents();
+ QTest::addColumn<QUrl>("qmlfile");
+ QTest::addColumn<bool>("hasTarget");
+ QTest::newRow("targetModifying") << testFileUrl("pinchproperties.qml") << true;
+ QTest::newRow("nullTarget") << testFileUrl("nullTarget.qml") << false;
+}
- auto *pinchHandler = static_cast<PinchHandler *>(window->rootObject()->findChild<QQuickPinchHandler*>("pinchHandler"));
- QVERIFY(pinchHandler != nullptr);
- QSignalSpy grabChangedSpy(pinchHandler, SIGNAL(grabChanged(QPointingDevice::GrabTransition, QEventPoint)));
+void tst_QQuickPinchHandler::scale()
+{
+ QFETCH(QUrl, qmlfile);
+ QFETCH(bool, hasTarget);
- QQuickItem *root = qobject_cast<QQuickItem*>(window->rootObject());
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, qmlfile));
+ QQuickItem *root = qobject_cast<QQuickItem*>(window.rootObject());
QVERIFY(root != nullptr);
-
- // target
- QQuickItem *blackRect = window->rootObject()->findChild<QQuickItem*>("blackrect");
+ auto *pinchHandler = static_cast<PinchHandler *>(root->findChild<QQuickPinchHandler*>());
+ QVERIFY(pinchHandler != nullptr);
+ QQuickItem *blackRect = (hasTarget ? pinchHandler->target() : pinchHandler->parentItem());
QVERIFY(blackRect != nullptr);
+ QSignalSpy grabChangedSpy(pinchHandler, SIGNAL(grabChanged(QPointingDevice::GrabTransition, QEventPoint)));
QPoint p0(80, 80);
QPoint p1(100, 100);
- {
- QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(window, touchscreen);
- pinchSequence.press(0, p0, window).commit();
- QQuickTouchUtils::flush(window);
- // In order for the stationary point to remember its previous position,
- // we have to reuse the same pinchSequence object. Otherwise if we let it
- // be destroyed and then start a new sequence, point 0 will default to being
- // stationary at 0, 0, and pinchHandler will filter out that touchpoint because
- // it is outside its bounds.
- pinchSequence.stationary(0).press(1, p1, window).commit();
- QQuickTouchUtils::flush(window);
- QTRY_COMPARE(grabChangedSpy.count(), 1); // passive grab
-
- QPoint pd(10, 10);
- // move one point until PinchHandler activates
- for (int pi = 0; pi < 10 && !pinchHandler->active(); ++pi) {
- p1 += pd;
- pinchSequence.stationary(0).move(1, p1, window).commit();
- QQuickTouchUtils::flush(window);
- }
- QCOMPARE(pinchHandler->active(), true);
- // grabs occur when the handler becomes active; at that time, QQuickHandlerPoint.sceneGrabPosition should be correct
- QVERIFY(pinchHandler->firstPoint().sceneGrabPosition() != QPointF());
- QVERIFY(pinchHandler->lastPoint().sceneGrabPosition() != QPointF());
- QCOMPARE(pinchHandler->firstPoint().sceneGrabPosition(), pinchHandler->firstPoint().scenePosition());
- QCOMPARE(pinchHandler->lastPoint().sceneGrabPosition(), pinchHandler->lastPoint().scenePosition());
- // first point got a passive grab; both points got exclusive grabs
- QCOMPARE(grabChangedSpy.count(), 3);
- QLineF line(p0, p1);
- const qreal startLength = line.length();
-
- p1+=pd;
- pinchSequence.stationary(0).move(1, p1, window).commit();
- QQuickTouchUtils::flush(window);
- line.setP2(p1);
- qreal scale = line.length() / startLength;
- QVERIFY(qFloatDistance(root->property("scale").toReal(), scale) < 10);
- QVERIFY(qFloatDistance(blackRect->scale(), scale) < 10);
-
- p1+=pd;
- pinchSequence.stationary(0).move(1, p1, window).commit();
- QQuickTouchUtils::flush(window);
+ QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(&window, touchscreen);
+ pinchSequence.press(0, p0, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ // In order for the stationary point to remember its previous position,
+ // we have to reuse the same pinchSequence object. Otherwise if we let it
+ // be destroyed and then start a new sequence, point 0 will default to being
+ // stationary at 0, 0, and pinchHandler will filter out that touchpoint because
+ // it is outside its bounds.
+ pinchSequence.stationary(0).press(1, p1, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ QCOMPARE(grabChangedSpy.size(), 1); // passive grab
+
+ QPoint pd(10, 10);
+ // move one point until PinchHandler activates
+ for (int pi = 0; pi < 10 && !pinchHandler->active(); ++pi) {
+ p1 += pd;
+ pinchSequence.stationary(0).move(1, p1, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ }
+ QCOMPARE(pinchHandler->active(), true);
+ // grabs occur when the handler becomes active; at that time, QQuickHandlerPoint.sceneGrabPosition should be correct
+ QVERIFY(pinchHandler->firstPoint().sceneGrabPosition() != QPointF());
+ QVERIFY(pinchHandler->lastPoint().sceneGrabPosition() != QPointF());
+ QCOMPARE(pinchHandler->firstPoint().sceneGrabPosition(), pinchHandler->firstPoint().scenePosition());
+ QCOMPARE(pinchHandler->lastPoint().sceneGrabPosition(), pinchHandler->lastPoint().scenePosition());
+ // first point got a passive grab; both points got exclusive grabs
+ QCOMPARE(grabChangedSpy.size(), 3);
+ QLineF line(p0, p1);
+ const qreal startLength = line.length();
+
+ // move the same point even further and observe the change in scale
+ for (int i = 0; i < 2; ++i) {
+ p1 += pd;
+ pinchSequence.stationary(0).move(1, p1, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ if (lcPointerTests().isDebugEnabled()) QTest::qWait(500);
line.setP2(p1);
- scale = line.length() / startLength;
-
- QVERIFY(qFloatDistance(root->property("scale").toReal(), scale) < 10);
- QVERIFY(qFloatDistance(blackRect->scale(), scale) < 10);
-
- QPointF expectedCentroid = p0 + (p1 - p0)/2;
+ qreal expectedScale = line.length() / startLength;
+ QVERIFY(qFloatDistance(root->property("pinchScale").toReal(), expectedScale) < 10);
+ QVERIFY(qFloatDistance(blackRect->scale(), expectedScale) < 10);
+ QCOMPARE(pinchHandler->scale(), root->property("pinchScale").toReal());
+ QCOMPARE(pinchHandler->scale(), pinchHandler->activeScale()); // in sync for the first gesture
+ QPointF expectedCentroid = p0 + (p1 - p0) / 2;
QCOMPARE(pinchHandler->centroid().scenePosition(), expectedCentroid);
}
- // scale beyond bound
- p1 += QPoint(20, 20);
- {
- QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(window, touchscreen);
- pinchSequence.stationary(0).move(1, p1, window).commit();
- QQuickTouchUtils::flush(window);
- QCOMPARE(blackRect->scale(), qreal(4)); // qquickpinchhandler does not manipulate scale property
- pinchSequence.release(0, p0, window).release(1, p1, window).commit();
- QQuickTouchUtils::flush(window);
+ qreal lastScale = pinchHandler->scale();
+ pinchSequence.release(0, p0, &window).release(1, p1, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ if (lcPointerTests().isDebugEnabled()) QTest::qWait(500);
+ // scale property is persistent after release
+ QCOMPARE(pinchHandler->scale(), lastScale);
+
+ // pinch a second time: scale picks up where we left off
+ p0 = QPoint(80, 80);
+ p1 = QPoint(100, 100);
+ pinchSequence.press(0, p0, &window).press(1, p1, &window).commit();
+ // move one point until PinchHandler activates
+ for (int pi = 0; pi < 10 && !pinchHandler->active(); ++pi) {
+ p1 += pd;
+ pinchSequence.stationary(0).move(1, p1, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ }
+ if (lcPointerTests().isDebugEnabled()) QTest::qWait(500);
+ QCOMPARE(pinchHandler->active(), true);
+ QCOMPARE(pinchHandler->scale(), lastScale); // just activated, not scaling further yet
+ for (int i = 0; i < 2; ++i) {
+ lastScale = pinchHandler->scale();
+ p1 += pd;
+ pinchSequence.stationary(0).move(1, p1, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ if (lcPointerTests().isDebugEnabled()) QTest::qWait(500);
+ QVERIFY(pinchHandler->scale() > lastScale);
+ line.setP2(p1);
+ qreal expectedActiveScale = line.length() / startLength;
+ QVERIFY(qFloatDistance(pinchHandler->activeScale(), expectedActiveScale) < 10);
+ QCOMPARE(pinchHandler->scale(), root->property("pinchScale").toReal());
+ QVERIFY(pinchHandler->scale() != pinchHandler->activeScale()); // not in sync anymore
}
+
+ // scale beyond maximumScale
+ p1 = QPoint(310, 310);
+ pinchSequence.stationary(0).move(1, p1, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ if (lcPointerTests().isDebugEnabled()) QTest::qWait(500);
+ QCOMPARE(blackRect->scale(), qreal(4));
+ QCOMPARE(pinchHandler->scale(), qreal(4)); // limited by maximumScale
+ pinchSequence.release(0, p0, &window).release(1, p1, &window).commit();
+ QQuickTouchUtils::flush(&window);
QCOMPARE(pinchHandler->active(), false);
}
void tst_QQuickPinchHandler::scaleThreeFingers()
{
- QQuickView *window = createView();
+ QQuickView *window = QQuickViewTestUtils::createView();
QScopedPointer<QQuickView> scope(window);
window->setSource(testFileUrl("threeFingers.qml"));
window->show();
@@ -374,16 +403,20 @@ void tst_QQuickPinchHandler::scaleThreeFingers()
void tst_QQuickPinchHandler::scaleNativeGesture_data()
{
QTest::addColumn<QString>("qmlfile");
+ QTest::addColumn<qreal>("scale");
- QTest::newRow("just pinch") << "pinchproperties.qml";
- QTest::newRow("pinch & drag") << "pinchAndDrag.qml";
+ QTest::newRow("just pinch") << "pinchproperties.qml" << 1.1;
+ QTest::newRow("pinch & drag") << "pinchAndDrag.qml" << 1.1;
+ QTest::newRow("bigger than limit") << "pinchproperties.qml" << 5.0;
+ QTest::newRow("smaller than limit") << "pinchproperties.qml" << 0.25;
}
void tst_QQuickPinchHandler::scaleNativeGesture()
{
QFETCH(QString, qmlfile);
+ QFETCH(qreal, scale);
- QQuickView *window = createView();
+ QQuickView *window = QQuickViewTestUtils::createView();
QScopedPointer<QQuickView> scope(window);
window->setSource(testFileUrl(qmlfile));
window->show();
@@ -401,8 +434,8 @@ void tst_QQuickPinchHandler::scaleNativeGesture()
QPointF targetPos = target->position();
ulong ts = 1;
- // first pinch: scale it up
- const qreal expectedScale = 1.1;
+ // first pinch: scale it
+ const qreal expectedScale = qBound(qreal(0.5), scale, qreal(4));
QPointF pinchPos(75, 75);
QPointF pinchLocalPos = target->mapFromScene(pinchPos);
// target position is adjusted in QQuickItemPrivate::adjustedPosForTransform()
@@ -412,11 +445,11 @@ void tst_QQuickPinchHandler::scaleNativeGesture()
QWindowSystemInterface::handleGestureEvent(window, ts++, touchpad,
Qt::BeginNativeGesture, pinchPos, pinchPos);
QWindowSystemInterface::handleGestureEventWithRealValue(window, ts++, touchpad,
- Qt::ZoomNativeGesture, expectedScale - 1, pinchPos, pinchPos);
+ Qt::ZoomNativeGesture, scale - 1, pinchPos, pinchPos);
QTRY_COMPARE(target->scale(), expectedScale);
QCOMPARE(pinchHandler->active(), true);
- QCOMPARE(pinchHandler->centroid().position(), pinchLocalPos);
- QCOMPARE(pinchHandler->centroid().scenePosition(), pinchPos);
+ QCOMPARE(pinchHandler->centroid().position().toPoint(), pinchLocalPos.toPoint());
+ QCOMPARE(pinchHandler->centroid().scenePosition().toPoint(), pinchPos.toPoint());
QVERIFY(qAbs(target->position().x() - expectedPos.x()) < 0.001);
QVERIFY(qAbs(target->position().y() - expectedPos.y()) < 0.001);
QCOMPARE(pinchHandler->scale(), expectedScale);
@@ -432,9 +465,12 @@ void tst_QQuickPinchHandler::scaleNativeGesture()
QCOMPARE(pinchHandler->translation(), QVector2D());
QCOMPARE(pinchHandler->rotation(), 0);
- // second pinch at a different position: scale it down to original size again
+ // second pinch at a different position: scale it back to original size again
+ // but remove the limits first, so that we can scale arbitrarily
+ pinchHandler->setMaximumScale(qInf());
+ pinchHandler->setMinimumScale(-qInf());
const qreal reverseScale = (1 / expectedScale);
- pinchPos = QPointF(125, 125);
+ pinchPos = QPointF(110, 110);
pinchLocalPos = target->mapFromScene(pinchPos);
QWindowSystemInterface::handleGestureEvent(window, ts++, touchpad,
Qt::BeginNativeGesture, pinchPos, pinchPos);
@@ -442,8 +478,8 @@ void tst_QQuickPinchHandler::scaleNativeGesture()
Qt::ZoomNativeGesture, reverseScale - 1, pinchPos, pinchPos);
QTRY_COMPARE(target->scale(), 1);
QCOMPARE(pinchHandler->active(), true);
- QCOMPARE(pinchHandler->centroid().position(), pinchLocalPos);
- QCOMPARE(pinchHandler->centroid().scenePosition(), pinchPos);
+ QCOMPARE(pinchHandler->centroid().position().toPoint(), pinchLocalPos.toPoint());
+ QCOMPARE(pinchHandler->centroid().scenePosition().toPoint(), pinchPos.toPoint());
QCOMPARE(pinchHandler->scale(), 1);
QCOMPARE(pinchHandler->activeScale(), reverseScale);
QWindowSystemInterface::handleGestureEvent(window, ts++, touchpad,
@@ -456,7 +492,7 @@ void tst_QQuickPinchHandler::scaleNativeGesture()
void tst_QQuickPinchHandler::pan()
{
- QQuickView *window = createView();
+ QQuickView *window = QQuickViewTestUtils::createView();
QScopedPointer<QQuickView> scope(window);
window->setSource(testFileUrl("pinchproperties.qml"));
window->show();
@@ -486,7 +522,7 @@ void tst_QQuickPinchHandler::pan()
pinchSequence.stationary(0).press(1, p1, window).commit();
QQuickTouchUtils::flush(window);
QVERIFY(!root->property("pinchActive").toBool());
- QCOMPARE(root->property("scale").toReal(), -1.0);
+ QCOMPARE(root->property("pinchScale").toReal(), -1.0);
p0 += QPoint(dragThreshold, 0);
p1 += QPoint(dragThreshold, 0);
@@ -494,7 +530,7 @@ void tst_QQuickPinchHandler::pan()
QQuickTouchUtils::flush(window);
// movement < dragThreshold: pinchHandler not yet active
QVERIFY(!root->property("pinchActive").toBool());
- QCOMPARE(root->property("scale").toReal(), -1.0);
+ QCOMPARE(root->property("pinchScale").toReal(), -1.0);
// just above the dragThreshold: pinchHandler starts
p0 += QPoint(1, 0);
@@ -502,7 +538,7 @@ void tst_QQuickPinchHandler::pan()
pinchSequence.move(0, p0, window).move(1, p1, window).commit();
QQuickTouchUtils::flush(window);
QCOMPARE(pinchHandler->active(), true);
- QCOMPARE(root->property("scale").toReal(), 1.0);
+ QCOMPARE(root->property("pinchScale").toReal(), 1.0);
// Calculation of the center point is tricky at first:
// center point of the two touch points in item coordinates:
@@ -568,7 +604,7 @@ void tst_QQuickPinchHandler::dragAxesEnabled_data()
void tst_QQuickPinchHandler::dragAxesEnabled()
{
- QQuickView *window = createView();
+ QQuickView *window = QQuickViewTestUtils::createView();
QScopedPointer<QQuickView> scope(window);
window->setSource(testFileUrl("pinchproperties.qml"));
window->show();
@@ -635,7 +671,7 @@ void tst_QQuickPinchHandler::dragAxesEnabled()
void tst_QQuickPinchHandler::retouch()
{
const int dragThreshold = QGuiApplication::styleHints()->startDragDistance();
- QQuickView *window = createView();
+ QQuickView *window = QQuickViewTestUtils::createView();
QScopedPointer<QQuickView> scope(window);
window->setSource(testFileUrl("pinchproperties.qml"));
window->show();
@@ -669,7 +705,7 @@ void tst_QQuickPinchHandler::retouch()
pinchSequence.move(0, p0,window).move(1, p1,window).commit();
QQuickTouchUtils::flush(window);
- QCOMPARE(root->property("scale").toReal(), 1.0);
+ QCOMPARE(root->property("pinchScale").toReal(), 1.0);
QCOMPARE(pinchHandler->active(), true);
p0 -= delta;
@@ -680,8 +716,8 @@ void tst_QQuickPinchHandler::retouch()
QCOMPARE(pinchHandler->active(), true);
// accept some slack
- QVERIFY(withinBounds(1.4, root->property("scale").toReal(), 1.6));
- QCOMPARE(pinchHandler->centroid().position(), QPointF(40, 40)); // blackrect is at 50,50
+ QVERIFY(withinBounds(1.4, root->property("pinchScale").toReal(), 1.6));
+ QCOMPARE(pinchHandler->centroid().position().toPoint(), QPoint(40, 40)); // blackrect is at 50,50
QVERIFY(withinBounds(1.4, blackRect->scale(), 1.6));
QCOMPARE(root->property("activeCount").toInt(), 1);
@@ -718,7 +754,7 @@ void tst_QQuickPinchHandler::retouch()
void tst_QQuickPinchHandler::cancel()
{
const int dragThreshold = QGuiApplication::styleHints()->startDragDistance();
- QQuickView *window = createView();
+ QQuickView *window = QQuickViewTestUtils::createView();
QScopedPointer<QQuickView> scope(window);
window->setSource(testFileUrl("pinchproperties.qml"));
window->show();
@@ -755,7 +791,7 @@ void tst_QQuickPinchHandler::cancel()
pinchSequence.move(0, p0,window).move(1, p1,window).commit();
QQuickTouchUtils::flush(window);
- QCOMPARE(root->property("scale").toReal(), 1.0);
+ QCOMPARE(root->property("pinchScale").toReal(), 1.0);
QCOMPARE(pinchHandler->active(), true);
p0 -= delta;
@@ -763,8 +799,8 @@ void tst_QQuickPinchHandler::cancel()
pinchSequence.move(0, p0,window).move(1, p1,window).commit();
QQuickTouchUtils::flush(window);
- QVERIFY(withinBounds(1.4, root->property("scale").toReal(), 1.6));
- QCOMPARE(pinchHandler->centroid().position(), QPointF(40, 40)); // blackrect is at 50,50
+ QVERIFY(withinBounds(1.4, root->property("pinchScale").toReal(), 1.6));
+ QCOMPARE(pinchHandler->centroid().position().toPoint(), QPoint(40, 40)); // blackrect is at 50,50
QVERIFY(withinBounds(1.4, blackRect->scale(), 1.6));
QSKIP("cancel is not supported atm");
@@ -773,8 +809,8 @@ void tst_QQuickPinchHandler::cancel()
QCoreApplication::sendEvent(window, &cancelEvent);
QQuickTouchUtils::flush(window);
- QCOMPARE(root->property("scale").toReal(), 1.0);
- QCOMPARE(root->property("center").toPointF(), QPointF(40, 40)); // blackrect is at 50,50
+ QCOMPARE(root->property("pinchScale").toReal(), 1.0);
+ QCOMPARE(root->property("center").toPoint(), QPoint(40, 40)); // blackrect is at 50,50
QCOMPARE(blackRect->scale(), 1.0);
QVERIFY(!root->property("pinchActive").toBool());
}
@@ -811,7 +847,7 @@ void tst_QQuickPinchHandler::transformedpinchHandler()
QFETCH(QPoint, p1);
QFETCH(bool, shouldPinch);
- QQuickView *view = createView();
+ QQuickView *view = QQuickViewTestUtils::createView();
QScopedPointer<QQuickView> scope(view);
view->setSource(testFileUrl("transformedPinchHandler.qml"));
view->show();
@@ -850,14 +886,6 @@ void tst_QQuickPinchHandler::transformedpinchHandler()
}
}
-QQuickView *tst_QQuickPinchHandler::createView()
-{
- QQuickView *window = new QQuickView(0);
- window->setGeometry(0,0,240,320);
-
- return window;
-}
-
QTEST_MAIN(tst_QQuickPinchHandler)
#include "tst_qquickpinchhandler.moc"
diff --git a/tests/auto/quick/pointerhandlers/qquickpointerhandler/CMakeLists.txt b/tests/auto/quick/pointerhandlers/qquickpointerhandler/CMakeLists.txt
index 9dc541a845..dc4f6bac03 100644
--- a/tests/auto/quick/pointerhandlers/qquickpointerhandler/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/qquickpointerhandler/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpointerhandler
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_qquickpointerhandler.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp b/tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp
index 9bbf7a38b7..9cab8f8ed6 100644
--- a/tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp
+++ b/tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp
@@ -35,8 +35,8 @@
#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickview.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -236,7 +236,8 @@ class tst_PointerHandlers : public QQmlDataTest
Q_OBJECT
public:
tst_PointerHandlers()
- : touchDevice(QTest::createTouchDevice())
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , touchDevice(QTest::createTouchDevice())
{}
private slots:
@@ -288,8 +289,8 @@ void tst_PointerHandlers::createView(QScopedPointer<QQuickView> &window, const c
// window->setGeometry(0,0,240,320);
window->setSource(testFileUrl(fileName));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -339,11 +340,11 @@ void tst_PointerHandlers::touchEventDelivery()
QTest::touchEvent(window, touchDevice).move(0, p1, window);
QQuickTouchUtils::flush(window);
qCDebug(lcPointerTests) << "events after touch move" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 2); // no grabs -> no updates
+ QCOMPARE(eventItem1->eventList.size(), 3); // no grabs -> only the handler gets the update
QTest::touchEvent(window, touchDevice).release(0, p1, window);
QQuickTouchUtils::flush(window);
qCDebug(lcPointerTests) << "events after touch release" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 3);
+ QCOMPARE(eventItem1->eventList.size(), 4);
QCOMPARE_EVENT(eventItem1->eventList.size() - 1, Event::HandlerDestination, QEvent::Pointer, QEventPoint::State::Released, NoGrab);
eventItem1->eventList.clear();
@@ -394,12 +395,12 @@ void tst_PointerHandlers::touchEventDelivery()
QTest::touchEvent(window, touchDevice).move(0, p1, window);
QQuickTouchUtils::flush(window);
qCDebug(lcPointerTests) << "events after touch move" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 2);
+ QCOMPARE(eventItem1->eventList.size(), 3);
QTest::touchEvent(window, touchDevice).release(0, p1, window);
QQuickTouchUtils::flush(window);
qCDebug(lcPointerTests) << "events after touch release" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 3);
- QCOMPARE_EVENT(2, Event::HandlerDestination, QEvent::Pointer, QEventPoint::State::Released, NoGrab);
+ QCOMPARE(eventItem1->eventList.size(), 4);
+ QCOMPARE_EVENT(3, Event::HandlerDestination, QEvent::Pointer, QEventPoint::State::Released, NoGrab);
eventItem1->eventList.clear();
// wait to avoid getting a double click event
@@ -421,11 +422,11 @@ void tst_PointerHandlers::touchEventDelivery()
QTest::touchEvent(window, touchDevice).move(0, p1, window);
QQuickTouchUtils::flush(window);
qCDebug(lcPointerTests) << "events after touch move" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 2);
+ QCOMPARE(eventItem1->eventList.size(), 3);
QTest::touchEvent(window, touchDevice).release(0, p1, window);
QQuickTouchUtils::flush(window);
qCDebug(lcPointerTests) << "events after touch release" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 3);
+ QCOMPARE(eventItem1->eventList.size(), 4);
eventItem1->eventList.clear();
// wait to avoid getting a double click event
@@ -499,14 +500,14 @@ void tst_PointerHandlers::mouseEventDelivery()
QPoint p1 = QPoint(20, 20);
QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, p1);
qCDebug(lcPointerTests) << "events after mouse press" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 2);
+ QCOMPARE(eventItem1->eventList.size(), 3); // handler: hover; handler: press; item: press
p1 += QPoint(10, 0);
QTest::mouseMove(window, p1);
qCDebug(lcPointerTests) << "events after mouse move" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 2);
+ QCOMPARE(eventItem1->eventList.size(), 4); // handler: hover
QTest::mouseRelease(window, Qt::LeftButton);
qCDebug(lcPointerTests) << "events after mouse release" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 2);
+ QCOMPARE(eventItem1->eventList.size(), 4);
eventItem1->eventList.clear();
// wait to avoid getting a double click event
@@ -519,9 +520,9 @@ void tst_PointerHandlers::mouseEventDelivery()
p1 = QPoint(20, 20);
QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, p1);
qCDebug(lcPointerTests) << "events after mouse press" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 2);
- QCOMPARE_EVENT(0, Event::HandlerDestination, QEvent::Pointer, QEventPoint::State::Pressed, NoGrab);
- QCOMPARE_EVENT(1, Event::MouseDestination, QEvent::MouseButtonPress, QEventPoint::State::Pressed, QPointingDevice::GrabExclusive);
+ QCOMPARE(eventItem1->eventList.size(), 3);
+ QCOMPARE_EVENT(1, Event::HandlerDestination, QEvent::Pointer, QEventPoint::State::Pressed, NoGrab);
+ QCOMPARE_EVENT(2, Event::MouseDestination, QEvent::MouseButtonPress, QEventPoint::State::Pressed, QPointingDevice::GrabExclusive);
QCOMPARE(window->mouseGrabberItem(), eventItem1);
QPointF localPos = eventItem1->mapFromScene(p1);
@@ -534,11 +535,11 @@ void tst_PointerHandlers::mouseEventDelivery()
p1 += QPoint(10, 0);
QTest::mouseMove(window, p1);
qCDebug(lcPointerTests) << "events after mouse move" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 4);
- QCOMPARE_EVENT(3, Event::MouseDestination, QEvent::MouseMove, QEventPoint::State::Updated, QPointingDevice::GrabExclusive);
+ QCOMPARE(eventItem1->eventList.size(), 5);
+ QCOMPARE_EVENT(4, Event::MouseDestination, QEvent::MouseMove, QEventPoint::State::Updated, QPointingDevice::GrabExclusive);
QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, p1);
qCDebug(lcPointerTests) << "events after mouse release" << eventItem1->eventList;
- QCOMPARE(eventItem1->eventList.size(), 7);
+ QCOMPARE(eventItem1->eventList.size(), 8);
QCOMPARE_EVENT(eventItem1->eventList.size() - 2, Event::MouseDestination, QEvent::MouseButtonRelease, QEventPoint::State::Released, NoGrab);
QCOMPARE_EVENT(eventItem1->eventList.size() - 1, Event::MouseDestination, QEvent::UngrabMouse, QEventPoint::State::Released, QPointingDevice::UngrabExclusive);
eventItem1->eventList.clear();
@@ -645,9 +646,10 @@ void tst_PointerHandlers::dynamicCreation()
QPoint p1(20, 20);
QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, p1);
- QTRY_COMPARE(eventItem1->eventList.size(), 2);
- QCOMPARE_EVENT(0, Event::HandlerDestination, QEvent::Pointer, QEventPoint::State::Pressed, NoGrab);
- QCOMPARE_EVENT(1, Event::MouseDestination, QEvent::MouseButtonPress, QEventPoint::State::Pressed, NoGrab);
+ QTRY_COMPARE(eventItem1->eventList.size(), 3);
+ QCOMPARE_EVENT(0, Event::HandlerDestination, QEvent::Pointer, QEventPoint::State::Updated, NoGrab);
+ QCOMPARE_EVENT(1, Event::HandlerDestination, QEvent::Pointer, QEventPoint::State::Pressed, NoGrab);
+ QCOMPARE_EVENT(2, Event::MouseDestination, QEvent::MouseButtonPress, QEventPoint::State::Pressed, NoGrab);
QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, p1);
}
diff --git a/tests/auto/quick/pointerhandlers/qquickpointhandler/BLACKLIST b/tests/auto/quick/pointerhandlers/qquickpointhandler/BLACKLIST
index f4d271c230..5d6a59e1dd 100644
--- a/tests/auto/quick/pointerhandlers/qquickpointhandler/BLACKLIST
+++ b/tests/auto/quick/pointerhandlers/qquickpointhandler/BLACKLIST
@@ -1,2 +1,4 @@
[tabletStylus]
macos ci
+qnx
+android # QTBUG-103068
diff --git a/tests/auto/quick/pointerhandlers/qquickpointhandler/CMakeLists.txt b/tests/auto/quick/pointerhandlers/qquickpointhandler/CMakeLists.txt
index 507bc7549b..e3499f46b0 100644
--- a/tests/auto/quick/pointerhandlers/qquickpointhandler/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/qquickpointhandler/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpointhandler
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_qquickpointhandler.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/qquickpointhandler/tst_qquickpointhandler.cpp b/tests/auto/quick/pointerhandlers/qquickpointhandler/tst_qquickpointhandler.cpp
index a511c906f8..d22b3d86aa 100644
--- a/tests/auto/quick/pointerhandlers/qquickpointhandler/tst_qquickpointhandler.cpp
+++ b/tests/auto/quick/pointerhandlers/qquickpointhandler/tst_qquickpointhandler.cpp
@@ -39,8 +39,9 @@
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlproperty.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -49,7 +50,8 @@ class tst_PointHandler : public QQmlDataTest
Q_OBJECT
public:
tst_PointHandler()
- : touchDevice(QTest::createTouchDevice())
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , touchDevice(QTest::createTouchDevice())
{}
private slots:
@@ -71,8 +73,8 @@ void tst_PointHandler::createView(QScopedPointer<QQuickView> &window, const char
window.reset(new QQuickView);
window->setSource(testFileUrl(fileName));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::centerOnScreen(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
diff --git a/tests/auto/quick/pointerhandlers/qquicktaphandler/CMakeLists.txt b/tests/auto/quick/pointerhandlers/qquicktaphandler/CMakeLists.txt
index babe276519..cc20b8998d 100644
--- a/tests/auto/quick/pointerhandlers/qquicktaphandler/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/qquicktaphandler/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktaphandler
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_qquicktaphandler.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp b/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp
index 9b1101eb3a..02d79c724c 100644
--- a/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp
+++ b/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp
@@ -41,8 +41,8 @@
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlproperty.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -51,6 +51,7 @@ class tst_TapHandler : public QQmlDataTest
Q_OBJECT
public:
tst_TapHandler()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{}
private slots:
@@ -92,8 +93,8 @@ void tst_TapHandler::createView(QScopedPointer<QQuickView> &window, const char *
window->setSource(testFileUrl(fileName));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -739,8 +740,8 @@ void tst_TapHandler::rightLongPressIgnoreWheel()
QQuickTapHandler *tap = window->rootObject()->findChild<QQuickTapHandler*>();
QVERIFY(tap);
- QSignalSpy tappedSpy(tap, SIGNAL(tapped(QEventPoint *)));
- QSignalSpy longPressedSpy(tap, SIGNAL(longPressed()));
+ QSignalSpy tappedSpy(tap, &QQuickTapHandler::tapped);
+ QSignalSpy longPressedSpy(tap, &QQuickTapHandler::longPressed);
QPoint p1(100, 100);
// Mouse wheel with ScrollBegin phase (because as soon as two fingers are touching
diff --git a/tests/auto/quick/pointerhandlers/qquickwheelhandler/CMakeLists.txt b/tests/auto/quick/pointerhandlers/qquickwheelhandler/CMakeLists.txt
index 588fd8f2e2..91db08f227 100644
--- a/tests/auto/quick/pointerhandlers/qquickwheelhandler/CMakeLists.txt
+++ b/tests/auto/quick/pointerhandlers/qquickwheelhandler/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickwheelhandler
SOURCES
- ../../../shared/util.cpp ../../../shared/util.h
- ../../shared/geometrytestutil.cpp ../../shared/geometrytestutil.h
- ../../shared/viewtestutil.cpp ../../shared/viewtestutil.h
- ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h
tst_qquickwheelhandler.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/pointerhandlers/qquickwheelhandler/tst_qquickwheelhandler.cpp b/tests/auto/quick/pointerhandlers/qquickwheelhandler/tst_qquickwheelhandler.cpp
index 2abf2ea8c3..84906f7848 100644
--- a/tests/auto/quick/pointerhandlers/qquickwheelhandler/tst_qquickwheelhandler.cpp
+++ b/tests/auto/quick/pointerhandlers/qquickwheelhandler/tst_qquickwheelhandler.cpp
@@ -34,8 +34,8 @@
#include <QtQuick/private/qquickrectangle_p.h>
#include <QtQuick/qquickview.h>
#include <QtQml/qqmlcontext.h>
-#include "../../../shared/util.h"
-#include "../../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcPointerTests, "qt.quick.pointer.tests")
@@ -43,7 +43,7 @@ class tst_QQuickWheelHandler: public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQuickWheelHandler() { }
+ tst_QQuickWheelHandler() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
private slots:
void singleHandler_data();
diff --git a/tests/auto/quick/propertyrequirements/tst_propertyrequirements.cpp b/tests/auto/quick/propertyrequirements/tst_propertyrequirements.cpp
index ca348eea03..46f3c49d86 100644
--- a/tests/auto/quick/propertyrequirements/tst_propertyrequirements.cpp
+++ b/tests/auto/quick/propertyrequirements/tst_propertyrequirements.cpp
@@ -92,8 +92,8 @@ void tst_PropertyRequirements::constantOrNotifyableMain()
}
messages.sort();
- const QString message("\nThe following QML Types have properties which are neither CONSTANT nor NOTIFYable:\n");
- QWARN(qPrintable(message + messages.join("\n")));
+ qWarning() << "\nThe following QML Types have properties which are neither CONSTANT nor NOTIFYable:\n"
+ << qPrintable(messages.join("\n"));
// TODO enable once technical debt is fixes
// QCOMPARE(failuresByProperty.count(), 0);
@@ -127,7 +127,7 @@ void tst_PropertyRequirements::constantOrNotifyableFull()
}
messages.sort();
- QWARN(qPrintable(messages.join("\n")));
+ qWarning() << qPrintable(messages.join("\n"));
// TODO enable once technical debt is fixes
// QCOMPARE(failuresByProperty.count(), 0);
diff --git a/tests/auto/quick/qquickaccessible/CMakeLists.txt b/tests/auto/quick/qquickaccessible/CMakeLists.txt
index 8d0fcbe406..bc037a64dd 100644
--- a/tests/auto/quick/qquickaccessible/CMakeLists.txt
+++ b/tests/auto/quick/qquickaccessible/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickaccessible
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickaccessible.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickaccessible
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp b/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp
index edaaed967a..d48c7ed163 100644
--- a/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp
+++ b/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp
@@ -45,8 +45,8 @@
#include <QtQuick/private/qquicklistview_p.h>
#include <QtQuick/private/qquicktext_p.h>
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
#define EXPECT(cond) \
do { \
@@ -84,6 +84,7 @@ private slots:
};
tst_QQuickAccessible::tst_QQuickAccessible()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -146,17 +147,17 @@ void tst_QQuickAccessible::commonTests()
qDebug() << "testing" << accessibleRoleFileName;
- QQuickView *view = new QQuickView();
+ auto view = std::make_unique<QQuickView>();
// view->setFixedSize(240,320);
view->setSource(testFileUrl(accessibleRoleFileName));
view->show();
// view->setFocus();
QVERIFY(view->rootObject() != nullptr);
- QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(view);
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(view.get());
QVERIFY(iface);
- delete view;
+ view.reset();
QTestAccessibility::clearEvents();
}
@@ -167,12 +168,11 @@ void tst_QQuickAccessible::quickAttachedProperties()
QQmlComponent component(&engine);
component.setData("import QtQuick 2.0\nItem {\n"
"}", QUrl());
- QObject *object = component.create();
+ auto object = std::unique_ptr<QObject>(component.create());
QVERIFY(object != nullptr);
- QObject *attachedObject = QQuickAccessibleAttached::attachedProperties(object);
+ QObject *attachedObject = QQuickAccessibleAttached::attachedProperties(object.get());
QCOMPARE(attachedObject, static_cast<QObject*>(nullptr));
- delete object;
}
// Attaching to non-item
@@ -201,11 +201,11 @@ void tst_QQuickAccessible::quickAttachedProperties()
component.setData("import QtQuick 2.0\nItem {\n"
"Accessible.role: Accessible.Button\n"
"}", QUrl());
- QObject *object = component.create();
+ auto object = std::unique_ptr<QObject>(component.create());
QVERIFY(object != nullptr);
const auto attachedObject = qobject_cast<QQuickAccessibleAttached*>(
- QQuickAccessibleAttached::attachedProperties(object));
+ QQuickAccessibleAttached::attachedProperties(object.get()));
QVERIFY(attachedObject);
if (attachedObject) {
QVariant p = attachedObject->property("role");
@@ -219,7 +219,6 @@ void tst_QQuickAccessible::quickAttachedProperties()
QVERIFY2(p.value<QString>().isEmpty(), QTest::toString(p));
QCOMPARE(attachedObject->wasNameExplicitlySet(), false);
}
- delete object;
}
// Attached property
@@ -231,11 +230,11 @@ void tst_QQuickAccessible::quickAttachedProperties()
"Accessible.name: \"Donald\"\n"
"Accessible.description: \"Duck\"\n"
"}", QUrl());
- QObject *object = component.create();
+ auto object = std::unique_ptr<QObject>(component.create());
QVERIFY(object != nullptr);
const auto attachedObject = qobject_cast<QQuickAccessibleAttached*>(
- QQuickAccessibleAttached::attachedProperties(object));
+ QQuickAccessibleAttached::attachedProperties(object.get()));
QVERIFY(attachedObject);
if (attachedObject) {
QVariant p = attachedObject->property("role");
@@ -249,7 +248,6 @@ void tst_QQuickAccessible::quickAttachedProperties()
QCOMPARE(p.toString(), QLatin1String("Duck"));
QCOMPARE(attachedObject->wasNameExplicitlySet(), true);
}
- delete object;
}
// Check overriding of attached role for Text
@@ -261,10 +259,10 @@ void tst_QQuickAccessible::quickAttachedProperties()
"Accessible.name: \"TextButton\"\n"
"Accessible.description: \"Text Button\"\n"
"}", QUrl());
- QObject *object = component.create();
+ auto object = std::unique_ptr<QObject>(component.create());
QVERIFY(object != nullptr);
- QObject *attachedObject = QQuickAccessibleAttached::attachedProperties(object);
+ QObject *attachedObject = QQuickAccessibleAttached::attachedProperties(object.get());
QVERIFY(attachedObject);
if (attachedObject) {
QVariant p = attachedObject->property("role");
@@ -277,7 +275,6 @@ void tst_QQuickAccessible::quickAttachedProperties()
QCOMPARE(p.isNull(), false);
QCOMPARE(p.toString(), QLatin1String("Text Button"));
}
- delete object;
}
// Check overriding of attached role for Text
{
@@ -293,13 +290,13 @@ void tst_QQuickAccessible::quickAttachedProperties()
"Accessible.description: \"Text Button\"\n"
"}\n"
"}", QUrl());
- QObject *object = component.create();
+ auto object = std::unique_ptr<QObject>(component.create());
QVERIFY(object != nullptr);
- QQuickListView *listview = qobject_cast<QQuickListView *>(object);
+ QQuickListView *listview = qobject_cast<QQuickListView *>(object.get());
QVERIFY(listview != nullptr);
QQuickItem *contentItem = listview->contentItem();
- QQuickText *childItem = QQuickVisualTestUtil::findItem<QQuickText>(contentItem, "acc_text");
+ QQuickText *childItem = QQuickVisualTestUtils::findItem<QQuickText>(contentItem, "acc_text");
QVERIFY(childItem != nullptr);
QObject *attachedObject = QQuickAccessibleAttached::attachedProperties(childItem);
@@ -315,7 +312,6 @@ void tst_QQuickAccessible::quickAttachedProperties()
QCOMPARE(p.isNull(), false);
QCOMPARE(p.toString(), QLatin1String("Text Button"));
}
- delete object;
}
// Check that a name can be implicitly set.
{
@@ -327,11 +323,11 @@ void tst_QQuickAccessible::quickAttachedProperties()
Accessible.role: Accessible.Button
Accessible.description: "Text Button"
})", QUrl());
- QScopedPointer<QObject> object(component.create());
+ auto object = std::unique_ptr<QObject>(component.create());
QVERIFY(object);
const auto attachedObject = qobject_cast<QQuickAccessibleAttached*>(
- QQuickAccessibleAttached::attachedProperties(object.data()));
+ QQuickAccessibleAttached::attachedProperties(object.get()));
QVERIFY(attachedObject);
QVERIFY(!attachedObject->wasNameExplicitlySet());
@@ -352,12 +348,12 @@ void tst_QQuickAccessible::basicPropertiesTest()
QAccessibleInterface *app = QAccessible::queryAccessibleInterface(qApp);
QCOMPARE(app->childCount(), 0);
- QQuickView *window = new QQuickView();
+ auto window = std::make_unique<QQuickView>();
window->setSource(testFileUrl("text.qml"));
window->show();
QCOMPARE(app->childCount(), 1);
- QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(window);
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(window.get());
QVERIFY(iface);
QCOMPARE(iface->childCount(), 1);
@@ -391,6 +387,7 @@ void tst_QQuickAccessible::basicPropertiesTest()
QCOMPARE(item->indexOfChild(text2), 1);
QVERIFY(!text2->state().editable);
QVERIFY(text2->state().readOnly);
+ QVERIFY(text2->state().focusable);
QCOMPARE(iface->indexOfChild(text2), -1);
QCOMPARE(text2->indexOfChild(item), -1);
@@ -482,7 +479,7 @@ void tst_QQuickAccessible::basicPropertiesTest()
attached->setRole(QAccessible::StaticText);
QVERIFY(!text3->state().readOnly);
- delete window;
+ window.reset();
QTestAccessibility::clearEvents();
}
@@ -501,14 +498,15 @@ QAccessibleInterface *topLevelChildAt(QAccessibleInterface *iface, int x, int y)
void tst_QQuickAccessible::hitTest()
{
- QQuickView *window = new QQuickView;
+ auto window = std::make_unique<QQuickView>();
window->setSource(testFileUrl("hittest.qml"));
window->show();
- QAccessibleInterface *windowIface = QAccessible::queryAccessibleInterface(window);
+ QAccessibleInterface *windowIface = QAccessible::queryAccessibleInterface(window.get());
QVERIFY(windowIface);
QAccessibleInterface *rootItem = windowIface->child(0);
- QRect rootRect = rootItem->rect();
+ // on Android the main window is always shown fullscreen
+ QRect rootRect = QRect(window->x(), window->y(), window->width(), window->height());
// check the root item from app
QAccessibleInterface *appIface = QAccessible::queryAccessibleInterface(qApp);
@@ -554,13 +552,13 @@ void tst_QQuickAccessible::hitTest()
}
}
- delete window;
+ window.reset();
QTestAccessibility::clearEvents();
}
void tst_QQuickAccessible::checkableTest()
{
- QScopedPointer<QQuickView> window(new QQuickView());
+ auto window = std::make_unique<QQuickView>();
window->setSource(testFileUrl("checkbuttons.qml"));
window->show();
@@ -573,7 +571,7 @@ void tst_QQuickAccessible::checkableTest()
QAccessible::State activatedChange;
activatedChange.active = true;
- QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(window.data());
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(window.get());
QVERIFY(iface);
QAccessibleInterface *root = iface->child(0);
@@ -637,7 +635,7 @@ void tst_QQuickAccessible::checkableTest()
void tst_QQuickAccessible::ignoredTest()
{
- QScopedPointer<QQuickView> window(new QQuickView());
+ auto window = std::make_unique<QQuickView>();
window->setSource(testFileUrl("ignored.qml"));
window->show();
@@ -650,7 +648,7 @@ void tst_QQuickAccessible::ignoredTest()
QAccessible::State activatedChange;
activatedChange.active = true;
- QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(window.data());
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(window.get());
QVERIFY(iface);
QAccessibleInterface *rectangleA = iface->child(0);
diff --git a/tests/auto/quick/qquickanchors/CMakeLists.txt b/tests/auto/quick/qquickanchors/CMakeLists.txt
index 08a4298145..b8a308b5d7 100644
--- a/tests/auto/quick/qquickanchors/CMakeLists.txt
+++ b/tests/auto/quick/qquickanchors/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickanchors
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickanchors.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickanchors/tst_qquickanchors.cpp b/tests/auto/quick/qquickanchors/tst_qquickanchors.cpp
index 128a154492..9c6401c60f 100644
--- a/tests/auto/quick/qquickanchors/tst_qquickanchors.cpp
+++ b/tests/auto/quick/qquickanchors/tst_qquickanchors.cpp
@@ -35,18 +35,18 @@
#include <QtQuick/private/qquicktext_p.h>
#include <QtQuick/private/qquickanchors_p_p.h>
#include <QtQuick/private/qquickitem_p.h>
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
Q_DECLARE_METATYPE(QQuickAnchors::Anchor)
-using namespace QQuickVisualTestUtil;
+using namespace QQuickVisualTestUtils;
class tst_qquickanchors : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickanchors() {}
+ tst_qquickanchors() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void basicAnchors();
diff --git a/tests/auto/quick/qquickanimatedimage/BLACKLIST b/tests/auto/quick/qquickanimatedimage/BLACKLIST
new file mode 100644
index 0000000000..c4778ba8e5
--- /dev/null
+++ b/tests/auto/quick/qquickanimatedimage/BLACKLIST
@@ -0,0 +1,5 @@
+# QTBUG-103076
+[mirror_running]
+android
+[mirror_notRunning]
+android
diff --git a/tests/auto/quick/qquickanimatedimage/CMakeLists.txt b/tests/auto/quick/qquickanimatedimage/CMakeLists.txt
index e7a026a36f..69894ccffc 100644
--- a/tests/auto/quick/qquickanimatedimage/CMakeLists.txt
+++ b/tests/auto/quick/qquickanimatedimage/CMakeLists.txt
@@ -12,11 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickanimatedimage
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qquickanimatedimage.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -24,6 +20,7 @@ qt_internal_add_test(tst_qquickanimatedimage
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp b/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp
index 31c3fb9946..2680647453 100644
--- a/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp
+++ b/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp
@@ -36,8 +36,8 @@
#include <QSignalSpy>
#include <QtQml/qqmlcontext.h>
-#include "../../shared/testhttpserver.h"
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
Q_DECLARE_METATYPE(QQuickImageBase::Status)
@@ -62,7 +62,7 @@ class tst_qquickanimatedimage : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickanimatedimage() {}
+ tst_qquickanimatedimage() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void cleanup();
diff --git a/tests/auto/quick/qquickanimatedsprite/BLACKLIST b/tests/auto/quick/qquickanimatedsprite/BLACKLIST
index 7eb242876a..720ef7a275 100644
--- a/tests/auto/quick/qquickanimatedsprite/BLACKLIST
+++ b/tests/auto/quick/qquickanimatedsprite/BLACKLIST
@@ -1,3 +1,7 @@
# QTBUG-65613
[test_largeAnimation]
b2qt
+
+# QTBUG-103260
+[test_finishBehavior]
+android
diff --git a/tests/auto/quick/qquickanimatedsprite/CMakeLists.txt b/tests/auto/quick/qquickanimatedsprite/CMakeLists.txt
index 9e20d712e6..681c450078 100644
--- a/tests/auto/quick/qquickanimatedsprite/CMakeLists.txt
+++ b/tests/auto/quick/qquickanimatedsprite/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickanimatedsprite
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickanimatedsprite.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -24,6 +21,7 @@ qt_internal_add_test(tst_qquickanimatedsprite
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp b/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp
index 7a56c370d5..81651d957d 100644
--- a/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp
+++ b/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp
@@ -26,7 +26,7 @@
**
****************************************************************************/
#include <QtTest/QtTest>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtQuick/qquickview.h>
#include <QtQuickTest/QtQuickTest>
#include <private/qabstractanimation_p.h>
@@ -42,7 +42,7 @@ class tst_qquickanimatedsprite : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickanimatedsprite(){}
+ tst_qquickanimatedsprite() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
@@ -329,9 +329,26 @@ class KillerThread : public QThread
Q_OBJECT
protected:
void run() override {
- sleep(3);
- qFatal("Either the GUI or the render thread is stuck in an infinite loop.");
+ QMutexLocker lock(&abortMutex);
+ if (!aborted)
+ abortWaitCondition.wait(&abortMutex, 3000);
+
+ if (!aborted)
+ qFatal("Either the GUI or the render thread is stuck in an infinite loop.");
+ }
+
+public:
+ void abort()
+ {
+ QMutexLocker lock(&abortMutex);
+ aborted = true;
+ abortWaitCondition.wakeAll();
}
+
+private:
+ QMutex abortMutex;
+ QWaitCondition abortWaitCondition;
+ bool aborted = false;
};
// Regression test for QTBUG-53937
@@ -356,7 +373,7 @@ void tst_qquickanimatedsprite::test_changeSourceToSmallerImgKeepingBigFrameSize(
// If we reach this point it's because we didn't hit QTBUG-53937
- killer->terminate();
+ killer->abort();
killer->wait();
}
diff --git a/tests/auto/quick/qquickanimations/CMakeLists.txt b/tests/auto/quick/qquickanimations/CMakeLists.txt
index 203fa770fb..cf53e10a1c 100644
--- a/tests/auto/quick/qquickanimations/CMakeLists.txt
+++ b/tests/auto/quick/qquickanimations/CMakeLists.txt
@@ -12,12 +12,9 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickanimations
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickanimations.cpp
DEFINES
QT_DISABLE_DEPRECATED_BEFORE=0
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -25,6 +22,7 @@ qt_internal_add_test(tst_qquickanimations
Qt::QmlModelsPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickanimations/data/cleanupWhenRenderThreadStops.qml b/tests/auto/quick/qquickanimations/data/cleanupWhenRenderThreadStops.qml
new file mode 100644
index 0000000000..4cfb59aeab
--- /dev/null
+++ b/tests/auto/quick/qquickanimations/data/cleanupWhenRenderThreadStops.qml
@@ -0,0 +1,32 @@
+//main.qml
+
+import QtQuick 2.12
+import QtQuick.Window 2.12
+
+Item {
+ id: root
+ width: 640
+ height: 480
+ visible: true
+ property bool running : false
+
+ Rectangle {
+ id: rect
+ anchors.fill: parent
+ color: "red"
+
+ Component.onCompleted: {
+ anim.start()
+ running = true
+ }
+ }
+
+ OpacityAnimator {
+ id: anim
+
+ target: rect
+ from: 1
+ to: 0
+ duration: 20000
+ }
+}
diff --git a/tests/auto/shared/platformquirks.h b/tests/auto/quick/qquickanimations/data/infiniteAnimationWithoutFrom.qml
index 5252e8cfe2..9b4bfe4faa 100644
--- a/tests/auto/shared/platformquirks.h
+++ b/tests/auto/quick/qquickanimations/data/infiniteAnimationWithoutFrom.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** 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.
@@ -26,31 +26,29 @@
**
****************************************************************************/
-#ifndef PLATFORMQUIRKS_H
-#define PLATFORMQUIRKS_H
+import QtQuick 2.0
-#include <qglobal.h>
+Item {
+ width: 100
+ height: 100
-#ifdef Q_OS_OSX
-#include <Carbon/Carbon.h>
-#endif
-
-struct PlatformQuirks
-{
- static inline bool isClipboardAvailable()
- {
-#if !QT_CONFIG(clipboard)
- return false;
-#elif defined(Q_OS_OSX)
- PasteboardRef pasteboard;
- OSStatus status = PasteboardCreate(0, &pasteboard);
- if (status == noErr)
- CFRelease(pasteboard);
- return status == noErr;
-#else
- return true;
-#endif
+ // note that 'from' property is missing
+ NumberAnimation {
+ objectName: "anim"
+ to: from+360
+ loops: Animation.Infinite
+ target: rect
+ properties: "rotation"
+ duration: 100
}
-};
-#endif
+ Rectangle {
+ objectName: "rect"
+ id: rect
+ width: 30
+ height: 10
+ color: "red"
+ anchors.centerIn: parent
+ transformOrigin: Item.Center
+ }
+}
diff --git a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
index 6bc8a05607..313f478820 100644
--- a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
+++ b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
@@ -46,13 +46,13 @@
#include <limits.h>
#include <math.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickanimations : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickanimations() {}
+ tst_qquickanimations() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override
@@ -116,8 +116,9 @@ private slots:
void fastFlickingBug();
void opacityAnimationFromZero();
void alwaysRunToEndInSequentialAnimationBug();
+ void cleanupWhenRenderThreadStops();
+ void infiniteLoopsWithoutFrom();
};
-
#define QTIMED_COMPARE(lhs, rhs) do { \
for (int ii = 0; ii < 5; ++ii) { \
if (lhs == rhs) \
@@ -1898,7 +1899,7 @@ void tst_qquickanimations::opacityAnimationFromZero()
void tst_qquickanimations::alwaysRunToEndInSequentialAnimationBug()
{
- QQuickView view(QUrl::fromLocalFile("data/alwaysRunToEndInSequentialAnimationBug.qml"));
+ QQuickView view(testFileUrl("alwaysRunToEndInSequentialAnimationBug.qml"));
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
@@ -1998,6 +1999,67 @@ void tst_qquickanimations::alwaysRunToEndInSequentialAnimationBug()
QCOMPARE(whiteRect->property("opacity").value<qreal>(),1.0);
}
+void tst_qquickanimations::cleanupWhenRenderThreadStops()
+{
+ QQuickView view(testFileUrl("cleanupWhenRenderThreadStops.qml"));
+ view.show();
+ view.setPersistentGraphics(false);
+ view.setPersistentSceneGraph(false);
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+ QTest::qWait(50);
+ view.hide();
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+}
+
+void tst_qquickanimations::infiniteLoopsWithoutFrom()
+{
+ // This test checks QTBUG-84375
+ QQuickView view(testFileUrl("infiniteAnimationWithoutFrom.qml"));
+ view.show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+ QVERIFY(view.rootObject());
+
+ QObject *root = view.rootObject();
+ QQuickAbstractAnimation *animation = root->findChild<QQuickAbstractAnimation *>("anim");
+ QVERIFY(animation);
+ QQuickRectangle *rectangle = root->findChild<QQuickRectangle *>("rect");
+ QVERIFY(rectangle);
+
+ qreal prevRotation = rectangle->rotation();
+ int numsCrossedZero = 0;
+ connect(rectangle, &QQuickRectangle::rotationChanged, this, [&]() {
+ const auto rotation = rectangle->rotation();
+ // We take a large range of (180; 360] here, because the animation in
+ // the test runs for a short time, and so there can be huge gaps between
+ // rotation values.
+ const bool prevRotationOldLoop = prevRotation > 180.0 && prevRotation <= 360.0;
+ const bool currRotationNewLoop = rotation >= 0.0 && rotation <= 180.0;
+ if (prevRotationOldLoop && currRotationNewLoop)
+ numsCrossedZero++;
+ prevRotation = rotation;
+ });
+
+ // The logic in lamdba function above requires at least two positions in
+ // a rotation animation - one in [0; 180] range, and another in (180; 360]
+ // range
+ animation->start();
+ animation->pause();
+ QCOMPARE(numsCrossedZero, 0);
+ animation->setCurrentTime(40);
+ animation->setCurrentTime(90);
+ QCOMPARE(numsCrossedZero, 0);
+ animation->setCurrentTime(140);
+ animation->setCurrentTime(190);
+ QCOMPARE(numsCrossedZero, 1);
+ animation->setCurrentTime(240);
+ animation->setCurrentTime(290);
+ QCOMPARE(numsCrossedZero, 2);
+
+ animation->stop();
+}
+
QTEST_MAIN(tst_qquickanimations)
#include "tst_qquickanimations.moc"
diff --git a/tests/auto/quick/qquickanimators/CMakeLists.txt b/tests/auto/quick/qquickanimators/CMakeLists.txt
index 4ad5624f85..b8c8367998 100644
--- a/tests/auto/quick/qquickanimators/CMakeLists.txt
+++ b/tests/auto/quick/qquickanimators/CMakeLists.txt
@@ -12,22 +12,17 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickanimators
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickanimators.cpp
DEFINES
QT_DISABLE_DEPRECATED_BEFORE=0
QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickanimators/tst_qquickanimators.cpp b/tests/auto/quick/qquickanimators/tst_qquickanimators.cpp
index 30a1d5a560..f1cfa05d38 100644
--- a/tests/auto/quick/qquickanimators/tst_qquickanimators.cpp
+++ b/tests/auto/quick/qquickanimators/tst_qquickanimators.cpp
@@ -37,10 +37,10 @@
#include <QtQuick/private/qquickanimation_p_p.h>
#include <QtQuick/private/qquickitem_p.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
-using namespace QQuickViewTestUtil;
+using namespace QQuickViewTestUtils;
QT_BEGIN_NAMESPACE
@@ -48,6 +48,9 @@ class tst_Animators: public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_Animators();
+
private slots:
void testMultiWinAnimator_data();
void testMultiWinAnimator();
@@ -55,6 +58,11 @@ private slots:
void testTransitionsWithImplicitFrom();
};
+tst_Animators::tst_Animators()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_Animators::testMultiWinAnimator_data()
{
QTest::addColumn<int>("count");
diff --git a/tests/auto/quick/qquickapplication/CMakeLists.txt b/tests/auto/quick/qquickapplication/CMakeLists.txt
index 53582b4548..431bbc8507 100644
--- a/tests/auto/quick/qquickapplication/CMakeLists.txt
+++ b/tests/auto/quick/qquickapplication/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickapplication
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickapplication.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -24,6 +21,7 @@ qt_internal_add_test(tst_qquickapplication
Qt::QmlPrivate
Qt::Quick
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickapplication/tst_qquickapplication.cpp b/tests/auto/quick/qquickapplication/tst_qquickapplication.cpp
index 785475402a..133583e72c 100644
--- a/tests/auto/quick/qquickapplication/tst_qquickapplication.cpp
+++ b/tests/auto/quick/qquickapplication/tst_qquickapplication.cpp
@@ -36,7 +36,7 @@
#include <qpa/qwindowsysteminterface.h>
#include <qpa/qplatformintegration.h>
#include <private/qguiapplication_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickapplication : public QQmlDataTest
{
@@ -60,6 +60,7 @@ private:
};
tst_qquickapplication::tst_qquickapplication()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/quick/qquickbehaviors/BLACKLIST b/tests/auto/quick/qquickbehaviors/BLACKLIST
deleted file mode 100644
index 1a9a7e9b19..0000000000
--- a/tests/auto/quick/qquickbehaviors/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-82404
-[currentValue]
-macos ci
diff --git a/tests/auto/quick/qquickbehaviors/CMakeLists.txt b/tests/auto/quick/qquickbehaviors/CMakeLists.txt
index b864b0c21b..5904ca48a1 100644
--- a/tests/auto/quick/qquickbehaviors/CMakeLists.txt
+++ b/tests/auto/quick/qquickbehaviors/CMakeLists.txt
@@ -12,17 +12,15 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickbehaviors
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickbehaviors.cpp
bindable.h
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -31,7 +29,7 @@ set_target_properties(tst_qquickbehaviors PROPERTIES
QT_QML_MODULE_URI test
)
-qt6_qml_type_registration(tst_qquickbehaviors)
+_qt_internal_qml_type_registration(tst_qquickbehaviors)
#### Keys ignored in scope 1:.:.:qquickbehaviors.pro:<TRUE>:
diff --git a/tests/auto/quick/qquickbehaviors/data/defaultQProperty.qml b/tests/auto/quick/qquickbehaviors/data/defaultQProperty.qml
new file mode 100644
index 0000000000..596efac325
--- /dev/null
+++ b/tests/auto/quick/qquickbehaviors/data/defaultQProperty.qml
@@ -0,0 +1,14 @@
+import QtQuick
+
+Item {
+ property int heightChanges: 0
+ property int widthChanges: 0
+ implicitWidth: 50
+ implicitHeight: 50
+ height: { return 0 }
+ width: { return 10 }
+ Behavior on height { NumberAnimation { duration: 300 } }
+ Behavior on width { NumberAnimation { duration: 300 } }
+ onHeightChanged: ++heightChanges
+ onWidthChanged: ++widthChanges
+}
diff --git a/tests/auto/quick/qquickbehaviors/tst_qquickbehaviors.cpp b/tests/auto/quick/qquickbehaviors/tst_qquickbehaviors.cpp
index 35423651f9..159fb1398e 100644
--- a/tests/auto/quick/qquickbehaviors/tst_qquickbehaviors.cpp
+++ b/tests/auto/quick/qquickbehaviors/tst_qquickbehaviors.cpp
@@ -36,14 +36,14 @@
#include <QtQuick/private/qquickanimation_p.h>
#include <QtQuick/private/qquicksmoothedanimation_p.h>
#include <private/qquickitem_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "bindable.h"
class tst_qquickbehaviors : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickbehaviors() {}
+ tst_qquickbehaviors() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void init() { qApp->processEvents(); } //work around animation timer bug (QTBUG-22865)
@@ -78,6 +78,7 @@ private slots:
void safeToDelete();
void targetProperty();
void bindableProperty();
+ void defaultQProperty();
};
void tst_qquickbehaviors::simpleBehavior()
@@ -703,6 +704,23 @@ void tst_qquickbehaviors::bindableProperty()
QTRY_COMPARE(testBindable->prop(), 300);
}
+void tst_qquickbehaviors::defaultQProperty()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("defaultQProperty.qml"));
+ QScopedPointer<QObject> root(c.create());
+ QVERIFY2(root, qPrintable(c.errorString()));
+
+ QQuickItem *item = qobject_cast<QQuickItem *>(root.data());
+ QVERIFY(item);
+
+ QCOMPARE(item->height(), 0.0);
+ QCOMPARE(item->width(), 10.0);
+
+ // Both change only once: No intermediate change to 0 on width.
+ QCOMPARE(root->property("heightChanges").toInt(), 1);
+ QCOMPARE(root->property("widthChanges").toInt(), 1);
+}
QTEST_MAIN(tst_qquickbehaviors)
diff --git a/tests/auto/quick/qquickborderimage/BLACKLIST b/tests/auto/quick/qquickborderimage/BLACKLIST
new file mode 100644
index 0000000000..30b72020a4
--- /dev/null
+++ b/tests/auto/quick/qquickborderimage/BLACKLIST
@@ -0,0 +1,7 @@
+# QTBUG-103077
+[mirror]
+android
+[borderImageMesh]
+android
+[multiFrame]
+android
diff --git a/tests/auto/quick/qquickborderimage/CMakeLists.txt b/tests/auto/quick/qquickborderimage/CMakeLists.txt
index 7316588123..d3537c5321 100644
--- a/tests/auto/quick/qquickborderimage/CMakeLists.txt
+++ b/tests/auto/quick/qquickborderimage/CMakeLists.txt
@@ -12,16 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickborderimage
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickborderimage.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -29,6 +20,7 @@ qt_internal_add_test(tst_qquickborderimage
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp b/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp
index 32b502c6dc..e963082a1a 100644
--- a/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp
+++ b/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp
@@ -42,9 +42,9 @@
#include <QtQuick/qquickview.h>
#include <QtQml/qqmlcontext.h>
-#include "../../shared/testhttpserver.h"
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
@@ -96,6 +96,7 @@ void tst_qquickborderimage::cleanup()
}
tst_qquickborderimage::tst_qquickborderimage()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -590,18 +591,25 @@ void tst_qquickborderimage::progressAndStatusChanges()
#if QT_CONFIG(opengl)
void tst_qquickborderimage::borderImageMesh()
{
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QSKIP("Skipping due to grabWindow not functional on offscreen/minimal platforms");
+
QQuickView *window = new QQuickView;
window->setSource(testFileUrl("nonmesh.qml"));
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window));
+ if (window->rendererInterface()->graphicsApi() == QSGRendererInterface::Software)
+ QSKIP("Software backend has no ShaderEffect supported, skipping test");
+
QImage nonmesh = window->grabWindow();
window->setSource(testFileUrl("mesh.qml"));
QImage mesh = window->grabWindow();
QString errorMessage;
- QVERIFY2(QQuickVisualTestUtil::compareImages(mesh, nonmesh, &errorMessage),
+ QVERIFY2(QQuickVisualTestUtils::compareImages(mesh, nonmesh, &errorMessage),
qPrintable(errorMessage));
}
#endif
diff --git a/tests/auto/quick/qquickboundaryrule/CMakeLists.txt b/tests/auto/quick/qquickboundaryrule/CMakeLists.txt
index 96395c9956..456e201cad 100644
--- a/tests/auto/quick/qquickboundaryrule/CMakeLists.txt
+++ b/tests/auto/quick/qquickboundaryrule/CMakeLists.txt
@@ -12,15 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickboundaryrule
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickboundaryrule.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -28,6 +20,7 @@ qt_internal_add_test(tst_qquickboundaryrule
Qt::Qml
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickboundaryrule/tst_qquickboundaryrule.cpp b/tests/auto/quick/qquickboundaryrule/tst_qquickboundaryrule.cpp
index 75639dba49..ee9321a236 100644
--- a/tests/auto/quick/qquickboundaryrule/tst_qquickboundaryrule.cpp
+++ b/tests/auto/quick/qquickboundaryrule/tst_qquickboundaryrule.cpp
@@ -31,14 +31,14 @@
#include <QtQml/qqmlcomponent.h>
#include <QtQuick/qquickview.h>
#include <QtQuick/private/qquickdraghandler_p.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
class tst_qquickboundaryrule : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickboundaryrule() {}
+ tst_qquickboundaryrule() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void init() { qApp->processEvents(); } //work around animation timer bug (QTBUG-22865)
diff --git a/tests/auto/quick/qquickcanvasitem/BLACKLIST b/tests/auto/quick/qquickcanvasitem/BLACKLIST
index f88c681630..89654cb5e3 100644
--- a/tests/auto/quick/qquickcanvasitem/BLACKLIST
+++ b/tests/auto/quick/qquickcanvasitem/BLACKLIST
@@ -19,3 +19,8 @@ opensuse-leap
# QTQAINFRA-4127
[canvas::test_extraArgumentsIgnored:text]
ci b2qt 32bit
+
+# QTBUG-100991
+[line::test_cap]
+android
+
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_arc.qml b/tests/auto/quick/qquickcanvasitem/data/tst_arc.qml
index 33fffd4cb1..00d13f31f4 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_arc.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_arc.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_angle_1(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -21,6 +22,7 @@ CanvasTestCase {
}
function test_angle_2(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -36,6 +38,7 @@ CanvasTestCase {
}
function test_angle_3(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -53,6 +56,7 @@ CanvasTestCase {
}
function test_angle_4(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -71,6 +75,7 @@ CanvasTestCase {
}
function test_angle_5(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -90,6 +95,7 @@ CanvasTestCase {
function test_angle_6(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -110,6 +116,7 @@ CanvasTestCase {
function test_empty(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -125,6 +132,7 @@ CanvasTestCase {
}
function test_nonempty(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -141,6 +149,7 @@ CanvasTestCase {
}
function test_nonfinite(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -199,6 +208,7 @@ CanvasTestCase {
}
function test_end(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -216,6 +226,7 @@ CanvasTestCase {
}
function test_negative(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -234,6 +245,7 @@ CanvasTestCase {
function test_scale_1(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -270,6 +282,7 @@ CanvasTestCase {
function test_scale_2(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -296,6 +309,7 @@ CanvasTestCase {
function test_selfintersect_1(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -316,6 +330,7 @@ CanvasTestCase {
function test_selfintersect_2(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -340,6 +355,7 @@ CanvasTestCase {
function test_shape_1(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -361,6 +377,7 @@ CanvasTestCase {
function test_shape_2(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -381,6 +398,7 @@ CanvasTestCase {
}
function test_shape_3(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -401,6 +419,7 @@ CanvasTestCase {
function test_shape_4(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -421,6 +440,7 @@ CanvasTestCase {
function test_shape_5(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -441,6 +461,7 @@ CanvasTestCase {
function test_twopie(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -488,6 +509,7 @@ CanvasTestCase {
function test_zero(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_arcto.qml b/tests/auto/quick/qquickcanvasitem/data/tst_arcto.qml
index ef1b7a7b2a..81412d98c9 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_arcto.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_arcto.qml
@@ -7,6 +7,7 @@ CanvasTestCase {
function test_coincide(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -44,6 +45,7 @@ CanvasTestCase {
}
function test_collinear(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -109,6 +111,7 @@ CanvasTestCase {
}
function test_subpath(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -135,6 +138,7 @@ CanvasTestCase {
function test_negative(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -152,6 +156,7 @@ CanvasTestCase {
function test_nonfinite(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -208,6 +213,7 @@ CanvasTestCase {
}
function test_scale(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -237,6 +243,7 @@ CanvasTestCase {
function test_shape(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -348,6 +355,7 @@ CanvasTestCase {
function test_transform(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -374,6 +382,7 @@ CanvasTestCase {
}
function test_zero(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_composite.qml b/tests/auto/quick/qquickcanvasitem/data/tst_composite.qml
index 8a5a52cf1e..4ee24ad437 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_composite.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_composite.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_clearRect(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -17,6 +18,7 @@ CanvasTestCase {
function test_clip(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
var composites = [ {compsite:"copy"},
{compsite:"destination-atop"},
@@ -47,6 +49,7 @@ CanvasTestCase {
function test_globalAlpha(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
compare(ctx.globalAlpha, 1.0);
@@ -83,6 +86,7 @@ CanvasTestCase {
function test_operation(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.globalCompositeOperation = 'xor';
@@ -137,6 +141,7 @@ CanvasTestCase {
function test_solid(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = Qt.rgba(0, 1, 1, 1.0);
@@ -233,6 +238,7 @@ CanvasTestCase {
}
function test_transparent(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';
@@ -330,6 +336,7 @@ CanvasTestCase {
function test_uncovered(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_fillStyle.qml b/tests/auto/quick/qquickcanvasitem/data/tst_fillStyle.qml
index 58ea6d7f59..9e8c0785c3 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_fillStyle.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_fillStyle.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_default(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
verify(ctx.fillStyle, "#000000");
@@ -14,6 +15,7 @@ CanvasTestCase {
}
function test_get(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#fa0';
@@ -23,6 +25,7 @@ CanvasTestCase {
}
function test_hex(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -37,6 +40,7 @@ CanvasTestCase {
}
function test_invalid(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#fa0';
@@ -60,6 +64,7 @@ CanvasTestCase {
}
function test_saverestore(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
var old = ctx.fillStyle;
ctx.save();
@@ -75,6 +80,7 @@ CanvasTestCase {
}
function test_namedColor(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = "red";
@@ -91,6 +97,7 @@ CanvasTestCase {
}
function test_rgba(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = "rgb(-100, 300, 255)";
@@ -108,6 +115,7 @@ CanvasTestCase {
function test_hsla(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = "hsla(120, 100%, 50%, 0.499)";
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_fillrect.qml b/tests/auto/quick/qquickcanvasitem/data/tst_fillrect.qml
index ce1c27c6bc..213abdd622 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_fillrect.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_fillrect.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_fillRect(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.fillStyle = "red";
ctx.fillRect(0, 0, canvas.width, canvas.height);
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_gradient.qml b/tests/auto/quick/qquickcanvasitem/data/tst_gradient.qml
index 7c87d896fb..70e77c8760 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_gradient.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_gradient.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_basic(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -18,6 +19,7 @@ CanvasTestCase {
function test_interpolate(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -166,6 +168,7 @@ CanvasTestCase {
}
function test_radial(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -788,6 +791,7 @@ CanvasTestCase {
}
function test_linear(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
try { var err = false;
@@ -907,6 +911,7 @@ CanvasTestCase {
}
function test_object(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
var g1 = ctx.createLinearGradient(0, 0, 100, 0);
@@ -978,6 +983,7 @@ CanvasTestCase {
function test_conical(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
var g = ctx.createConicalGradient(10, 10, 50);
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_image.qml b/tests/auto/quick/qquickcanvasitem/data/tst_image.qml
index 1f695d7080..a1eb272cd0 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_image.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_image.qml
@@ -11,12 +11,12 @@ CanvasTestCase {
canvas.loadImage('rgrg-256x256.png');
canvas.loadImage('ggrr-256x256.png');
canvas.loadImage('broken.png');
- while (!canvas.isImageLoaded('green.png'))
- wait(200);
+ tryVerify(function() { return canvas.isImageLoaded('green.png'); })
}
function test_3args(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
ctx.reset();
@@ -35,6 +35,7 @@ CanvasTestCase {
}
function test_5args(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -54,6 +55,7 @@ CanvasTestCase {
}
function test_9args(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -118,6 +120,7 @@ CanvasTestCase {
}
function test_animated(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -125,6 +128,7 @@ CanvasTestCase {
}
function test_clip(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -139,6 +143,7 @@ CanvasTestCase {
}
function test_self(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -170,6 +175,7 @@ CanvasTestCase {
function test_outsidesource(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -207,6 +213,7 @@ CanvasTestCase {
function test_null(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -220,15 +227,18 @@ CanvasTestCase {
function test_url(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
canvas.loadImage(testCase.green);
+ tryVerify(function() { return canvas.isImageLoaded(testCase.green); })
ctx.drawImage(testCase.green, 0, 0);
comparePixel(ctx, 0,0, 0,255,0,255,2);
}
function test_composite(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -241,12 +251,14 @@ CanvasTestCase {
}
function test_path(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
}
function test_transform(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -260,6 +272,7 @@ CanvasTestCase {
function test_imageitem(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -268,6 +281,7 @@ CanvasTestCase {
function test_imageData(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -276,6 +290,7 @@ CanvasTestCase {
function test_wrongtype(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -293,6 +308,7 @@ CanvasTestCase {
function test_nonfinite(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -606,6 +622,7 @@ CanvasTestCase {
function test_negative(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -661,6 +678,7 @@ CanvasTestCase {
function test_canvas(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -684,6 +702,7 @@ CanvasTestCase {
function test_broken(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -694,6 +713,7 @@ CanvasTestCase {
function test_alpha(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
@@ -706,6 +726,7 @@ CanvasTestCase {
}
function test_multiple_painting(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
loadImages(canvas);
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_imagedata.qml b/tests/auto/quick/qquickcanvasitem/data/tst_imagedata.qml
index 76b99a765e..aab7a95589 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_imagedata.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_imagedata.qml
@@ -11,6 +11,7 @@ CanvasTestCase {
skip("ctx.getImageData crashes on offscreen/minimal platforms");
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
var size = 17
ctx.reset();
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_line.qml b/tests/auto/quick/qquickcanvasitem/data/tst_line.qml
index fb4db5ae54..e5d03e5db7 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_line.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_line.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_default(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
compare(ctx.lineWidth, 1);
@@ -16,6 +17,7 @@ CanvasTestCase {
function test_cross(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -43,6 +45,7 @@ CanvasTestCase {
function test_join(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -306,6 +309,7 @@ CanvasTestCase {
}
function test_miter(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -481,6 +485,7 @@ CanvasTestCase {
}
function test_width(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -621,7 +626,11 @@ CanvasTestCase {
}
function test_cap(row) {
+ if (Qt.platform.os === "android")
+ skip("line::test_cap crashes on Android, QTBUG-103257")
+
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -838,6 +847,7 @@ CanvasTestCase {
function test_lineDash(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.strokeStyle = "#fff";
@@ -896,6 +906,7 @@ CanvasTestCase {
function test_lineDashReset(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.strokeStyle = "#ff0000";
@@ -927,6 +938,7 @@ CanvasTestCase {
function test_lineDashOffset(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.strokeStyle = "#fff";
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_path.qml b/tests/auto/quick/qquickcanvasitem/data/tst_path.qml
index 60c782c8fa..ae08b58519 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_path.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_path.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_basic(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -36,6 +37,7 @@ CanvasTestCase {
}
function test_beginPath(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
@@ -48,6 +50,7 @@ CanvasTestCase {
}
function test_closePath(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -86,6 +89,7 @@ CanvasTestCase {
function test_isPointInPath(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.arc(50, 25, 10, 0, Math.PI, false);
@@ -256,6 +260,7 @@ CanvasTestCase {
function test_fill(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -378,6 +383,7 @@ CanvasTestCase {
}
function test_stroke(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -662,6 +668,7 @@ CanvasTestCase {
}
function test_clip(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -784,6 +791,7 @@ CanvasTestCase {
function test_moveTo(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -839,6 +847,7 @@ CanvasTestCase {
}
function test_lineTo(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -904,6 +913,7 @@ CanvasTestCase {
}
function test_bezierCurveTo(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -1072,6 +1082,7 @@ CanvasTestCase {
}
function test_quadraticCurveTo(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -1173,6 +1184,7 @@ CanvasTestCase {
}
function test_rect(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -1371,6 +1383,7 @@ CanvasTestCase {
function test_clearRect(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#0f0';
@@ -1383,6 +1396,7 @@ CanvasTestCase {
}
function test_fillRect(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.beginPath();
@@ -1397,6 +1411,7 @@ CanvasTestCase {
function test_strokeRect(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.beginPath();
@@ -1412,6 +1427,7 @@ CanvasTestCase {
}
function test_transform(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_pattern.qml b/tests/auto/quick/qquickcanvasitem/data/tst_pattern.qml
index 1d7fd2c12f..e0a4d7ad23 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_pattern.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_pattern.qml
@@ -6,36 +6,42 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_basic(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_animated(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_image(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_modified(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_paint(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_repeat(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_pixel.qml b/tests/auto/quick/qquickcanvasitem/data/tst_pixel.qml
index 281264ba92..ef908db92a 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_pixel.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_pixel.qml
@@ -7,6 +7,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_createImageData(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
var imageData = ctx.createImageData(1, 1);
var imageDataValues = imageData.data;
@@ -20,24 +21,28 @@ CanvasTestCase {
}
function test_getImageData(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_object(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_putImageData(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_filters(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_shadow.qml b/tests/auto/quick/qquickcanvasitem/data/tst_shadow.qml
index 2baaa072d0..14318b3f56 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_shadow.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_shadow.qml
@@ -6,12 +6,14 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_basic(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_blur(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
@@ -19,6 +21,7 @@ CanvasTestCase {
function test_clip(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
@@ -26,6 +29,7 @@ CanvasTestCase {
function test_composite(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
@@ -33,6 +37,7 @@ CanvasTestCase {
function test_enable(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
@@ -40,36 +45,42 @@ CanvasTestCase {
function test_gradient(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_image(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_offset(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_pattern(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_stroke(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_tranform(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_state.qml b/tests/auto/quick/qquickcanvasitem/data/tst_state.qml
index 18464def7c..ce02f9d7f7 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_state.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_state.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_bitmap(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -19,6 +20,7 @@ CanvasTestCase {
}
function test_clip(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -35,6 +37,7 @@ CanvasTestCase {
}
function test_fillStyle(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
// Test that restore() undoes any modifications
@@ -56,6 +59,7 @@ CanvasTestCase {
}
function test_font(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -78,6 +82,7 @@ CanvasTestCase {
}
function test_globalAlpha(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -100,6 +105,7 @@ CanvasTestCase {
}
function test_globalCompositeOperation(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -122,6 +128,7 @@ CanvasTestCase {
}
function test_lineCap(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -144,6 +151,7 @@ CanvasTestCase {
}
function test_lineJoin(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -166,6 +174,7 @@ CanvasTestCase {
}
function test_lineWidth(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -188,6 +197,7 @@ CanvasTestCase {
}
function test_miterLimit(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -210,6 +220,7 @@ CanvasTestCase {
}
function test_path(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -225,6 +236,7 @@ CanvasTestCase {
}
function test_shadow(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -295,6 +307,7 @@ CanvasTestCase {
}
function test_stack(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -330,6 +343,7 @@ CanvasTestCase {
}
function test_strokeStyle(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -353,6 +367,7 @@ CanvasTestCase {
function test_text(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -392,6 +407,7 @@ CanvasTestCase {
function test_transform(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_strokeStyle.qml b/tests/auto/quick/qquickcanvasitem/data/tst_strokeStyle.qml
index a3f1ab0a9b..0dc39b8b4c 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_strokeStyle.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_strokeStyle.qml
@@ -8,6 +8,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_default(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
compare(ctx.strokeStyle, "#000000")
@@ -17,6 +18,7 @@ CanvasTestCase {
}
function test_saverestore(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
var old = ctx.strokeStyle;
ctx.save();
@@ -33,6 +35,7 @@ CanvasTestCase {
}
function test_namedColor(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.strokeStyle = "red";
@@ -50,6 +53,7 @@ CanvasTestCase {
}
function test_colorFromObjectToString(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -68,6 +72,7 @@ CanvasTestCase {
}
function test_withInvalidColor(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_svgpath.qml b/tests/auto/quick/qquickcanvasitem/data/tst_svgpath.qml
index 2b39357bed..011fbd497b 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_svgpath.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_svgpath.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_svgpath(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
var svgs = [
// Absolute coordinates, explicit commands.
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_text.qml b/tests/auto/quick/qquickcanvasitem/data/tst_text.qml
index bfc4067040..f7cd66890b 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_text.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_text.qml
@@ -6,36 +6,42 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_baseLine(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_align(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_stroke(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_fill(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_font(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
}
function test_measure(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
canvas.destroy()
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_transform.qml b/tests/auto/quick/qquickcanvasitem/data/tst_transform.qml
index b2f5b51fa5..bbfec6a106 100644
--- a/tests/auto/quick/qquickcanvasitem/data/tst_transform.qml
+++ b/tests/auto/quick/qquickcanvasitem/data/tst_transform.qml
@@ -6,6 +6,7 @@ CanvasTestCase {
function init_data() { return testData("2d"); }
function test_order(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -20,6 +21,7 @@ CanvasTestCase {
}
function test_rotate(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -90,6 +92,7 @@ CanvasTestCase {
}
function test_scale(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
@@ -182,6 +185,7 @@ CanvasTestCase {
}
function test_setTransform(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -325,6 +329,7 @@ CanvasTestCase {
}
function test_transform(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
@@ -460,6 +465,7 @@ CanvasTestCase {
}
function test_translate(row) {
var canvas = createCanvasObject(row);
+ tryVerify(function() { return canvas.available; });
var ctx = canvas.getContext('2d');
ctx.reset();
ctx.fillStyle = '#f00';
diff --git a/tests/auto/quick/qquickdeliveryagent/BLACKLIST b/tests/auto/quick/qquickdeliveryagent/BLACKLIST
new file mode 100644
index 0000000000..8d1da7a79e
--- /dev/null
+++ b/tests/auto/quick/qquickdeliveryagent/BLACKLIST
@@ -0,0 +1,8 @@
+# QTBUG-103080
+[passiveGrabberOrder]
+android
+
+# QTBUG-100991
+[touchCompression]
+android
+
diff --git a/tests/auto/quick/qquickdeliveryagent/CMakeLists.txt b/tests/auto/quick/qquickdeliveryagent/CMakeLists.txt
index 1a5490effa..3426903bb1 100644
--- a/tests/auto/quick/qquickdeliveryagent/CMakeLists.txt
+++ b/tests/auto/quick/qquickdeliveryagent/CMakeLists.txt
@@ -10,21 +10,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickdeliveryagent
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickdeliveryagent.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickdeliveryagent/data/listViewDelegate.qml b/tests/auto/quick/qquickdeliveryagent/data/listViewDelegate.qml
new file mode 100644
index 0000000000..bdb7246450
--- /dev/null
+++ b/tests/auto/quick/qquickdeliveryagent/data/listViewDelegate.qml
@@ -0,0 +1,21 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+
+Item {
+ id: root
+ width: 320
+ height: 240
+
+ ListView {
+ id: listView
+ width: 320
+ height: 240
+ delegate: Rectangle {
+ width: ListView.view.width
+ height: ListView.view.height / ListView.view.count
+ color: "tomato"
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickdeliveryagent/data/pointHandler.qml b/tests/auto/quick/qquickdeliveryagent/data/pointHandler.qml
new file mode 100644
index 0000000000..a8afa8f78a
--- /dev/null
+++ b/tests/auto/quick/qquickdeliveryagent/data/pointHandler.qml
@@ -0,0 +1,17 @@
+import QtQuick
+
+Rectangle {
+ id: root
+ objectName: "root"
+ color: ph.active ? "coral" : "cadetblue"
+ border.color: "black"
+ width: 100; height: 100
+ PointHandler {
+ id: ph
+ objectName: root.objectName + "PointHandler"
+ }
+ Text {
+ anchors.centerIn: parent
+ text: ph.point.position.x.toFixed(1) + ", " + ph.point.position.y.toFixed(1)
+ }
+}
diff --git a/tests/auto/quick/qquickdeliveryagent/tst_qquickdeliveryagent.cpp b/tests/auto/quick/qquickdeliveryagent/tst_qquickdeliveryagent.cpp
index 18a0fb54ae..d0e29b3a65 100644
--- a/tests/auto/quick/qquickdeliveryagent/tst_qquickdeliveryagent.cpp
+++ b/tests/auto/quick/qquickdeliveryagent/tst_qquickdeliveryagent.cpp
@@ -35,12 +35,16 @@
#include <QtQuick/QQuickView>
#include <QtQuick/QQuickWindow>
#include <QtQuick/private/qquickflickable_p.h>
+#include <QtQuick/private/qquicklistview_p.h>
+#include <QtQuick/private/qquickpointhandler_p.h>
#include <QtQuick/private/qquickshadereffectsource_p.h>
#include <QtQuick/private/qquicktaphandler_p.h>
#include <QtQuick/private/qquickwindow_p.h>
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+
+#include <QtGui/private/qeventpoint_p.h>
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
@@ -59,6 +63,26 @@ struct ViewportTransformHelper : public QQuickDeliveryAgent::Transform
}
};
+struct HoverItem : public QQuickItem
+{
+ HoverItem(QQuickItem *parent) : QQuickItem(parent){}
+ void hoverEnterEvent(QHoverEvent *e) override
+ {
+ hoverEnter = true;
+ e->setAccepted(block);
+ }
+
+ void hoverLeaveEvent(QHoverEvent *e) override
+ {
+ hoverLeave = true;
+ e->setAccepted(block);
+ }
+
+ bool hoverEnter = false;
+ bool hoverLeave = false;
+ bool block = false;
+};
+
// A QQuick3DViewport simulator
class SubsceneRootItem : public QQuickShaderEffectSource
{
@@ -124,12 +148,18 @@ class tst_qquickdeliveryagent : public QQmlDataTest
Q_OBJECT
public:
tst_qquickdeliveryagent()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
private slots:
void passiveGrabberOrder();
void tapHandlerDoesntOverrideSubsceneGrabber();
+ void undoDelegationWhenSubsceneFocusCleared();
+ void touchCompression();
+ void hoverPropagation_nested_data();
+ void hoverPropagation_nested();
+ void hoverPropagation_siblings();
private:
QScopedPointer<QPointingDevice> touchDevice = QScopedPointer<QPointingDevice>(QTest::createTouchDevice());
@@ -158,7 +188,7 @@ void tst_qquickdeliveryagent::passiveGrabberOrder()
windowAgent->setObjectName("window");
QVERIFY(subscene.deliveryAgent);
QVERIFY(subscene.deliveryAgent != windowAgent);
- QQuickVisualTestUtil::SignalMultiSpy spy;
+ QQuickVisualTestUtils::SignalMultiSpy spy;
QVERIFY(spy.connectToSignal(rootTap, &QQuickTapHandler::tapped));
QVERIFY(spy.connectToSignal(subsceneTap, &QQuickTapHandler::tapped));
@@ -221,6 +251,151 @@ void tst_qquickdeliveryagent::tapHandlerDoesntOverrideSubsceneGrabber() // QTBUG
QCOMPARE(clickSpy.count(), 0); // doesn't tap
}
+void tst_qquickdeliveryagent::undoDelegationWhenSubsceneFocusCleared() // QTBUG-105192
+{
+ QQuickView window;
+#ifdef DISABLE_HOVER_IN_IRRELEVANT_TESTS
+ QQuickWindowPrivate::get(&window)->deliveryAgentPrivate()->frameSynchronousHoverEnabled = false;
+#endif
+ QVERIFY(QQuickTest::initView(window, testFileUrl("listViewDelegate.qml")));
+ QQuickListView *listView = window.rootObject()->findChild<QQuickListView*>();
+ QVERIFY(listView);
+
+ // put the ListView into a SubsceneRootItem
+ SubsceneRootItem subscene(listView, listView->boundingRect(), window.rootObject());
+
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+
+ // populate a delegate in ListView
+ listView->setModel(1);
+ QQuickItem *delegate = nullptr;
+ QTRY_VERIFY(QQuickVisualTestUtils::findViewDelegateItem(listView, 0, delegate));
+ QCOMPARE(QQuickWindowPrivate::get(&window)->deliveryAgentPrivate()->activeFocusItem, delegate);
+ delete listView;
+ QVERIFY(QQuickWindowPrivate::get(&window)->deliveryAgentPrivate()->activeFocusItem != delegate);
+}
+
+void tst_qquickdeliveryagent::touchCompression()
+{
+ QQuickView window;
+ // avoid interference from X11 window managers, so we can look at eventpoint globalPosition
+ window.setFlag(Qt::FramelessWindowHint);
+#ifdef DISABLE_HOVER_IN_IRRELEVANT_TESTS
+ QQuickWindowPrivate::get(&window)->deliveryAgentPrivate()->frameSynchronousHoverEnabled = false;
+#endif
+ QVERIFY(QQuickTest::showView(window, testFileUrl("pointHandler.qml")));
+ QQuickDeliveryAgent *windowAgent = QQuickWindowPrivate::get(&window)->deliveryAgent;
+ QQuickDeliveryAgentPrivate *agentPriv = static_cast<QQuickDeliveryAgentPrivate *>(QQuickDeliveryAgentPrivate::get(windowAgent));
+ QQuickItem *root = qobject_cast<QQuickItem*>(window.rootObject());
+ QVERIFY(root);
+ QQuickPointHandler *rootHandler = root->findChild<QQuickPointHandler *>();
+ QVERIFY(rootHandler);
+ QTest::QTouchEventSequence touch = QTest::touchEvent(&window, touchDevice.data());
+ QPoint pt1(30, 50);
+ QPoint pt2(70, 50);
+ // Press and drag fast, alternating moving and stationary points
+ touch.press(11, pt1).press(12, pt2).commit();
+ QQuickTouchUtils::flush(&window);
+ QTest::qWait(50); // not critical, but let it hopefully render a frame or two
+ QCOMPARE(agentPriv->compressedTouchCount, 0);
+ for (int m = 1; m < 4; ++m) {
+ pt1 += {0, 1};
+ pt2 -= {0, 1};
+ if (m % 2)
+ touch.move(11, pt1).stationary(12).commit();
+ else
+ touch.stationary(11).move(12, pt2).commit();
+ // don't call QQuickTouchUtils::flush() here: we want to see the compression happen
+ if (agentPriv->compressedTouchCount) {
+ if (m % 2) {
+ QCOMPARE(agentPriv->delayedTouch->point(0).position().toPoint(), pt1);
+ QCOMPARE(agentPriv->delayedTouch->point(0).globalPosition().toPoint(), root->mapToGlobal(pt1).toPoint());
+ } else {
+ QCOMPARE(agentPriv->delayedTouch->point(1).position().toPoint(), pt2);
+ QCOMPARE(agentPriv->delayedTouch->point(1).globalPosition().toPoint(), root->mapToGlobal(pt2).toPoint());
+ }
+ }
+ // we can't guarantee that a CI VM is fast enough, but usually compressedTouchCount == m
+ qCDebug(lcTests) << "compressedTouchCount" << agentPriv->compressedTouchCount << "expected" << m;
+ qCDebug(lcTests) << "PointHandler still sees" << rootHandler->point().position() << "while" << pt1 << "was likely not yet delivered";
+ }
+ QTRY_COMPARE(rootHandler->point().position().toPoint(), pt1);
+ touch.release(11, pt1).release(12, pt2).commit();
+ // should be delivered, bypassing compression; when PointHandler gets the release, it will reset its point
+ QTRY_COMPARE(rootHandler->active(), false);
+ QCOMPARE(rootHandler->point().position(), QPointF());
+ QCOMPARE(agentPriv->compressedTouchCount, 0);
+}
+
+void tst_qquickdeliveryagent::hoverPropagation_nested_data()
+{
+ QTest::addColumn<bool>("block");
+ QTest::newRow("block=false") << false;
+ QTest::newRow("block=true") << true;
+}
+
+void tst_qquickdeliveryagent::hoverPropagation_nested()
+{
+ QFETCH(bool, block);
+
+ QQuickWindow window;
+ window.resize(200, 200);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ HoverItem child(window.contentItem());
+ child.setAcceptHoverEvents(true);
+ child.setWidth(100);
+ child.setHeight(100);
+
+ HoverItem grandChild(&child);
+ grandChild.setAcceptHoverEvents(true);
+ grandChild.block = block;
+ grandChild.setWidth(100);
+ grandChild.setHeight(100);
+
+ // Start by moving the mouse to the window
+ QTest::mouseMove(&window, QPoint(150, 150));
+ QCOMPARE(child.hoverEnter, false);
+ QCOMPARE(grandChild.hoverEnter, false);
+
+ // Move the mouse inside the items. If block is true, only
+ // the grandchild should be hovered. Otherwise both.
+ QTest::mouseMove(&window, QPoint(50, 50));
+ QCOMPARE(child.hoverEnter, !block);
+ QCOMPARE(grandChild.hoverEnter, true);
+}
+
+void tst_qquickdeliveryagent::hoverPropagation_siblings()
+{
+ QQuickWindow window;
+ window.resize(200, 200);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ HoverItem sibling1(window.contentItem());
+ sibling1.setAcceptHoverEvents(true);
+ sibling1.setWidth(100);
+ sibling1.setHeight(100);
+
+ HoverItem sibling2(window.contentItem());
+ sibling2.setAcceptHoverEvents(true);
+ sibling2.setWidth(100);
+ sibling2.setHeight(100);
+
+ // Start by moving the mouse to the window
+ QTest::mouseMove(&window, QPoint(150, 150));
+ QCOMPARE(sibling1.hoverEnter, false);
+ QCOMPARE(sibling2.hoverEnter, false);
+
+ // Move the mouse inside the items. Only the
+ // sibling on the top should receive hover
+ QTest::mouseMove(&window, QPoint(50, 50));
+ QCOMPARE(sibling1.hoverEnter, false);
+ QCOMPARE(sibling2.hoverEnter, true);
+}
+
QTEST_MAIN(tst_qquickdeliveryagent)
#include "tst_qquickdeliveryagent.moc"
diff --git a/tests/auto/quick/qquickdesignersupport/CMakeLists.txt b/tests/auto/quick/qquickdesignersupport/CMakeLists.txt
index 2cdb7328ce..8c8a46ac55 100644
--- a/tests/auto/quick/qquickdesignersupport/CMakeLists.txt
+++ b/tests/auto/quick/qquickdesignersupport/CMakeLists.txt
@@ -12,22 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickdesignersupport
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickdesignersupport.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
- Qt::TestPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp b/tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp
index ab01ae3a50..7e9bcff00a 100644
--- a/tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp
+++ b/tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp
@@ -40,17 +40,16 @@
#include <private/qquickstategroup_p.h>
#include <private/qquickpropertychanges_p.h>
#include <private/qquickrectangle_p.h>
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
-#include <QtTest/private/qemulationdetector_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
-using namespace QQuickVisualTestUtil;
+using namespace QQuickVisualTestUtils;
class tst_qquickdesignersupport : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickdesignersupport() {}
+ tst_qquickdesignersupport() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void customData();
@@ -130,9 +129,6 @@ static void removeObjectFromList(const QQmlProperty &property, QObject *objectTo
void tst_qquickdesignersupport::customData()
{
-#ifdef Q_CC_MINGW
- QSKIP("QQuickDesignerSupportProperties::registerCustomData segfaults on mingw. QTBUG-90869");
-#endif
QScopedPointer<QQuickView> view(new QQuickView);
view->engine()->setOutputWarningsToStandardError(false);
view->setSource(testFileUrl("test.qml"));
@@ -189,9 +185,6 @@ void tst_qquickdesignersupport::customData()
void tst_qquickdesignersupport::customDataBindings()
{
-#ifdef Q_CC_MINGW
- QSKIP("QQuickDesignerSupportProperties::registerCustomData segfaults on mingw. QTBUG-90869");
-#endif
QScopedPointer<QQuickView> view(new QQuickView);
view->engine()->setOutputWarningsToStandardError(false);
view->setSource(testFileUrl("test.qml"));
@@ -671,12 +664,6 @@ void tst_qquickdesignersupport::testComponentOnCompleteSignal()
void tst_qquickdesignersupport::testSimpleBindings()
{
- if (QTestPrivate::isRunningArmOnX86())
- QSKIP("Crashes in QEMU. (QTBUG-90869)");
-#ifdef Q_CC_MINGW
- QSKIP("QQuickDesignerSupportProperties::registerCustomData segfaults on mingw. QTBUG-90869");
-#endif
-
QScopedPointer<QQuickView> view(new QQuickView);
view->engine()->setOutputWarningsToStandardError(false);
view->setSource(testFileUrl("bindingTest.qml"));
@@ -718,12 +705,6 @@ void tst_qquickdesignersupport::testSimpleBindings()
void tst_qquickdesignersupport::testDotProperties()
{
- if (QTestPrivate::isRunningArmOnX86())
- QSKIP("Crashes in QEMU. (QTBUG-90869)");
-#ifdef Q_CC_MINGW
- QSKIP("QQuickDesignerSupportProperties::registerCustomData segfaults on mingw. QTBUG-90869");
-#endif
-
QScopedPointer<QQuickView> view(new QQuickView);
view->engine()->setOutputWarningsToStandardError(false);
view->setSource(testFileUrl("bindingTest.qml"));
@@ -753,11 +734,6 @@ void tst_qquickdesignersupport::testDotProperties()
void tst_qquickdesignersupport::testItemReparenting()
{
- if (QTestPrivate::isRunningArmOnX86())
- QSKIP("Crashes in QEMU. (QTBUG-90869)");
-#ifdef Q_CC_MINGW
- QSKIP("QQuickDesignerSupportProperties::registerCustomData segfaults on mingw. QTBUG-90869");
-#endif
QScopedPointer<QQuickView> view(new QQuickView);
view->engine()->setOutputWarningsToStandardError(false);
@@ -789,12 +765,6 @@ void tst_qquickdesignersupport::testItemReparenting()
void tst_qquickdesignersupport::testPropertyNames()
{
- if (QTestPrivate::isRunningArmOnX86())
- QSKIP("Crashes in QEMU. (QTBUG-90869)");
-#ifdef Q_CC_MINGW
- QSKIP("QQuickDesignerSupportProperties::registerCustomData segfaults on mingw. QTBUG-90869");
-#endif
-
QScopedPointer<QQuickView> view(new QQuickView);
view->engine()->setOutputWarningsToStandardError(false);
view->setSource(testFileUrl("propertyNameTest.qml"));
diff --git a/tests/auto/quick/qquickdrag/BLACKLIST b/tests/auto/quick/qquickdrag/BLACKLIST
new file mode 100644
index 0000000000..71cc97fc7a
--- /dev/null
+++ b/tests/auto/quick/qquickdrag/BLACKLIST
@@ -0,0 +1,25 @@
+# QTBUG-103082
+[active]
+android
+[setActive]
+android
+[drop]
+android
+[move]
+android
+[parentChange]
+android
+[hotSpot]
+android
+[supportedActions]
+android
+[proposedAction]
+android
+[keys]
+android
+[source]
+android
+[recursion]
+android
+[noCrashWithImageProvider]
+android
diff --git a/tests/auto/quick/qquickdroparea/BLACKLIST b/tests/auto/quick/qquickdroparea/BLACKLIST
new file mode 100644
index 0000000000..61650f3308
--- /dev/null
+++ b/tests/auto/quick/qquickdroparea/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-103083
+[signalOrder]
+android
diff --git a/tests/auto/quick/qquickdroparea/CMakeLists.txt b/tests/auto/quick/qquickdroparea/CMakeLists.txt
index d66bf23714..2427994b4d 100644
--- a/tests/auto/quick/qquickdroparea/CMakeLists.txt
+++ b/tests/auto/quick/qquickdroparea/CMakeLists.txt
@@ -12,15 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickdroparea
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickdroparea.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -28,6 +20,7 @@ qt_internal_add_test(tst_qquickdroparea
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickdroparea/data/ignoreRetriggerEvent.qml b/tests/auto/quick/qquickdroparea/data/ignoreRetriggerEvent.qml
new file mode 100644
index 0000000000..af25a04ee7
--- /dev/null
+++ b/tests/auto/quick/qquickdroparea/data/ignoreRetriggerEvent.qml
@@ -0,0 +1,15 @@
+import QtQuick 2.0
+
+DropArea {
+ property int enterEvents: 0
+ property int exitEvents: 0
+ width: 100; height: 100
+ objectName: "dropArea"
+ onEntered: function (drag) { ++enterEvents; drag.accepted = false }
+ onExited: {++exitEvents}
+ Item {
+ objectName: "dragItem"
+ x: 50; y: 50
+ width: 10; height: 10
+ }
+}
diff --git a/tests/auto/quick/qquickdroparea/tst_qquickdroparea.cpp b/tests/auto/quick/qquickdroparea/tst_qquickdroparea.cpp
index 593f3a0efb..9c9d059a52 100644
--- a/tests/auto/quick/qquickdroparea/tst_qquickdroparea.cpp
+++ b/tests/auto/quick/qquickdroparea/tst_qquickdroparea.cpp
@@ -37,8 +37,8 @@
#include <qpa/qplatformdrag.h>
#include <qpa/qwindowsysteminterface.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
template <typename T> static T evaluate(QObject *scope, const QString &expression)
{
@@ -60,9 +60,16 @@ template <> void evaluate<void>(QObject *scope, const QString &expression)
class tst_QQuickDropArea: public QQmlDataTest
{
Q_OBJECT
+
+public:
+ tst_QQuickDropArea();
+
private slots:
void containsDrag_internal();
void containsDrag_external();
+
+ void ignoreRetriggerEvent();
+
void keys_internal();
void keys_external();
void source_internal();
@@ -76,11 +83,17 @@ private slots:
void dropStuff();
void nestedDropAreas_data();
void nestedDropAreas();
+ void signalOrder();
private:
QQmlEngine engine;
};
+tst_QQuickDropArea::tst_QQuickDropArea()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQuickDropArea::containsDrag_internal()
{
QQuickWindow window;
@@ -819,6 +832,32 @@ void tst_QQuickDropArea::competingDrags()
QCOMPARE(evaluate<QString>(dropArea1, "statuslol"), QStringLiteral("parent"));
}
+void tst_QQuickDropArea::ignoreRetriggerEvent()
+{
+ QQuickView window;
+ QByteArray errorMessage;
+ QVERIFY2(QQuickTest::initView(window, testFileUrl("ignoreRetriggerEvent.qml"), true, &errorMessage), errorMessage.constData());
+
+ QQuickItem *dropArea = window.rootObject();
+ QVERIFY(dropArea);
+ QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
+ QVERIFY(dragItem);
+
+ evaluate<void>(dragItem, "Drag.active = true");
+ // Drag the item within the drop area
+ dragItem->setPosition(QPointF(25, 25));
+ QCoreApplication::processEvents();
+ dragItem->setPosition(QPointF(50, 50));
+ QCoreApplication::processEvents();
+ dragItem->setPosition(QPointF(75, 75));
+ QCoreApplication::processEvents();
+
+ QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
+ QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
+ QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
+}
+
+
void tst_QQuickDropArea::simultaneousDrags()
{
QQuickWindow window;
@@ -949,8 +988,8 @@ void tst_QQuickDropArea::simultaneousDrags()
Qt::MouseButtons(), Qt::KeyboardModifiers());
//Same as in the first case, dropArea2 already contains a drag, dropArea1 will get the event
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
- QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
- QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
+ QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 2);
+ QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
@@ -958,8 +997,8 @@ void tst_QQuickDropArea::simultaneousDrags()
QWindowSystemInterface::handleDrag(&alternateWindow, &data, QPoint(50, 50), Qt::CopyAction,
Qt::MouseButtons(), Qt::KeyboardModifiers());
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
- QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
- QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
+ QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 2);
+ QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 2);
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
@@ -967,16 +1006,16 @@ void tst_QQuickDropArea::simultaneousDrags()
QWindowSystemInterface::handleDrag(&window, &data, QPoint(50, 50), Qt::CopyAction,
Qt::MouseButtons(), Qt::KeyboardModifiers());
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
- QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 2);
- QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
+ QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 4);
+ QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 3);
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
evaluate<void>(dragItem1, "Drag.active = false");
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
- QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 2);
- QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
+ QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 4);
+ QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 3);
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
@@ -1281,6 +1320,48 @@ void tst_QQuickDropArea::nestedDropAreas()
QCOMPARE(window.rootObject()->property("innerExitEvents"), 2);
}
+void tst_QQuickDropArea::signalOrder()
+{
+ QQuickWindow window;
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick\n"
+ "Item {\n"
+ " id: root\n"
+ " property var eventOrder: []\n"
+ " DropArea {\n"
+ " width: 100; height: 100\n"
+ " x: 0; y: 0\n"
+ " onEntered: eventOrder.push('entered1');\n"
+ " onExited: eventOrder.push('exited1');\n"
+ " }\n"
+ " DropArea {\n"
+ " width: 100; height: 100\n"
+ " x: 0; y: 100\n"
+ " onEntered: eventOrder.push('entered2');\n"
+ " onExited: eventOrder.push('exited2');\n"
+ " }\n"
+ "}",
+ QUrl());
+
+ QScopedPointer<QObject> object(component.create());
+ QQuickItem *item = qobject_cast<QQuickItem *>(object.data());
+ QVERIFY(item);
+ item->setParentItem(window.contentItem());
+
+ QMimeData data;
+
+ QWindowSystemInterface::handleDrag(&window, &data, QPoint(50, 50), Qt::CopyAction,
+ Qt::MouseButtons(), Qt::KeyboardModifiers());
+ QWindowSystemInterface::handleDrag(&window, &data, QPoint(50, 150), Qt::CopyAction,
+ Qt::MouseButtons(), Qt::KeyboardModifiers());
+ QWindowSystemInterface::handleDrag(&window, &data, QPoint(50, 250), Qt::CopyAction,
+ Qt::MouseButtons(), Qt::KeyboardModifiers());
+
+ const QList<QVariant> eventOrder = item->property("eventOrder").toList();
+ QCOMPARE(eventOrder,
+ QList<QVariant>({ u"entered1"_qs, u"exited1"_qs, u"entered2"_qs, u"exited2"_qs }));
+}
+
QTEST_MAIN(tst_QQuickDropArea)
#include "tst_qquickdroparea.moc"
diff --git a/tests/auto/quick/qquickdynamicpropertyanimation/CMakeLists.txt b/tests/auto/quick/qquickdynamicpropertyanimation/CMakeLists.txt
index 78395e4661..75ab9332d0 100644
--- a/tests/auto/quick/qquickdynamicpropertyanimation/CMakeLists.txt
+++ b/tests/auto/quick/qquickdynamicpropertyanimation/CMakeLists.txt
@@ -12,14 +12,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickdynamicpropertyanimation
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickdynamicpropertyanimation.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickdynamicpropertyanimation/tst_qquickdynamicpropertyanimation.cpp b/tests/auto/quick/qquickdynamicpropertyanimation/tst_qquickdynamicpropertyanimation.cpp
index 5251c5aff3..1b1f664841 100644
--- a/tests/auto/quick/qquickdynamicpropertyanimation/tst_qquickdynamicpropertyanimation.cpp
+++ b/tests/auto/quick/qquickdynamicpropertyanimation/tst_qquickdynamicpropertyanimation.cpp
@@ -36,13 +36,13 @@
#include <QtCore/QRect>
#include <QtGui/QColor>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickdynamicpropertyanimation : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickdynamicpropertyanimation() {}
+ tst_qquickdynamicpropertyanimation() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private:
template<class T>
diff --git a/tests/auto/quick/qquickflickable/CMakeLists.txt b/tests/auto/quick/qquickflickable/CMakeLists.txt
index 7c8e802daf..737ddb2d5d 100644
--- a/tests/auto/quick/qquickflickable/CMakeLists.txt
+++ b/tests/auto/quick/qquickflickable/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickflickable
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickflickable.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickflickable/data/contentPosWhileDragging.qml b/tests/auto/quick/qquickflickable/data/contentPosWhileDragging.qml
new file mode 100644
index 0000000000..b42fbc1adb
--- /dev/null
+++ b/tests/auto/quick/qquickflickable/data/contentPosWhileDragging.qml
@@ -0,0 +1,24 @@
+import QtQuick
+import QtQuick.Shapes
+import QtQuick.Controls
+
+Item {
+ id: root
+ width: 500
+ height: 500
+ Flickable {
+ anchors.centerIn: parent
+ width: 100
+ height: 100
+ clip: true
+ contentWidth: content.width
+ contentHeight: content.height
+ Rectangle {
+ id: content
+ width: 320
+ height: width
+ color: "#41cd52"
+ radius: width/2
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickflickable/data/dragon.qml b/tests/auto/quick/qquickflickable/data/dragon.qml
new file mode 100644
index 0000000000..b82477453b
--- /dev/null
+++ b/tests/auto/quick/qquickflickable/data/dragon.qml
@@ -0,0 +1,15 @@
+import QtQuick 2.12
+
+Flickable {
+ id: flick
+ width: 320
+ height: 320
+ contentWidth: 500
+ contentHeight: 500
+ Text {
+ anchors.centerIn: parent
+ font.pixelSize: 50
+ text: "🐉"
+ color: flick.dragging ? "orange" : "grey"
+ }
+}
diff --git a/tests/auto/quick/qquickflickable/data/fractionalExtent.qml b/tests/auto/quick/qquickflickable/data/fractionalExtent.qml
new file mode 100644
index 0000000000..2675e8c85a
--- /dev/null
+++ b/tests/auto/quick/qquickflickable/data/fractionalExtent.qml
@@ -0,0 +1,14 @@
+import QtQuick
+
+Flickable {
+ width: 300
+ height: 300
+ contentWidth: content.width; contentHeight: content.height
+ Rectangle {
+ id: content
+ width: 350
+ height: 350
+ color: "darkkhaki"
+ }
+ boundsBehavior: Flickable.StopAtBounds
+}
diff --git a/tests/auto/quick/qquickflickable/data/nestedmouseareapce.qml b/tests/auto/quick/qquickflickable/data/nestedmouseareapce.qml
new file mode 100644
index 0000000000..b36df04d45
--- /dev/null
+++ b/tests/auto/quick/qquickflickable/data/nestedmouseareapce.qml
@@ -0,0 +1,26 @@
+import QtQuick 2.0
+
+Flickable {
+ id: outer
+ objectName: "flickable"
+ width: 400
+ height: 400
+ contentX: 50
+ contentY: 50
+ contentWidth: 500
+ contentHeight: 500
+
+ Rectangle {
+ objectName: "nested"
+ x: 100
+ y: 100
+ width: 300
+ height: 300
+
+ color: "yellow"
+ MouseArea {
+ anchors.fill: parent
+ propagateComposedEvents: true
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickflickable/data/rotatedFlickable.qml b/tests/auto/quick/qquickflickable/data/rotatedFlickable.qml
new file mode 100644
index 0000000000..04816c178b
--- /dev/null
+++ b/tests/auto/quick/qquickflickable/data/rotatedFlickable.qml
@@ -0,0 +1,32 @@
+import QtQuick 2.0
+
+Item {
+ width: 300
+ height: 300
+
+ Flickable {
+ id: flickable
+ anchors.fill: parent
+ contentHeight: column.height
+ flickDeceleration: 5000 // speed up the test run
+
+ Column {
+ id: column
+ width: parent.width
+
+ Repeater {
+ model: 255
+
+ delegate: Rectangle {
+ width: column.width
+ height: 50
+ color: "gray"
+ Text {
+ anchors.centerIn: parent
+ text: index
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
index 52cf7b5255..51020672b7 100644
--- a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
+++ b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
@@ -26,28 +26,31 @@
**
****************************************************************************/
#include <qtest.h>
+#include <QtTest/QtTest>
#include <QtTest/QSignalSpy>
+#include <QtQuick/qquickview.h>
+#include <QtQuickTest/QtQuickTest>
#include <QtGui/QStyleHints>
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlcomponent.h>
-#include <QtQuick/qquickview.h>
#include <private/qquickflickable_p.h>
#include <private/qquickflickable_p_p.h>
#include <private/qquickmousearea_p.h>
#include <private/qquicktransition_p.h>
#include <private/qqmlvaluetype_p.h>
+#include <private/qquicktaphandler_p.h>
#include <math.h>
-#include "../../shared/util.h"
-#include "../shared/geometrytestutil.h"
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/geometrytestutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
#include <qpa/qwindowsysteminterface.h>
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
// an abstract Slider which only handles touch events
class TouchDragArea : public QQuickItem
@@ -142,11 +145,38 @@ private:
bool m_active;
};
+class FlickableWithExtents : public QQuickFlickable
+{
+public:
+ qreal extent = 10;
+
+ qreal minXExtent() const override
+ {
+ return QQuickFlickable::minXExtent() + extent;
+ }
+
+ qreal maxXExtent() const override
+ {
+ return QQuickFlickable::maxXExtent() + extent;
+ }
+
+ qreal minYExtent() const override
+ {
+ return QQuickFlickable::minYExtent() + extent;
+ }
+
+ qreal maxYExtent() const override
+ {
+ return QQuickFlickable::maxYExtent() + extent;
+ }
+};
+
class tst_qquickflickable : public QQmlDataTest
{
Q_OBJECT
public:
tst_qquickflickable()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{}
private slots:
@@ -177,6 +207,7 @@ private slots:
void movingAndDragging_data();
void flickOnRelease();
void pressWhileFlicking();
+ void dragWhileFlicking();
void disabled();
void flickVelocity();
void margins();
@@ -189,6 +220,7 @@ private slots:
void stopAtBounds();
void stopAtBounds_data();
void nestedMouseAreaUsingTouch();
+ void nestedMouseAreaPropagateComposedEvents();
void nestedSliderUsingTouch();
void nestedSliderUsingTouch_data();
void pressDelayWithLoader();
@@ -205,6 +237,15 @@ private slots:
void synchronousDrag();
void visibleAreaBinding();
void parallelTouch();
+ void ignoreNonLeftMouseButtons();
+ void ignoreNonLeftMouseButtons_data();
+ void receiveTapOutsideContentItem();
+ void flickWhenRotated_data();
+ void flickWhenRotated();
+ void scrollingWithFractionalExtentSize_data();
+ void scrollingWithFractionalExtentSize();
+ void setContentPositionWhileDragging_data();
+ void setContentPositionWhileDragging();
private:
void flickWithTouch(QQuickWindow *window, const QPoint &from, const QPoint &to);
@@ -365,8 +406,8 @@ void tst_qquickflickable::rebound()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("rebound.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -505,8 +546,8 @@ void tst_qquickflickable::pressDelay()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("pressDelay.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -586,8 +627,8 @@ void tst_qquickflickable::nestedPressDelay()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("nestedPressDelay.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -666,8 +707,8 @@ void tst_qquickflickable::filterReplayedPress()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("nestedPressDelay.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -709,8 +750,8 @@ void tst_qquickflickable::nestedClickThenFlick()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("nestedClickThenFlick.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -1062,8 +1103,8 @@ void tst_qquickflickable::movingAndFlicking()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("flickable03.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -1225,8 +1266,8 @@ void tst_qquickflickable::movingAndDragging()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("flickable03.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -1428,8 +1469,8 @@ void tst_qquickflickable::pressWhileFlicking()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("flickable03.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -1443,6 +1484,8 @@ void tst_qquickflickable::pressWhileFlicking()
QSignalSpy hFlickSpy(flickable, SIGNAL(flickingHorizontallyChanged()));
QSignalSpy vFlickSpy(flickable, SIGNAL(flickingVerticallyChanged()));
QSignalSpy flickSpy(flickable, SIGNAL(flickingChanged()));
+ QSignalSpy flickStartSpy(flickable, &QQuickFlickable::flickStarted);
+ QSignalSpy flickEndSpy(flickable, &QQuickFlickable::flickEnded);
// flick then press while it is still moving
// flicking == false, moving == true;
@@ -1460,6 +1503,8 @@ void tst_qquickflickable::pressWhileFlicking()
QCOMPARE(vFlickSpy.count(), 1);
QCOMPARE(hFlickSpy.count(), 0);
QCOMPARE(flickSpy.count(), 1);
+ QCOMPARE(flickStartSpy.count(), 1);
+ QCOMPARE(flickEndSpy.count(), 0);
QTest::mousePress(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(20, 50));
QTRY_VERIFY(!flickable->isFlicking());
@@ -1472,6 +1517,76 @@ void tst_qquickflickable::pressWhileFlicking()
QVERIFY(!flickable->isFlickingVertically());
QTRY_VERIFY(!flickable->isMoving());
QVERIFY(!flickable->isMovingVertically());
+ QCOMPARE(flickStartSpy.size(), 1);
+ QCOMPARE(flickEndSpy.size(), 1);
+ // Stop on a full pixel after user interaction
+ QCOMPARE(flickable->contentX(), (qreal)qRound(flickable->contentX()));
+}
+
+void tst_qquickflickable::dragWhileFlicking()
+{
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("flickable03.qml")));
+
+ QQuickFlickable *flickable = qobject_cast<QQuickFlickable*>(window.rootObject());
+ QVERIFY(flickable != nullptr);
+
+ QSignalSpy vMoveSpy(flickable, &QQuickFlickable::movingVerticallyChanged);
+ QSignalSpy hMoveSpy(flickable, &QQuickFlickable::movingHorizontallyChanged);
+ QSignalSpy moveSpy(flickable, &QQuickFlickable::movingChanged);
+ QSignalSpy hFlickSpy(flickable, &QQuickFlickable::flickingHorizontallyChanged);
+ QSignalSpy vFlickSpy(flickable, &QQuickFlickable::flickingVerticallyChanged);
+ QSignalSpy flickSpy(flickable, &QQuickFlickable::flickingChanged);
+ QSignalSpy flickStartSpy(flickable, &QQuickFlickable::flickStarted);
+ QSignalSpy flickEndSpy(flickable, &QQuickFlickable::flickEnded);
+
+ // flick first, let it keep moving
+ flick(&window, QPoint(20,190), QPoint(20, 50), 200);
+ QVERIFY(flickable->verticalVelocity() > 0.0);
+ QTRY_VERIFY(flickable->isFlicking());
+ QVERIFY(flickable->isFlickingVertically());
+ QCOMPARE(flickable->isFlickingHorizontally(), false);
+ QVERIFY(flickable->isMoving());
+ QVERIFY(flickable->isMovingVertically());
+ QCOMPARE(flickable->isMovingHorizontally(), false);
+ QCOMPARE(vMoveSpy.size(), 1);
+ QCOMPARE(hMoveSpy.size(), 0);
+ QCOMPARE(moveSpy.size(), 1);
+ QCOMPARE(vFlickSpy.size(), 1);
+ QCOMPARE(hFlickSpy.size(), 0);
+ QCOMPARE(flickSpy.size(), 1);
+ QCOMPARE(flickStartSpy.size(), 1);
+ QCOMPARE(flickEndSpy.size(), 0);
+
+ // then drag slowly while it's still flicking and moving
+ const int dragStepDelay = 100;
+ QTest::mousePress(&window, Qt::LeftButton, Qt::NoModifier, QPoint(20, 70));
+ QTRY_COMPARE(flickable->isFlicking(), false);
+ QCOMPARE(flickable->isFlickingVertically(), false);
+ QVERIFY(flickable->isMoving());
+ QVERIFY(flickable->isMovingVertically());
+
+ for (int y = 70; y > 50; y -= 5) {
+ QTest::mouseMove(&window, QPoint(20, y), dragStepDelay);
+ QVERIFY(flickable->isMoving());
+ QVERIFY(flickable->isMovingVertically());
+ // Flickable's timeline is real-time, so spoofing timestamps isn't enough
+ QTest::qWait(dragStepDelay);
+ }
+
+ QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, QPoint(20, 50), dragStepDelay);
+
+ QCOMPARE(flickable->isFlicking(), false);
+ QCOMPARE(flickable->isFlickingVertically(), false);
+ QTRY_COMPARE(flickable->isMoving(), false);
+ QCOMPARE(flickable->isMovingVertically(), false);
+ QCOMPARE(flickStartSpy.size(), 1);
+ QCOMPARE(flickEndSpy.size(), 1);
+ QCOMPARE(vMoveSpy.size(), 2);
+ QCOMPARE(hMoveSpy.size(), 0);
+ QCOMPARE(moveSpy.size(), 2);
+ QCOMPARE(vFlickSpy.size(), 2);
+ QCOMPARE(hFlickSpy.size(), 0);
// Stop on a full pixel after user interaction
QCOMPARE(flickable->contentX(), (qreal)qRound(flickable->contentX()));
}
@@ -1509,8 +1624,8 @@ void tst_qquickflickable::flickVelocity()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("flickable03.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -1553,8 +1668,8 @@ void tst_qquickflickable::margins()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("margins.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->setTitle(QTest::currentTestFunction());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -1617,8 +1732,8 @@ void tst_qquickflickable::cancelOnHide()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("hide.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject());
@@ -1636,8 +1751,8 @@ void tst_qquickflickable::cancelOnMouseGrab()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("cancel.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -1676,8 +1791,8 @@ void tst_qquickflickable::clickAndDragWhenTransformed()
QScopedPointer<QQuickView> view(new QQuickView);
view->setSource(testFileUrl("transformedFlickable.qml"));
QTRY_COMPARE(view->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(view.data());
- QQuickViewTestUtil::moveMouseAway(view.data());
+ QQuickVisualTestUtils::centerOnScreen(view.data());
+ QQuickVisualTestUtils::moveMouseAway(view.data());
view->show();
QVERIFY(QTest::qWaitForWindowActive(view.data()));
QVERIFY(view->rootObject() != nullptr);
@@ -1730,8 +1845,8 @@ void tst_qquickflickable::flickTwiceUsingTouches()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("longList.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(window->rootObject() != nullptr);
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -1811,8 +1926,8 @@ void tst_qquickflickable::nestedStopAtBounds()
QQuickView view;
view.setSource(testFileUrl("nestedStopAtBounds.qml"));
QTRY_COMPARE(view.status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(&view);
- QQuickViewTestUtil::moveMouseAway(&view);
+ QQuickVisualTestUtils::centerOnScreen(&view);
+ QQuickVisualTestUtils::moveMouseAway(&view);
view.show();
view.requestActivate();
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -1965,8 +2080,8 @@ void tst_qquickflickable::stopAtBounds()
QQuickView view;
view.setSource(testFileUrl("stopAtBounds.qml"));
QTRY_COMPARE(view.status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(&view);
- QQuickViewTestUtil::moveMouseAway(&view);
+ QQuickVisualTestUtils::centerOnScreen(&view);
+ QQuickVisualTestUtils::moveMouseAway(&view);
view.show();
view.requestActivate();
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -2070,8 +2185,8 @@ void tst_qquickflickable::nestedMouseAreaUsingTouch()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("nestedmousearea.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(window->rootObject() != nullptr);
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -2090,6 +2205,27 @@ void tst_qquickflickable::nestedMouseAreaUsingTouch()
QVERIFY(nested->y() < 100.0);
}
+void tst_qquickflickable::nestedMouseAreaPropagateComposedEvents()
+{
+ QScopedPointer<QQuickView> window(new QQuickView);
+ window->setSource(testFileUrl("nestedmouseareapce.qml"));
+ QTRY_COMPARE(window->status(), QQuickView::Ready);
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
+ window->show();
+ QVERIFY(window->rootObject() != nullptr);
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ QQuickFlickable *flickable = qobject_cast<QQuickFlickable*>(window->rootObject());
+ QVERIFY(flickable != nullptr);
+
+ QCOMPARE(flickable->contentY(), 50.0f);
+ flickWithTouch(window.data(), QPoint(100, 300), QPoint(100, 200));
+
+ // flickable should have moved
+ QVERIFY(!qFuzzyCompare(flickable->contentY(), 50.0));
+}
+
void tst_qquickflickable::nestedSliderUsingTouch_data()
{
QTest::addColumn<bool>("keepMouseGrab");
@@ -2116,8 +2252,8 @@ void tst_qquickflickable::nestedSliderUsingTouch()
QScopedPointer<QQuickView> windowPtr(window);
windowPtr->setSource(testFileUrl("nestedSlider.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window);
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickVisualTestUtils::centerOnScreen(window);
+ QQuickVisualTestUtils::moveMouseAway(window);
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
QVERIFY(window->rootObject() != nullptr);
@@ -2155,8 +2291,8 @@ void tst_qquickflickable::pressDelayWithLoader()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("pressDelayWithLoader.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
QVERIFY(window->rootObject() != nullptr);
@@ -2172,8 +2308,8 @@ void tst_qquickflickable::movementFromProgrammaticFlick()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("movementSignals.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -2225,8 +2361,8 @@ void tst_qquickflickable::ratios_smallContent()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("ratios_smallContent.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->setTitle(QTest::currentTestFunction());
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window.data()));
@@ -2251,8 +2387,8 @@ void tst_qquickflickable::contentXYNotTruncatedToInt()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("contentXY.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -2271,8 +2407,8 @@ void tst_qquickflickable::keepGrab()
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("keepGrab.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window.data());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickViewTestUtils::centerOnScreen(window.data());
+ QQuickViewTestUtils::moveMouseAway(window.data());
window->show();
QVERIFY(QTest::qWaitForWindowActive(window.data()));
@@ -2318,6 +2454,7 @@ void tst_qquickflickable::overshoot()
{
QFETCH(QQuickFlickable::BoundsBehavior, boundsBehavior);
QFETCH(int, boundsMovement);
+ QFETCH(bool, pixelAligned);
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("overshoot.qml"));
@@ -2327,6 +2464,7 @@ void tst_qquickflickable::overshoot()
QQuickFlickable *flickable = qobject_cast<QQuickFlickable*>(window->rootObject());
QVERIFY(flickable);
+ flickable->setPixelAligned(pixelAligned);
QCOMPARE(flickable->width(), 200.0);
QCOMPARE(flickable->height(), 200.0);
@@ -2373,7 +2511,7 @@ void tst_qquickflickable::overshoot()
QMetaObject::invokeMethod(flickable, "reset");
// flick past the beginning
- flick(window.data(), QPoint(10, 10), QPoint(50, 50), 100);
+ flick(window.data(), QPoint(10, 10), QPoint(50, 50), 50);
QTRY_VERIFY(!flickable->property("flicking").toBool());
if ((boundsMovement == QQuickFlickable::FollowBoundsBehavior) && (boundsBehavior & QQuickFlickable::OvershootBounds)) {
@@ -2442,7 +2580,7 @@ void tst_qquickflickable::overshoot()
QMetaObject::invokeMethod(flickable, "reset");
// flick past the end
- flick(window.data(), QPoint(50, 50), QPoint(10, 10), 100);
+ flick(window.data(), QPoint(50, 50), QPoint(10, 10), 50);
QTRY_VERIFY(!flickable->property("flicking").toBool());
if ((boundsMovement == QQuickFlickable::FollowBoundsBehavior) && (boundsBehavior & QQuickFlickable::OvershootBounds)) {
@@ -2475,29 +2613,53 @@ void tst_qquickflickable::overshoot_data()
{
QTest::addColumn<QQuickFlickable::BoundsBehavior>("boundsBehavior");
QTest::addColumn<int>("boundsMovement");
+ QTest::addColumn<bool>("pixelAligned");
QTest::newRow("StopAtBounds,FollowBoundsBehavior")
<< QQuickFlickable::BoundsBehavior(QQuickFlickable::StopAtBounds)
- << int(QQuickFlickable::FollowBoundsBehavior);
+ << int(QQuickFlickable::FollowBoundsBehavior) << false;
QTest::newRow("DragOverBounds,FollowBoundsBehavior")
<< QQuickFlickable::BoundsBehavior(QQuickFlickable::DragOverBounds)
- << int(QQuickFlickable::FollowBoundsBehavior);
+ << int(QQuickFlickable::FollowBoundsBehavior) << false;
QTest::newRow("OvershootBounds,FollowBoundsBehavior")
<< QQuickFlickable::BoundsBehavior(QQuickFlickable::OvershootBounds)
- << int(QQuickFlickable::FollowBoundsBehavior);
+ << int(QQuickFlickable::FollowBoundsBehavior) << false;
QTest::newRow("DragAndOvershootBounds,FollowBoundsBehavior")
<< QQuickFlickable::BoundsBehavior(QQuickFlickable::DragAndOvershootBounds)
- << int(QQuickFlickable::FollowBoundsBehavior);
+ << int(QQuickFlickable::FollowBoundsBehavior) << false;
QTest::newRow("DragOverBounds,StopAtBounds")
<< QQuickFlickable::BoundsBehavior(QQuickFlickable::DragOverBounds)
- << int(QQuickFlickable::StopAtBounds);
+ << int(QQuickFlickable::StopAtBounds) << false;
QTest::newRow("OvershootBounds,StopAtBounds")
<< QQuickFlickable::BoundsBehavior(QQuickFlickable::OvershootBounds)
- << int(QQuickFlickable::StopAtBounds);
+ << int(QQuickFlickable::StopAtBounds) << false;
QTest::newRow("DragAndOvershootBounds,StopAtBounds")
<< QQuickFlickable::BoundsBehavior(QQuickFlickable::DragAndOvershootBounds)
- << int(QQuickFlickable::StopAtBounds);
+ << int(QQuickFlickable::StopAtBounds) << false;
+
+ QTest::newRow("StopAtBounds,FollowBoundsBehavior,pixelAligned")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::StopAtBounds)
+ << int(QQuickFlickable::FollowBoundsBehavior) << true;
+ QTest::newRow("DragOverBounds,FollowBoundsBehavior,pixelAligned")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragOverBounds)
+ << int(QQuickFlickable::FollowBoundsBehavior) << true;
+ QTest::newRow("OvershootBounds,FollowBoundsBehavior,pixelAligned")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::OvershootBounds)
+ << int(QQuickFlickable::FollowBoundsBehavior) << true;
+ QTest::newRow("DragAndOvershootBounds,FollowBoundsBehavior,pixelAligned")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragAndOvershootBounds)
+ << int(QQuickFlickable::FollowBoundsBehavior) << true;
+
+ QTest::newRow("DragOverBounds,StopAtBounds,pixelAligned")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragOverBounds)
+ << int(QQuickFlickable::StopAtBounds) << true;
+ QTest::newRow("OvershootBounds,StopAtBounds,pixelAligned")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::OvershootBounds)
+ << int(QQuickFlickable::StopAtBounds) << true;
+ QTest::newRow("DragAndOvershootBounds,StopAtBounds,pixelAligned")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragAndOvershootBounds)
+ << int(QQuickFlickable::StopAtBounds) << true;
}
void tst_qquickflickable::overshoot_reentrant()
@@ -2566,8 +2728,8 @@ void tst_qquickflickable::synchronousDrag()
QQuickView *window = scopedWindow.data();
window->setSource(testFileUrl("longList.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
- QQuickViewTestUtil::centerOnScreen(window);
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickVisualTestUtils::centerOnScreen(window);
+ QQuickVisualTestUtils::moveMouseAway(window);
window->show();
QVERIFY(window->rootObject() != nullptr);
QVERIFY(QTest::qWaitForWindowActive(window));
@@ -2665,6 +2827,323 @@ void tst_qquickflickable::parallelTouch() // QTBUG-30840
QTRY_VERIFY(!flickable2->isMoving());
}
+void tst_qquickflickable::ignoreNonLeftMouseButtons() // QTBUG-96909
+{
+ QFETCH(Qt::MouseButton, otherButton);
+ const int threshold = qApp->styleHints()->startDragDistance();
+ QQuickView view;
+ view.setSource(testFileUrl("dragon.qml"));
+ view.show();
+ view.requestActivate();
+ QQuickFlickable *flickable = static_cast<QQuickFlickable *>(view.rootObject());
+ QSignalSpy dragSpy(flickable, &QQuickFlickable::draggingChanged);
+
+ // Drag with left button
+ QPoint p1(100, 100);
+ moveAndPress(&view, p1);
+ for (int i = 0; i < 8; ++i) {
+ p1 -= QPoint(threshold, threshold);
+ QTest::mouseMove(&view, p1, 50);
+ }
+ QVERIFY(flickable->isDragging());
+ QCOMPARE(dragSpy.count(), 1);
+
+ // Press other button too, then release left button: dragging changes to false
+ QTest::mousePress(&view, otherButton);
+ QTest::mouseRelease(&view, Qt::LeftButton);
+ QTRY_COMPARE(flickable->isDragging(), false);
+ QCOMPARE(dragSpy.count(), 2);
+
+ // Drag further with the other button held: Flickable ignores it
+ for (int i = 0; i < 8; ++i) {
+ p1 -= QPoint(threshold, threshold);
+ QTest::mouseMove(&view, p1, 50);
+ }
+ QCOMPARE(flickable->isDragging(), false);
+ QCOMPARE(dragSpy.count(), 2);
+
+ // Release other button: nothing happens
+ QTest::mouseRelease(&view, otherButton);
+ QCOMPARE(dragSpy.count(), 2);
+}
+
+void tst_qquickflickable::ignoreNonLeftMouseButtons_data()
+{
+ QTest::addColumn<Qt::MouseButton>("otherButton");
+
+ QTest::newRow("right") << Qt::RightButton;
+ QTest::newRow("middle") << Qt::MiddleButton;
+}
+
+void tst_qquickflickable::receiveTapOutsideContentItem()
+{
+ // Check that if we add a TapHandler handler to a flickable, we
+ // can tap on the whole flickable area inside it, which includes
+ // the extents in addition to the content item.
+ QQuickView window;
+ window.resize(200, 200);
+ FlickableWithExtents flickable;
+ flickable.setParentItem(window.contentItem());
+ flickable.setWidth(200);
+ flickable.setHeight(200);
+ flickable.setContentWidth(100);
+ flickable.setContentHeight(100);
+
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ QQuickTapHandler tapHandler(&flickable);
+ QSignalSpy clickedSpy(&tapHandler, SIGNAL(tapped(QEventPoint, Qt::MouseButton)));
+
+ // Tap outside the content item in the top-left corner
+ QTest::mouseClick(&window, Qt::LeftButton, {}, QPoint(5, 5));
+ QCOMPARE(clickedSpy.count(), 1);
+
+ // Tap outside the content item in the bottom-right corner
+ const QPoint bottomRight(flickable.contentItem()->width() + 5, flickable.contentItem()->height() + 5);
+ QTest::mouseClick(&window, Qt::LeftButton, {}, bottomRight);
+ QCOMPARE(clickedSpy.count(), 2);
+}
+
+void tst_qquickflickable::flickWhenRotated_data()
+{
+ QTest::addColumn<qreal>("rootRotation");
+ QTest::addColumn<qreal>("flickableRotation");
+ QTest::addColumn<qreal>("scale");
+
+ static constexpr qreal rotations[] = { 0, 30, 90, 180, 270 };
+ static constexpr qreal scales[] = { 0.3, 1, 1.5 };
+
+ for (const auto pr : rotations) {
+ for (const auto fr : rotations) {
+ if (pr <= 90) {
+ for (const auto s : scales)
+ QTest::addRow("parent: %g, flickable: %g, scale: %g", pr, fr, s) << pr << fr << s;
+ } else {
+ // don't bother trying every scale with every set of rotations, to save time
+ QTest::addRow("parent: %g, flickable: %g, scale: 1", pr, fr) << pr << fr << qreal(1);
+ }
+ }
+ }
+}
+
+void tst_qquickflickable::flickWhenRotated() // QTBUG-99639
+{
+ QFETCH(qreal, rootRotation);
+ QFETCH(qreal, flickableRotation);
+ QFETCH(qreal, scale);
+
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("rotatedFlickable.qml")));
+ QQuickItem *rootItem = window.rootObject();
+ QVERIFY(rootItem);
+ QQuickFlickable *flickable = rootItem->findChild<QQuickFlickable*>();
+ QVERIFY(flickable);
+
+ rootItem->setRotation(rootRotation);
+ flickable->setRotation(flickableRotation);
+ rootItem->setScale(scale);
+ QVERIFY(flickable->isAtYBeginning());
+
+ // Flick in Y direction in Flickable's coordinate system and check how much it moved
+ const QPointF startPoint = flickable->mapToGlobal(QPoint(20, 180));
+ const QPointF endPoint = flickable->mapToGlobal(QPoint(20, 40));
+ flick(&window, window.mapFromGlobal(startPoint).toPoint(), window.mapFromGlobal(endPoint).toPoint(), 100);
+ QTRY_VERIFY(flickable->isMoving());
+ QTRY_VERIFY(!flickable->isMoving());
+ qCDebug(lcTests) << "flicking from" << startPoint << "to" << endPoint << ": ended at contentY" << flickable->contentY();
+ // usually flickable->contentY() is at 275 or very close
+ QVERIFY(!flickable->isAtYBeginning());
+}
+
+
+void tst_qquickflickable::scrollingWithFractionalExtentSize_data()
+{
+ QTest::addColumn<QByteArray>("property");
+ QTest::addColumn<bool>("isYAxis");
+ QTest::addColumn<bool>("atBeginning");
+ QTest::addColumn<QQuickFlickable::BoundsBehaviorFlag>("boundsBehaviour");
+
+ QTest::newRow("minyextent") << QByteArray("topMargin") << true << true << QQuickFlickable::StopAtBounds;
+ QTest::newRow("maxyextent") << QByteArray("bottomMargin") << true << false << QQuickFlickable::StopAtBounds;
+ QTest::newRow("minxextent") << QByteArray("leftMargin") << false << true << QQuickFlickable::StopAtBounds;
+ QTest::newRow("maxxextent") << QByteArray("rightMargin") << false << false << QQuickFlickable::StopAtBounds;
+
+ QTest::newRow("minyextent") << QByteArray("topMargin") << true << true << QQuickFlickable::DragAndOvershootBounds;
+ QTest::newRow("maxyextent") << QByteArray("bottomMargin") << true << false << QQuickFlickable::DragAndOvershootBounds;
+ QTest::newRow("minxextent") << QByteArray("leftMargin") << false << true << QQuickFlickable::DragAndOvershootBounds;
+ QTest::newRow("maxxextent") << QByteArray("rightMargin") << false << false << QQuickFlickable::DragAndOvershootBounds;
+}
+
+void tst_qquickflickable::scrollingWithFractionalExtentSize() // QTBUG-101268
+{
+ QFETCH(QByteArray, property);
+ QFETCH(bool, isYAxis);
+ QFETCH(bool, atBeginning);
+ QFETCH(QQuickFlickable::BoundsBehaviorFlag, boundsBehaviour);
+
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("fractionalExtent.qml")));
+ QQuickItem *rootItem = window.rootObject();
+ QVERIFY(rootItem);
+ QQuickFlickable *flickable = qobject_cast<QQuickFlickable *>(rootItem);
+ QVERIFY(flickable);
+ flickable->setBoundsBehavior(boundsBehaviour);
+
+ qreal value = 100.5;
+ flickable->setProperty(property.constData(), 100.5);
+ if (isYAxis)
+ flickable->setContentY(atBeginning ? -value : value + qAbs(flickable->height() - flickable->contentHeight()));
+ else
+ flickable->setContentX(atBeginning ? -value : value + qAbs(flickable->width() - flickable->contentWidth()));
+
+ if (isYAxis) {
+ QVERIFY(atBeginning ? flickable->isAtYBeginning() : flickable->isAtYEnd());
+ QVERIFY(!flickable->isMovingVertically());
+ } else {
+ QVERIFY(atBeginning ? flickable->isAtXBeginning() : flickable->isAtXEnd());
+ QVERIFY(!flickable->isMovingHorizontally());
+ }
+
+ QPointF pos(flickable->x() + flickable->width() / 2, flickable->y() + flickable->height() / 2);
+ QPoint angleDelta(isYAxis ? 0 : (atBeginning ? -50 : 50), isYAxis ? (atBeginning ? -50 : 50) : 0);
+
+ QWheelEvent wheelEvent1(pos, window.mapToGlobal(pos), QPoint(), angleDelta,
+ Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase, false);
+
+ QGuiApplication::sendEvent(&window, &wheelEvent1);
+ qApp->processEvents();
+ if (isYAxis) {
+ QVERIFY(flickable->isMovingVertically());
+ QTRY_VERIFY(!flickable->isMovingVertically());
+ QVERIFY(!(atBeginning ? flickable->isAtYBeginning() : flickable->isAtYEnd()));
+ } else {
+ QVERIFY(flickable->isMovingHorizontally());
+ QTRY_VERIFY(!flickable->isMovingHorizontally());
+ QVERIFY(!(atBeginning ? flickable->isAtXBeginning() : flickable->isAtXEnd()));
+ }
+
+ QWheelEvent wheelEvent2(pos, window.mapToGlobal(pos), QPoint(), -angleDelta,
+ Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase, false);
+ wheelEvent2.setTimestamp(wheelEvent1.timestamp() + 10);
+
+ QGuiApplication::sendEvent(&window, &wheelEvent2);
+ qApp->processEvents();
+
+ if (isYAxis) {
+ QVERIFY(flickable->isMovingVertically());
+ QTRY_VERIFY(!flickable->isMovingVertically());
+ QVERIFY(atBeginning ? flickable->isAtYBeginning() : flickable->isAtYEnd());
+ } else {
+ QVERIFY(flickable->isMovingHorizontally());
+ QTRY_VERIFY(!flickable->isMovingHorizontally());
+ QVERIFY(atBeginning ? flickable->isAtXBeginning() : flickable->isAtXEnd());
+ }
+}
+
+void tst_qquickflickable::setContentPositionWhileDragging_data()
+{
+ QTest::addColumn<bool>("isHorizontal");
+ QTest::addColumn<int>("newPos");
+ QTest::addColumn<int>("newExtent");
+ QTest::newRow("horizontal, setContentX") << true << 0 << -1;
+ QTest::newRow("vertical, setContentY") << false << 0 << -1;
+ QTest::newRow("horizontal, setContentWidth") << true << -1 << 200;
+ QTest::newRow("vertical, setContentHeight") << false << -1 << 200;
+}
+
+void tst_qquickflickable::setContentPositionWhileDragging() // QTBUG-104966
+{
+ QFETCH(bool, isHorizontal);
+ QFETCH(int, newPos);
+ QFETCH(int, newExtent);
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("contentPosWhileDragging.qml")));
+ QQuickViewTestUtils::centerOnScreen(&window);
+ QVERIFY(window.isVisible());
+ QQuickItem *rootItem = window.rootObject();
+ QVERIFY(rootItem);
+ QQuickFlickable *flickable = rootItem->findChild<QQuickFlickable *>();
+ QVERIFY(flickable);
+
+ const auto contentPos = [flickable]() -> QPoint {
+ return QPoint(flickable->contentX(), flickable->contentY());
+ };
+ const qreal threshold =
+ qApp->styleHints()->startDragDistance() * flickable->parentItem()->scale();
+ const QPoint thresholdPnt(qRound(threshold), qRound(threshold));
+ const auto flickableCenterPos = flickable->mapToScene({flickable->width() / 2, flickable->height() / 2}).toPoint();
+
+ // Drag the mouse until we have surpassed the mouse drag threshold and a drag is initiated
+ // by checking for flickable->isDragging()
+ QPoint pos = flickableCenterPos;
+ QQuickViewTestUtils::moveAndPress(&window, pos);
+ int j = 1;
+ QVERIFY(!flickable->isDragging());
+ while (!flickable->isDragging()) {
+ pos = flickableCenterPos - QPoint(j, j);
+ QTest::mouseMove(&window, pos);
+ j++;
+ }
+
+ // Now we have entered the drag state
+ QVERIFY(flickable->isDragging());
+ QCOMPARE(flickable->contentX(), 0);
+ QCOMPARE(flickable->contentY(), 0);
+ QVERIFY(flickable->width() > 0);
+ QVERIFY(flickable->height() > 0);
+
+
+ const int moveLength = 50;
+ const QPoint unitDelta(isHorizontal ? 1 : 0, isHorizontal ? 0 : 1);
+ const QPoint moveDelta = unitDelta * moveLength;
+
+ pos -= 3*moveDelta;
+ QTest::mouseMove(&window, pos);
+ // Should be positive because we drag in the opposite direction
+ QCOMPARE(contentPos(), 3 * moveDelta);
+ QPoint expectedContentPos;
+
+ // Set the content item position back to zero *while dragging* (!!)
+ if (newPos >= 0) {
+ if (isHorizontal) {
+ flickable->setContentX(newPos);
+ } else {
+ flickable->setContentY(newPos);
+ }
+ // Continue dragging
+ pos -= moveDelta;
+ expectedContentPos = moveDelta;
+ } else if (newExtent >= 0) {
+ // ...or reduce the content size be be less than current (contentX, contentY) position
+ // This forces the content item to move.
+ // contentY: 150
+ // 320 - 150 = 170 pixels down to bottom
+ // Now reduce contentHeight to 200
+ // since we are at the bottom, and the flickable is 100 pixels tall, contentY must land
+ // at newExtent - 100.
+
+ if (isHorizontal) {
+ flickable->setContentWidth(newExtent);
+ } else {
+ flickable->setContentHeight(newExtent);
+ }
+ // Assumption is that the contentItem is aligned to the bottom of the flickable
+ // We therefore cannot scroll/flick it further down. Drag it up towards the top instead
+ // (by moving mouse down).
+ pos += moveDelta;
+ expectedContentPos = unitDelta * (newExtent - (isHorizontal ? flickable->width() : flickable->height()));
+ }
+
+ QTest::mouseMove(&window, pos);
+
+ // Make sure that the contentItem was only dragged the delta in mouse movement since the last
+ // setContentX/Y() call.
+ QCOMPARE(contentPos(), expectedContentPos);
+ QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, pos);
+ QVERIFY(!flickable->isDragging());
+}
+
QTEST_MAIN(tst_qquickflickable)
#include "tst_qquickflickable.moc"
diff --git a/tests/auto/quick/qquickflipable/CMakeLists.txt b/tests/auto/quick/qquickflipable/CMakeLists.txt
index 95231d7ad9..ac1d79339b 100644
--- a/tests/auto/quick/qquickflipable/CMakeLists.txt
+++ b/tests/auto/quick/qquickflipable/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickflipable
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickflipable.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickflipable/data/flip-y-axis-flipable.qml b/tests/auto/quick/qquickflipable/data/flip-y-axis-flipable.qml
new file mode 100644
index 0000000000..1b6a3f5018
--- /dev/null
+++ b/tests/auto/quick/qquickflipable/data/flip-y-axis-flipable.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2023 UnionTech Software Technology Co., Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+
+Flipable {
+ id: flipable
+
+ property real angle: 0
+ width: 3840 // wider than 1024 * 2: part of it goes behind the camera while flipping
+ height: 2160
+
+ front: Rectangle {
+ width: parent.width
+ height: parent.height
+ color: "red"
+ anchors.centerIn: parent
+ }
+ back: Rectangle {
+ color: "yellow"
+ anchors.centerIn: parent
+ width: parent.width
+ height: parent.height
+ }
+ transform: Rotation {
+ id: rotation
+ origin.x: flipable.width / 2
+ origin.y: flipable.height / 2
+ axis.x: 0; axis.y: 1; axis.z: 0
+ angle: flipable.angle
+ }
+}
diff --git a/tests/auto/quick/qquickflipable/tst_qquickflipable.cpp b/tests/auto/quick/qquickflipable/tst_qquickflipable.cpp
index b4082b3d34..55747a7cdd 100644
--- a/tests/auto/quick/qquickflipable/tst_qquickflipable.cpp
+++ b/tests/auto/quick/qquickflipable/tst_qquickflipable.cpp
@@ -34,12 +34,13 @@
#include <QFontMetrics>
#include <QtQuick/private/qquickrectangle_p.h>
#include <math.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickflipable : public QQmlDataTest
{
Q_OBJECT
public:
+ tst_qquickflipable();
private slots:
void create();
@@ -51,10 +52,18 @@ private slots:
void QTBUG_9161_crash();
void QTBUG_8474_qgv_abort();
+ void flipRotationAngle_data();
+ void flipRotationAngle();
+
private:
QQmlEngine engine;
};
+tst_qquickflipable::tst_qquickflipable()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qquickflipable::create()
{
QQmlEngine engine;
@@ -131,6 +140,31 @@ void tst_qquickflipable::QTBUG_8474_qgv_abort()
delete window;
}
+void tst_qquickflipable::flipRotationAngle_data()
+{
+ QTest::addColumn<int>("angle");
+ QTest::addColumn<QQuickFlipable::Side>("side");
+
+ QTest::newRow("89") << 89 << QQuickFlipable::Front;
+ QTest::newRow("91") << 91 << QQuickFlipable::Back;
+ QTest::newRow("-89") << -89 << QQuickFlipable::Front;
+ QTest::newRow("-91") << -91 << QQuickFlipable::Back;
+}
+
+void tst_qquickflipable::flipRotationAngle() // QTBUG-75954
+{
+ QFETCH(int, angle);
+ QFETCH(QQuickFlipable::Side, side);
+
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("flip-y-axis-flipable.qml"));
+ QQuickFlipable *obj = qobject_cast<QQuickFlipable*>(c.create());
+ QVERIFY(obj != nullptr);
+ obj->setProperty("angle", angle);
+ QCOMPARE(obj->side(), side);
+ delete obj;
+}
+
QTEST_MAIN(tst_qquickflipable)
#include "tst_qquickflipable.moc"
diff --git a/tests/auto/quick/qquickfocusscope/BLACKLIST b/tests/auto/quick/qquickfocusscope/BLACKLIST
new file mode 100644
index 0000000000..7a1e82e98d
--- /dev/null
+++ b/tests/auto/quick/qquickfocusscope/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-103086
+[canvasFocus]
+android
diff --git a/tests/auto/quick/qquickfocusscope/CMakeLists.txt b/tests/auto/quick/qquickfocusscope/CMakeLists.txt
index dac0f78281..539fcf8a8e 100644
--- a/tests/auto/quick/qquickfocusscope/CMakeLists.txt
+++ b/tests/auto/quick/qquickfocusscope/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickfocusscope
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickfocusscope.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp b/tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp
index e59bb7266c..c38f31a318 100644
--- a/tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp
+++ b/tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp
@@ -34,16 +34,16 @@
#include <private/qquicktextedit_p.h>
#include <QtQuick/private/qquicktext_p.h>
#include <QtQuick/private/qquickfocusscope_p.h>
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
-using namespace QQuickVisualTestUtil;
+using namespace QQuickVisualTestUtils;
class tst_qquickfocusscope : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickfocusscope() {}
+ tst_qquickfocusscope() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void basic();
diff --git a/tests/auto/quick/qquickfontloader/CMakeLists.txt b/tests/auto/quick/qquickfontloader/CMakeLists.txt
index bfaa048bca..dc4a6b068d 100644
--- a/tests/auto/quick/qquickfontloader/CMakeLists.txt
+++ b/tests/auto/quick/qquickfontloader/CMakeLists.txt
@@ -12,11 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickfontloader
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qquickfontloader.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -24,6 +20,7 @@ qt_internal_add_test(tst_qquickfontloader
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickfontloader/tst_qquickfontloader.cpp b/tests/auto/quick/qquickfontloader/tst_qquickfontloader.cpp
index 94d603654d..8bfeb7314a 100644
--- a/tests/auto/quick/qquickfontloader/tst_qquickfontloader.cpp
+++ b/tests/auto/quick/qquickfontloader/tst_qquickfontloader.cpp
@@ -31,8 +31,8 @@
#include <QtQml/qqmlcomponent.h>
#include <QtQml/qqmlcontext.h>
#include <QtQuick/private/qquickfontloader_p.h>
-#include "../../shared/util.h"
-#include "../../shared/testhttpserver.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
#include <QtQuick/QQuickView>
#include <QtQuick/QQuickItem>
@@ -59,6 +59,7 @@ private:
};
tst_qquickfontloader::tst_qquickfontloader()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -199,9 +200,7 @@ void tst_qquickfontloader::changeFontSourceViaState()
{
QQuickView window(testFileUrl("qtbug-20268.qml"));
window.show();
- window.requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(&window));
- QCOMPARE(&window, qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
QQuickFontLoader *fontObject = qobject_cast<QQuickFontLoader*>(qvariant_cast<QObject *>(window.rootObject()->property("fontloader")));
QVERIFY(fontObject != nullptr);
diff --git a/tests/auto/quick/qquickfontloader_static/CMakeLists.txt b/tests/auto/quick/qquickfontloader_static/CMakeLists.txt
index efdf13c95d..927888ba7c 100644
--- a/tests/auto/quick/qquickfontloader_static/CMakeLists.txt
+++ b/tests/auto/quick/qquickfontloader_static/CMakeLists.txt
@@ -12,12 +12,9 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickfontloader_static
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickfontloader_static.cpp
DEFINES
QT_DISABLE_DEPRECATED_BEFORE=0
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -25,6 +22,7 @@ qt_internal_add_test(tst_qquickfontloader_static
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickfontloader_static/tst_qquickfontloader_static.cpp b/tests/auto/quick/qquickfontloader_static/tst_qquickfontloader_static.cpp
index 7e848ef2fc..34be2a8ca9 100644
--- a/tests/auto/quick/qquickfontloader_static/tst_qquickfontloader_static.cpp
+++ b/tests/auto/quick/qquickfontloader_static/tst_qquickfontloader_static.cpp
@@ -29,7 +29,7 @@
#include <QtGui/QGuiApplication>
#include <QtQuick/QQuickView>
#include <QtQml/QQmlComponent>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <qtest.h>
QByteArray qmltemplate("import QtQuick 2.0\n"
@@ -46,11 +46,11 @@ QByteArray qmltemplate("import QtQuick 2.0\n"
" }\n"
"}\n");
-int main(int argc, char **argv)
+int actualTest(int argc, char **argv)
{
for (int i = 0; i < 3; i++) {
QGuiApplication app(argc, argv);
- QQmlDataTest dataTest;
+ QQmlDataTest dataTest(QT_QMLTEST_DATADIR);
dataTest.initTestCase();
QQuickView window;
QQmlComponent component (window.engine());
@@ -64,3 +64,25 @@ int main(int argc, char **argv)
}
return 0;
}
+
+// we need the QTestLib infrastructure to create a log file
+struct FontLoaderStaticTester : public QObject
+{
+ Q_OBJECT
+
+public:
+ int result = -1;
+private slots:
+ void verify() { QCOMPARE(result, 0); }
+};
+
+int main(int argc, char **argv)
+{
+ int result = actualTest(argc, argv);
+ QCoreApplication app(argc, argv);
+ FontLoaderStaticTester tester;
+ tester.result = result;
+ QTest::qExec(&tester, argc, argv);
+}
+
+#include "tst_qquickfontloader_static.moc"
diff --git a/tests/auto/quick/qquickframebufferobject/BLACKLIST b/tests/auto/quick/qquickframebufferobject/BLACKLIST
index 93dd7e9d1c..1e814c5ebe 100644
--- a/tests/auto/quick/qquickframebufferobject/BLACKLIST
+++ b/tests/auto/quick/qquickframebufferobject/BLACKLIST
@@ -1,4 +1,3 @@
-# QTBUG-65614
-b2qt
+# QTBUG-102721
[testThatStuffWorks]
-b2qt
+android
diff --git a/tests/auto/quick/qquickframebufferobject/CMakeLists.txt b/tests/auto/quick/qquickframebufferobject/CMakeLists.txt
index 9f242842e6..7d00055533 100644
--- a/tests/auto/quick/qquickframebufferobject/CMakeLists.txt
+++ b/tests/auto/quick/qquickframebufferobject/CMakeLists.txt
@@ -12,13 +12,11 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickframebufferobject
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickframebufferobject.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp b/tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp
index 5a77215624..2d19f29972 100644
--- a/tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp
+++ b/tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp
@@ -28,6 +28,7 @@
#include <qtest.h>
+#include <QGuiApplication>
#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickview.h>
#include <qopenglcontext.h>
@@ -36,7 +37,7 @@
#include <QtQuick/QQuickFramebufferObject>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#ifndef GL_MAX_SAMPLES
#define GL_MAX_SAMPLES 0x8D57
@@ -143,6 +144,8 @@ class tst_QQuickFramebufferObject: public QQmlDataTest
{
Q_OBJECT
public:
+ tst_QQuickFramebufferObject();
+
private slots:
void initTestCase() override;
void testThatStuffWorks_data();
@@ -151,6 +154,11 @@ private slots:
void testInvalidate();
};
+tst_QQuickFramebufferObject::tst_QQuickFramebufferObject()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQuickFramebufferObject::initTestCase()
{
QQmlDataTest::initTestCase();
@@ -202,6 +210,10 @@ void tst_QQuickFramebufferObject::testThatStuffWorks()
view.requestActivate();
QVERIFY(QTest::qWaitForWindowExposed(&view));
+ if (QGuiApplication::platformName() == "offscreen" &&
+ view.rendererInterface()->graphicsApi() == QSGRendererInterface::Software)
+ QSKIP("offscreen software rendering doesn't work with FBOs");
+
QImage result = view.grabWindow();
QCOMPARE(frameInfo.renderCount, 1);
@@ -242,6 +254,10 @@ void tst_QQuickFramebufferObject::testInvalidate()
view.requestActivate();
QVERIFY(QTest::qWaitForWindowExposed(&view));
+ if (QGuiApplication::platformName() == "offscreen" &&
+ view.rendererInterface()->graphicsApi() == QSGRendererInterface::Software)
+ QSKIP("offscreen software rendering doesn't work with FBOs");
+
QCOMPARE(frameInfo.fboSize, QSize(200, 200));
frameInfo.createFBOCount = 0;
diff --git a/tests/auto/quick/qquickgraphicsinfo/CMakeLists.txt b/tests/auto/quick/qquickgraphicsinfo/CMakeLists.txt
index 5a45d8aabd..2e18d1fef7 100644
--- a/tests/auto/quick/qquickgraphicsinfo/CMakeLists.txt
+++ b/tests/auto/quick/qquickgraphicsinfo/CMakeLists.txt
@@ -12,13 +12,11 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickgraphicsinfo
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickgraphicsinfo.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickgraphicsinfo/tst_qquickgraphicsinfo.cpp b/tests/auto/quick/qquickgraphicsinfo/tst_qquickgraphicsinfo.cpp
index 09c423890b..b6bf9cc432 100644
--- a/tests/auto/quick/qquickgraphicsinfo/tst_qquickgraphicsinfo.cpp
+++ b/tests/auto/quick/qquickgraphicsinfo/tst_qquickgraphicsinfo.cpp
@@ -33,20 +33,28 @@
#include <QtQuick/qquickview.h>
#include <QtQuick/qsgrendererinterface.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_QQuickGraphicsInfo : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_QQuickGraphicsInfo();
+
private slots:
void testProperties();
};
+tst_QQuickGraphicsInfo::tst_QQuickGraphicsInfo()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQuickGraphicsInfo::testProperties()
{
QQuickView view;
- view.setSource(QUrl("data/basic.qml"));
+ view.setSource(testFileUrl("basic.qml"));
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
diff --git a/tests/auto/quick/qquickgridview/BLACKLIST b/tests/auto/quick/qquickgridview/BLACKLIST
index 741eb2c7dc..a684b1e8bb 100644
--- a/tests/auto/quick/qquickgridview/BLACKLIST
+++ b/tests/auto/quick/qquickgridview/BLACKLIST
@@ -1,5 +1,4 @@
[snapOneRow]
-macos # QTBUG-86729
msvc-2019
windows-10 gcc developer-build
[snapToRow]
diff --git a/tests/auto/quick/qquickgridview/CMakeLists.txt b/tests/auto/quick/qquickgridview/CMakeLists.txt
index 07dd48c0a8..17bee5d693 100644
--- a/tests/auto/quick/qquickgridview/CMakeLists.txt
+++ b/tests/auto/quick/qquickgridview/CMakeLists.txt
@@ -12,15 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickgridview
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickgridview.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -29,6 +21,7 @@ qt_internal_add_test(tst_qquickgridview
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickgridview/data/qtbug91461.qml b/tests/auto/quick/qquickgridview/data/qtbug91461.qml
new file mode 100644
index 0000000000..50ab04e828
--- /dev/null
+++ b/tests/auto/quick/qquickgridview/data/qtbug91461.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick
+
+Item {
+ width: 640
+ height: 800
+
+ property real cellSize: 100
+
+ GridView {
+ id: grid
+ anchors.fill: parent
+ model: 1000
+ cellWidth: cellSize
+ cellHeight: cellSize
+ cacheBuffer: 0
+ currentIndex: 0
+
+ delegate: Rectangle {
+ implicitWidth: grid.cellWidth - 10
+ implicitHeight: grid.cellHeight - 10
+ color: GridView.isCurrentItem ? "green" : "lightgreen"
+ radius: 5
+ border.width: GridView.isCurrentItem ? 3 : 1
+ border.color: "black"
+
+ Text {
+ anchors.centerIn: parent
+ text: model.index
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
index c625f99c00..7e319fb28a 100644
--- a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
+++ b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
@@ -41,9 +41,9 @@
#include <QtQuick/private/qquickgridview_p.h>
#include <QtQuick/private/qquicktext_p.h>
#include <QtQmlModels/private/qqmllistmodel_p.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
#include <QtGui/qguiapplication.h>
#include "qplatformdefs.h"
@@ -55,8 +55,8 @@ Q_DECLARE_METATYPE(QQuickItemView::VerticalLayoutDirection)
Q_DECLARE_METATYPE(QQuickItemView::PositionMode)
Q_DECLARE_METATYPE(Qt::Key)
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
#define SHARE_VIEWS
@@ -212,6 +212,7 @@ private slots:
void QTBUG_45640();
void QTBUG_49218();
+ void positionViewAtBeginningAfterResizingCells();
void QTBUG_48870_fastModelUpdates();
void QTBUG_86255();
@@ -318,7 +319,9 @@ private:
QString testForView;
};
-tst_QQuickGridView::tst_QQuickGridView() : m_view(nullptr)
+tst_QQuickGridView::tst_QQuickGridView()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , m_view(nullptr)
{
}
@@ -3725,7 +3728,7 @@ void tst_QQuickGridView::resizeGrid()
ctxt->setContextProperty("testRightToLeft", layoutDirection == Qt::RightToLeft);
ctxt->setContextProperty("testBottomToTop", verticalLayoutDirection == QQuickGridView::BottomToTop);
window->setSource(testFileUrl("resizegrid.qml"));
- QQuickViewTestUtil::centerOnScreen(window, window->size());
+ QQuickViewTestUtils::centerOnScreen(window, window->size());
window->show();
qApp->processEvents();
@@ -4332,7 +4335,7 @@ void tst_QQuickGridView::snapToRow()
QQuickView *window = getView();
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickViewTestUtils::moveMouseAway(window);
window->setSource(testFileUrl("snapToRow.qml"));
window->show();
qApp->processEvents();
@@ -4451,7 +4454,7 @@ void tst_QQuickGridView::snapOneRow()
qreal flickDuration = 180 * flickSlowdown;
QQuickView *window = getView();
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickViewTestUtils::moveMouseAway(window);
window->setSource(testFileUrl("snapOneRow.qml"));
window->show();
@@ -6695,6 +6698,34 @@ void tst_QQuickGridView::QTBUG_49218()
delete window;
}
+void tst_QQuickGridView::positionViewAtBeginningAfterResizingCells()
+{
+ // Check that positionViewAtBeginning() ends up showing row 0, even
+ // if the cells are resized while the viewport is deep down in the list (QTBUG-91461).
+ std::unique_ptr<QQuickView> window(createView());
+ window->setSource(testFileUrl("qtbug91461.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.get()));
+
+ QQuickItem *rootItem = qobject_cast<QQuickItem*>(window->rootObject());
+ QQuickGridView *gridview = qobject_cast<QQuickGridView *>(rootItem->childItems().first());
+ QVERIFY(gridview != nullptr);
+
+ gridview->positionViewAtEnd();
+ QVERIFY(QQuickTest::qWaitForItemPolished(gridview));
+ rootItem->setProperty("cellSize", 200);
+ QVERIFY(QQuickTest::qWaitForItemPolished(gridview));
+ gridview->positionViewAtBeginning();
+ QVERIFY(QQuickTest::qWaitForItemPolished(gridview));
+
+ const QPointF topLeftCorner = window->contentItem()->mapToItem(gridview->contentItem(), QPointF(20, 20));
+ const auto item0 = gridview->itemAt(topLeftCorner.x(), topLeftCorner.y());
+ QVERIFY(item0);
+
+ const int index = qmlContext(item0)->contextProperty("index").toInt();
+ QCOMPARE(index, 0);
+}
+
void tst_QQuickGridView::keyNavigationEnabled()
{
QScopedPointer<QQuickView> window(createView());
diff --git a/tests/auto/quick/qquickimage/BLACKLIST b/tests/auto/quick/qquickimage/BLACKLIST
new file mode 100644
index 0000000000..348ae127f3
--- /dev/null
+++ b/tests/auto/quick/qquickimage/BLACKLIST
@@ -0,0 +1,14 @@
+# QTBUG-98402
+[mirror]
+macos-12 ci
+# QTBUG-102721
+[hugeImages]
+android
+[multiFrame]
+android
+[sourceClipRect]
+android
+[tiling_QTBUG_6716]
+android
+[mirror]
+android
diff --git a/tests/auto/quick/qquickimage/CMakeLists.txt b/tests/auto/quick/qquickimage/CMakeLists.txt
index b7e5479639..4d4ce4f270 100644
--- a/tests/auto/quick/qquickimage/CMakeLists.txt
+++ b/tests/auto/quick/qquickimage/CMakeLists.txt
@@ -12,16 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickimage
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickimage.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -29,6 +20,7 @@ qt_internal_add_test(tst_qquickimage
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickimage/tst_qquickimage.cpp b/tests/auto/quick/qquickimage/tst_qquickimage.cpp
index 16f742f0aa..36c4b60718 100644
--- a/tests/auto/quick/qquickimage/tst_qquickimage.cpp
+++ b/tests/auto/quick/qquickimage/tst_qquickimage.cpp
@@ -47,13 +47,13 @@
#include <QQuickImageProvider>
#include <QQmlAbstractUrlInterceptor>
-#include "../../shared/util.h"
-#include "../../shared/testhttpserver.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
// #define DEBUG_WRITE_OUTPUT
-using namespace QQuickVisualTestUtil;
+using namespace QQuickVisualTestUtils;
Q_DECLARE_METATYPE(QQuickImageBase::Status)
@@ -110,6 +110,7 @@ private:
};
tst_qquickimage::tst_qquickimage()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/quick/qquickimageprovider/BLACKLIST b/tests/auto/quick/qquickimageprovider/BLACKLIST
new file mode 100644
index 0000000000..e78bcb13e9
--- /dev/null
+++ b/tests/auto/quick/qquickimageprovider/BLACKLIST
@@ -0,0 +1,21 @@
+# QTBUG-103047
+[requestImage_sync]
+android
+[requestImage_async]
+android
+[requestImage_async_forced]
+android
+[requestPixmap_sync]
+android
+[requestPixmap_async]
+android
+[removeProvider]
+android
+[threadTest]
+android
+[asyncTextureTest]
+android
+[instantAsyncTextureTest]
+android
+[asyncImageThreadSafety]
+android
diff --git a/tests/auto/quick/qquickimageprovider/CMakeLists.txt b/tests/auto/quick/qquickimageprovider/CMakeLists.txt
index a336e28048..d66b6001cb 100644
--- a/tests/auto/quick/qquickimageprovider/CMakeLists.txt
+++ b/tests/auto/quick/qquickimageprovider/CMakeLists.txt
@@ -4,6 +4,12 @@
## tst_qquickimageprovider Test:
#####################################################################
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
qt_internal_add_test(tst_qquickimageprovider
SOURCES
tst_qquickimageprovider.cpp
@@ -14,7 +20,19 @@ qt_internal_add_test(tst_qquickimageprovider
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
## Scopes:
#####################################################################
+
+qt_internal_extend_target(tst_qquickimageprovider CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+ )
+
+qt_internal_extend_target(tst_qquickimageprovider CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+ )
diff --git a/tests/auto/quick/qquickimageprovider/data/forImports.qml b/tests/auto/quick/qquickimageprovider/data/forImports.qml
new file mode 100644
index 0000000000..c11b37f327
--- /dev/null
+++ b/tests/auto/quick/qquickimageprovider/data/forImports.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+
+Image {
+ source: "image://test/no-such-file.png";
+}
diff --git a/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp b/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp
index 49e94432e4..f76217d11d 100644
--- a/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp
+++ b/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp
@@ -34,14 +34,15 @@
#include <QWaitCondition>
#include <QThreadPool>
#include <private/qqmlengine_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
Q_DECLARE_METATYPE(QQuickImageProvider*);
-class tst_qquickimageprovider : public QObject
+class tst_qquickimageprovider : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickimageprovider()
+ tst_qquickimageprovider() : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -72,7 +73,7 @@ private slots:
private:
QString newImageFileName() const;
- void fillRequestTestsData(const QString &id);
+ void fillRequestTestsData(const char *id);
void runTest(bool async, QQuickImageProvider *provider);
};
@@ -161,7 +162,7 @@ QString tst_qquickimageprovider::newImageFileName() const
return QString("image://test/image-%1.png").arg(count++);
}
-void tst_qquickimageprovider::fillRequestTestsData(const QString &id)
+void tst_qquickimageprovider::fillRequestTestsData(const char *id)
{
QTest::addColumn<QString>("source");
QTest::addColumn<QString>("imageId");
@@ -170,39 +171,39 @@ void tst_qquickimageprovider::fillRequestTestsData(const QString &id)
QTest::addColumn<QString>("error");
QString fileName = newImageFileName();
- QTest::newRow(QTest::toString(id + " simple test"))
+ QTest::addRow("%s simple test", id)
<< "image://test/" + fileName << fileName << "" << QSize(100,100) << "";
fileName = newImageFileName();
- QTest::newRow(QTest::toString(id + " simple test with capitalization"))//As it's a URL, should make no difference
+ QTest::addRow("%s simple test with capitalization", id)//As it's a URL, should make no difference
<< "image://Test/" + fileName << fileName << "" << QSize(100,100) << "";
fileName = newImageFileName();
- QTest::newRow(QTest::toString(id + " url with no id"))
+ QTest::addRow("%s url with no id", id)
<< "image://test/" + fileName << "" + fileName << "" << QSize(100,100) << "";
fileName = newImageFileName();
- QTest::newRow(QTest::toString(id + " url with path"))
+ QTest::addRow("%s url with path", id)
<< "image://test/test/path" + fileName << "test/path" + fileName << "" << QSize(100,100) << "";
fileName = newImageFileName();
- QTest::newRow(QTest::toString(id + " url with fragment"))
+ QTest::addRow("%s url with fragment", id)
<< "image://test/faq.html?#question13" + fileName << "faq.html?#question13" + fileName << "" << QSize(100,100) << "";
fileName = newImageFileName();
- QTest::newRow(QTest::toString(id + " url with query"))
+ QTest::addRow("%s url with query", id)
<< "image://test/cgi-bin/drawgraph.cgi?type=pie&color=green" + fileName << "cgi-bin/drawgraph.cgi?type=pie&color=green" + fileName
<< "" << QSize(100,100) << "";
fileName = newImageFileName();
- QTest::newRow(QTest::toString(id + " scaled image"))
+ QTest::addRow("%s scaled image", id)
<< "image://test/" + fileName << fileName << "sourceSize: \"80x30\"" << QSize(80,30) << "";
- QTest::newRow(QTest::toString(id + " missing"))
+ QTest::addRow("%s missing", id)
<< "image://test/no-such-file.png" << "no-such-file.png" << "" << QSize(100,100)
<< "<Unknown File>:2:1: QML Image: Failed to get image from provider: image://test/no-such-file.png";
- QTest::newRow(QTest::toString(id + " unknown provider"))
+ QTest::addRow("%s unknown provider", id)
<< "image://bogus/exists.png" << "" << "" << QSize()
<< "<Unknown File>:2:1: QML Image: Invalid image provider: image://bogus/exists.png";
}
diff --git a/tests/auto/quick/qquickitem/BLACKLIST b/tests/auto/quick/qquickitem/BLACKLIST
index d94a3ef102..44b7c7efa6 100644
--- a/tests/auto/quick/qquickitem/BLACKLIST
+++ b/tests/auto/quick/qquickitem/BLACKLIST
@@ -1,2 +1,7 @@
[contains:hollow square: testing points inside]
xcb
+
+# QTBUG-100991
+[mousePropagationToParent]
+android
+
diff --git a/tests/auto/quick/qquickitem/CMakeLists.txt b/tests/auto/quick/qquickitem/CMakeLists.txt
index cbc91f8f50..b4a31ab717 100644
--- a/tests/auto/quick/qquickitem/CMakeLists.txt
+++ b/tests/auto/quick/qquickitem/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickitem
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickitem.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickitem/tst_qquickitem.cpp b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
index b36cf88c89..43b9b31d9f 100644
--- a/tests/auto/quick/qquickitem/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
@@ -41,8 +41,8 @@
#include <QDebug>
#include <QTimer>
#include <QQmlEngine>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
#include <QSignalSpy>
#include <QTranslator>
#include <QtCore/qregularexpression.h>
@@ -181,6 +181,7 @@ class tst_qquickitem : public QQmlDataTest
{
Q_OBJECT
public:
+ tst_qquickitem();
private slots:
void initTestCase() override;
@@ -194,6 +195,7 @@ private slots:
void focusSubItemInNonFocusScope();
void parentItemWithFocus();
void reparentFocusedItem();
+ void activeFocusChangedOrder();
void constructor();
void setParentItem();
@@ -263,6 +265,11 @@ private:
}
};
+tst_qquickitem::tst_qquickitem()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qquickitem::initTestCase()
{
QQmlDataTest::initTestCase();
@@ -956,6 +963,93 @@ void tst_qquickitem::reparentFocusedItem()
FVERIFY();
}
+void tst_qquickitem::activeFocusChangedOrder()
+{
+ // This test checks that the activeFocusChanged signal first comes for an
+ // object that has lost focus, and only after that - for an object that
+ // has received focus.
+
+ {
+ // Two FocusScopes inside a Window
+ QQuickWindow window;
+ QVERIFY(ensureFocus(&window));
+ QTRY_COMPARE(QGuiApplication::focusWindow(), &window);
+
+ QQuickFocusScope scope1(window.contentItem());
+ QQuickItem scope1Child(&scope1);
+
+ QQuickFocusScope scope2(window.contentItem());
+ QQuickItem scope2Child(&scope2);
+
+ scope1Child.forceActiveFocus();
+ QTRY_VERIFY(scope1.hasActiveFocus());
+
+ int counter = 0;
+ connect(&scope1, &QQuickItem::activeFocusChanged, [&counter, &scope1](bool focus) {
+ QCOMPARE(scope1.childItems().front()->hasActiveFocus(), focus);
+ QCOMPARE(counter, 0);
+ counter++;
+ });
+ connect(&scope2, &QQuickItem::activeFocusChanged, [&counter, &scope2](bool focus) {
+ QCOMPARE(scope2.childItems().front()->hasActiveFocus(), focus);
+ QCOMPARE(counter, 1);
+ counter++;
+ });
+
+ // A guard is needed so that connections are destroyed before the items.
+ // Otherwise the slots will be called during destruction, and test will
+ // crash (because childItems will be empty).
+ auto guard = qScopeGuard([&scope1, &scope2]() {
+ scope1.disconnect();
+ scope2.disconnect();
+ });
+ Q_UNUSED(guard)
+
+ scope2Child.forceActiveFocus();
+ QTRY_VERIFY(scope2.hasActiveFocus());
+ QCOMPARE(counter, 2); // make sure that both signals are received
+ }
+
+ {
+ // Two Items inside a Window (no explicict FocusScopes)
+ QQuickWindow window;
+ QVERIFY(ensureFocus(&window));
+ QTRY_COMPARE(QGuiApplication::focusWindow(), &window);
+
+ QQuickItem item1(window.contentItem());
+
+ QQuickItem item2(window.contentItem());
+
+ item1.forceActiveFocus();
+ QTRY_VERIFY(item1.hasActiveFocus());
+
+ int counter = 0;
+ connect(&item1, &QQuickItem::activeFocusChanged, [&counter](bool focus) {
+ QVERIFY(!focus);
+ QCOMPARE(counter, 0);
+ counter++;
+ });
+ connect(&item2, &QQuickItem::activeFocusChanged, [&counter](bool focus) {
+ QVERIFY(focus);
+ QCOMPARE(counter, 1);
+ counter++;
+ });
+
+ // A guard is needed so that connections are destroyed before the items.
+ // Otherwise the slots will be called during destruction, and test will
+ // fail.
+ auto guard = qScopeGuard([&item1, &item2]() {
+ item1.disconnect();
+ item2.disconnect();
+ });
+ Q_UNUSED(guard)
+
+ item2.forceActiveFocus();
+ QTRY_VERIFY(item2.hasActiveFocus());
+ QCOMPARE(counter, 2); // make sure that both signals are received
+ }
+}
+
void tst_qquickitem::constructor()
{
QScopedPointer<QQuickItem> root(new QQuickItem);
diff --git a/tests/auto/quick/qquickitem2/CMakeLists.txt b/tests/auto/quick/qquickitem2/CMakeLists.txt
index 7be8bb2ab0..6abb80dc79 100644
--- a/tests/auto/quick/qquickitem2/CMakeLists.txt
+++ b/tests/auto/quick/qquickitem2/CMakeLists.txt
@@ -12,17 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickitem2
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
tst_qquickitem.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
LIBRARIES
Qt::TestPrivate
TESTDATA ${test_data}
diff --git a/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml b/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml
new file mode 100644
index 0000000000..889e480f3b
--- /dev/null
+++ b/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml
@@ -0,0 +1,13 @@
+import QtQuick 2.6
+
+Item {
+ visible: true
+ Item {
+ visible: false
+ Item {
+ objectName: "hiddenChild"
+ activeFocusOnTab: true
+ focus: true
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
index 10b9bf5972..671d42c443 100644
--- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
@@ -40,13 +40,13 @@
#include <QtQuick/private/qquickitemchangelistener_p.h>
#include <QtGui/qstylehints.h>
#include <private/qquickitem_p.h>
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
-#include "../shared/viewtestutil.h"
-#include "../../shared/platforminputcontext.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/platforminputcontext_p.h>
#include <QtTest/private/qpropertytesthelper_p.h>
-using namespace QQuickVisualTestUtil;
+using namespace QQuickVisualTestUtils;
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
@@ -72,6 +72,7 @@ private slots:
void activeFocusOnTab10();
void activeFocusOnTab_infiniteLoop_data();
void activeFocusOnTab_infiniteLoop();
+ void activeFocusOnTab_infiniteLoopControls();
void nextItemInFocusChain();
void nextItemInFocusChain2();
@@ -352,6 +353,7 @@ public:
QML_DECLARE_TYPE(TabFenceItem2);
tst_QQuickItem::tst_QQuickItem()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -1161,6 +1163,17 @@ void tst_QQuickItem::activeFocusOnTab_infiniteLoop()
QCOMPARE(item, window->rootObject());
}
+
+void tst_QQuickItem::activeFocusOnTab_infiniteLoopControls()
+{
+ auto source = testFileUrl("activeFocusOnTab_infiniteLoop3.qml");
+ QScopedPointer<QQuickView>window(new QQuickView());
+ window->setSource(source);
+ window->show();
+ QVERIFY(window->errors().isEmpty());
+ QTest::keyClick(window.get(), Qt::Key_Tab); // should not hang
+}
+
void tst_QQuickItem::nextItemInFocusChain()
{
if (!qt_tab_all_widgets())
@@ -3768,11 +3781,13 @@ void tst_QQuickItem::colorGroup()
QCOMPARE(palette->currentColorGroup(), QPalette::Inactive);
QCOMPARE(foreground->property("color").value<QColor>(), palette->inactive()->base());
+ activationThief.hide();
view.requestActivate();
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(palette->currentColorGroup(), QPalette::Active);
QCOMPARE(foreground->property("color").value<QColor>(), palette->active()->base());
+ activationThief.show();
activationThief.requestActivate();
QVERIFY(QTest::qWaitForWindowActive(&activationThief));
QCOMPARE(palette->currentColorGroup(), QPalette::Inactive);
diff --git a/tests/auto/quick/qquickitemlayer/BLACKLIST b/tests/auto/quick/qquickitemlayer/BLACKLIST
new file mode 100644
index 0000000000..d74ee2928a
--- /dev/null
+++ b/tests/auto/quick/qquickitemlayer/BLACKLIST
@@ -0,0 +1,23 @@
+# QTBUG-103088
+[layerSmooth]
+android
+[layerVisibility]
+android
+[layerZOrder]
+android
+[changeZOrder]
+android
+[itemEffect]
+android
+[rectangleEffect]
+android
+[textureMirroring]
+android
+[layerEffect]
+android
+[layerSourceRect]
+android
+[layerIsTextureProvider]
+android
+[changeSamplerName]
+android
diff --git a/tests/auto/quick/qquickitemlayer/CMakeLists.txt b/tests/auto/quick/qquickitemlayer/CMakeLists.txt
index 37103b0c31..a17d57a72d 100644
--- a/tests/auto/quick/qquickitemlayer/CMakeLists.txt
+++ b/tests/auto/quick/qquickitemlayer/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickitemlayer
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickitemlayer.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickitemlayer/tst_qquickitemlayer.cpp b/tests/auto/quick/qquickitemlayer/tst_qquickitemlayer.cpp
index 0fbd9cc24e..ae6947f01b 100644
--- a/tests/auto/quick/qquickitemlayer/tst_qquickitemlayer.cpp
+++ b/tests/auto/quick/qquickitemlayer/tst_qquickitemlayer.cpp
@@ -34,7 +34,7 @@
#include <qopenglcontext.h>
#include <qopenglfunctions.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/qpa/qplatformintegration.h>
@@ -97,7 +97,7 @@ bool isOffscreen()
const char skipOffscreenMsg[] =
"Skipping due to grabWindow not functional on offscreen/minimal platformsi (QTBUG-63185)";
-tst_QQuickItemLayer::tst_QQuickItemLayer() { }
+tst_QQuickItemLayer::tst_QQuickItemLayer() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
void tst_QQuickItemLayer::initTestCase()
{
diff --git a/tests/auto/quick/qquickitemrhiintegration/BLACKLIST b/tests/auto/quick/qquickitemrhiintegration/BLACKLIST
new file mode 100644
index 0000000000..03e5bc8c1d
--- /dev/null
+++ b/tests/auto/quick/qquickitemrhiintegration/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-102721
+[rhiItem]
+android
diff --git a/tests/auto/quick/qquicklayouts/BLACKLIST b/tests/auto/quick/qquicklayouts/BLACKLIST
new file mode 100644
index 0000000000..0d299700a2
--- /dev/null
+++ b/tests/auto/quick/qquicklayouts/BLACKLIST
@@ -0,0 +1,11 @@
+[Tests_GridLayout::test_spacings]
+qnx
+
+# QTBUG-103060
+[Tests_GridLayout::test_spacings]
+android
+[Tests_RowLayout::test_distributeToPixelGrid]
+android
+[Tests_RowLayout::test_rearrangeFixedSizeLayout]
+android
+
diff --git a/tests/auto/quick/qquicklayouts/data/tst_gridlayout.qml b/tests/auto/quick/qquicklayouts/data/tst_gridlayout.qml
index 46d18a4384..1abf2787b7 100644
--- a/tests/auto/quick/qquicklayouts/data/tst_gridlayout.qml
+++ b/tests/auto/quick/qquicklayouts/data/tst_gridlayout.qml
@@ -586,6 +586,56 @@ Item {
tryCompare(layout.children[4], "y", 60);
}
+ Component {
+ id: layout_alignBaseline_Component
+ GridLayout {
+ columns: 2
+ columnSpacing: 0
+ rowSpacing: 0
+ TextInput {
+ property var itemRect: [x, y, width, height]
+ text: "red"
+ baselineOffset: 7
+ color: "red"
+ verticalAlignment: TextInput.AlignVCenter
+ Layout.preferredWidth: 50
+ Layout.preferredHeight: 10
+ Layout.fillHeight: true
+ }
+ TextInput {
+ property var itemRect: [x, y, width, height]
+ text: "green"
+ baselineOffset: 7
+ color: "green"
+ verticalAlignment: TextInput.AlignVCenter
+ Layout.preferredWidth: 50
+ Layout.preferredHeight: 10
+ Layout.fillHeight: true
+ }
+
+ }
+ }
+
+ function test_alignBaseline_dont_always_invalidate()
+ {
+ var layout = createTemporaryObject(layout_alignBaseline_Component, container);
+ waitForItemPolished(layout)
+ layout.height = 20
+ // Adjusting height on an item that uses Qt.AlignBaseline might adjust the baseline
+ // Test if we don't get excessive number of polish() events because of baseline changes
+ // (In this case, we don't want to align by the baseline)
+ compare(isPolishScheduled(layout), false)
+ waitForItemPolished(layout)
+ var c0 = layout.children[0]
+ c0.Layout.alignment = Qt.AlignBaseline
+ var c1 = layout.children[1]
+ c1.Layout.alignment = Qt.AlignBaseline
+
+ // We want to align by baseline => expect a polish event
+ compare(isPolishScheduled(layout), true)
+ waitForItemPolished(layout)
+ }
+
Component {
id: layout_rightToLeft_Component
diff --git a/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml b/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
index 87e0a01df2..5e8f6f9bcf 100644
--- a/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
+++ b/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
@@ -77,6 +77,18 @@ Item {
}
Component {
+ id: layout_rowLayout_Component
+ RowLayout {
+ }
+ }
+
+ Component {
+ id: layout_columnLayout_Component
+ ColumnLayout {
+ }
+ }
+
+ Component {
id: itemsWithAnchorsLayout_Component
RowLayout {
spacing: 2
@@ -532,6 +544,102 @@ Item {
layout.destroy();
}
+
+ function buildLayout(layout, arrLayoutData) {
+ for (let i = 0; i < arrLayoutData.length; i++) {
+ let layoutItemDesc = arrLayoutData[i]
+ let rect = layoutItem_Component.createObject(layout)
+ for (let keyName in layoutItemDesc) {
+ rect.Layout[keyName] = layoutItemDesc[keyName]
+ }
+ }
+ }
+
+ function test_dynamicAlignment_data()
+ {
+ return [
+ {
+ tag: "simple",
+
+ layout: {
+ type: "RowLayout",
+ items: [
+ {preferredWidth: 30, preferredHeight: 20, fillHeight: true},
+ {preferredWidth: 30, preferredHeight: 20},
+ ]
+ },
+ expectedGeometries: [
+ [ 0, 0, 30, 60],
+ [30, 20, 30, 20]
+ ]
+ },{
+ tag: "valign",
+ layout: {
+ type: "RowLayout",
+ items: [
+ {preferredWidth: 12, preferredHeight: 20, fillHeight: true},
+ {preferredWidth: 12, preferredHeight: 20},
+ {preferredWidth: 12, preferredHeight: 20, alignment: Qt.AlignTop},
+ {preferredWidth: 12, preferredHeight: 20, alignment: Qt.AlignVCenter},
+ {preferredWidth: 12, preferredHeight: 20, alignment: Qt.AlignBottom}
+ ]
+ },
+ expectedGeometries: [
+ [ 0, 0, 12, 60],
+ [12, 20, 12, 20],
+ [24, 0, 12, 20],
+ [36, 20, 12, 20],
+ [48, 40, 12, 20]
+ ]
+ },{
+ tag: "halign",
+ layout: {
+ type: "ColumnLayout",
+ items: [
+ {preferredWidth: 20, preferredHeight: 12, fillWidth: true},
+ {preferredWidth: 20, preferredHeight: 12},
+ {preferredWidth: 20, preferredHeight: 12, alignment: Qt.AlignLeft},
+ {preferredWidth: 20, preferredHeight: 12, alignment: Qt.AlignHCenter},
+ {preferredWidth: 20, preferredHeight: 12, alignment: Qt.AlignRight}
+ ]
+ },
+ expectedGeometries: [
+ [ 0, 0, 60, 12],
+ [ 0, 12, 20, 12],
+ [ 0, 24, 20, 12],
+ [20, 36, 20, 12],
+ [40, 48, 20, 12]
+ ]
+ }
+ ]
+ }
+
+ function test_dynamicAlignment(data)
+ {
+ let layout
+ switch (data.layout.type) {
+ case "RowLayout":
+ layout = createTemporaryObject(layout_rowLayout_Component, container)
+ break
+ case "ColumnLayout":
+ layout = createTemporaryObject(layout_columnLayout_Component, container)
+ break
+ default:
+ console.log("data.layout.type not recognized(" + data.layout.type + ")")
+ }
+ layout.spacing = 0
+ buildLayout(layout, data.layout.items)
+ layout.width = 60
+ layout.height = 60 // divides in 1/2/3/4/5/6
+ waitForItemPolished(layout)
+
+ for (let i = 0; i < layout.children.length; ++i) {
+ let itm = layout.children[i]
+ compare(itemRect(itm), data.expectedGeometries[i])
+ }
+ }
+
+
Component {
id: layout_sizeHintNormalization_Component
GridLayout {
@@ -775,13 +883,6 @@ Item {
layout.destroy();
}
-
- Component {
- id: layout_rowLayout_Component
- RowLayout {
- }
- }
-
function test_stretchItem_data()
{
return [
diff --git a/tests/auto/quick/qquicklayouts/data/tst_stacklayout.qml b/tests/auto/quick/qquicklayouts/data/tst_stacklayout.qml
index c567b31db3..303a4228a1 100644
--- a/tests/auto/quick/qquicklayouts/data/tst_stacklayout.qml
+++ b/tests/auto/quick/qquicklayouts/data/tst_stacklayout.qml
@@ -272,5 +272,467 @@ Item {
compare(layout.item2.isCurrentItem, false)
compare(layout.item2.layout, layout)
}
+
+ Component {
+ id: layout_setCurrentIndex_Component
+
+ StackLayout {
+ width: 200
+ height: 200
+
+ property alias firstItem : rect
+ property alias secondItem: rowLayout
+
+ Rectangle {
+ id: rect
+ color: "red"
+ implicitWidth: 10
+ implicitHeight: 10
+ }
+ RowLayout {
+ id: rowLayout
+ spacing: 0
+ Rectangle {
+ color: "green"
+ implicitWidth: 10
+ implicitHeight: 10
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+ Rectangle {
+ color: "blue"
+ implicitWidth: 10
+ implicitHeight: 10
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+ }
+ }
+ }
+
+ function test_setCurrentIndex()
+ {
+ var layout = layout_setCurrentIndex_Component.createObject(container)
+ compare(layout.firstItem.width, 200)
+
+ // Invalidate the StackLayout (and its cached size hints)
+ layout.firstItem.implicitWidth = 42
+
+ layout.currentIndex = 1
+ compare(layout.secondItem.width, 200) // width should not be -1
+ layout.destroy()
+ }
+
+ function geometry(item) {
+ return [item.x, item.y, item.width, item.height]
+ }
+
+ Component {
+ id: countGeometryChanges_Component
+ StackLayout {
+ id: stack
+ property alias col: _col
+ property alias row: _row
+ width: 100
+ ColumnLayout {
+ id: _col
+ property alias r1: _r1
+ property alias r2: _r2
+ property alias r3: _r3
+ spacing: 0
+ property int counter : 0
+ onWidthChanged: { ++counter; }
+ Rectangle {
+ id: _r1
+ implicitWidth: 20
+ implicitHeight: 20
+ Layout.fillWidth: true
+ property int counter : 0
+ onWidthChanged: { ++counter; }
+ }
+ Rectangle {
+ id: _r2
+ implicitWidth: 50
+ implicitHeight: 50
+ Layout.fillWidth: true
+ property int counter : 0
+ onWidthChanged: { ++counter; }
+ }
+ Rectangle {
+ id: _r3
+ implicitWidth: 40
+ implicitHeight: 40
+ Layout.fillWidth: true
+ property int counter : 0
+ onWidthChanged: { ++counter; }
+ }
+ }
+ RowLayout {
+ id: _row
+ property alias r5: _r5
+ spacing: 0
+ property int counter : 0
+ onWidthChanged: { ++counter; }
+ Rectangle {
+ id: _r5
+ implicitWidth: 100
+ implicitHeight: 100
+ Layout.fillWidth: true
+ property int counter : 0
+ onWidthChanged: { ++counter; }
+ }
+ }
+ }
+ }
+
+ function test_countGeometryChanges() {
+
+ var stack = countGeometryChanges_Component.createObject(container)
+ compare(stack.currentIndex, 0)
+ compare(stack.col.width, 100)
+ compare(stack.col.height, 110)
+ compare(stack.row.width, 100)
+ compare(stack.row.height, 100)
+ verify(stack.col.r1.counter <= 2)
+ compare(stack.col.r2.counter, 1)
+ verify(stack.col.r3.counter <= 2)
+ verify(stack.col.counter <= 2)
+ compare(stack.row.counter, 1) // not visible, will only receive the initial geometry change
+ compare(stack.row.r5.counter, 0)
+ stack.destroy()
+ }
+
+
+ Component {
+ id: layoutItem_Component
+ Rectangle {
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+ }
+
+ Component {
+ id: emtpy_StackLayout_Component
+ StackLayout {
+ property int num_onCountChanged: 0
+ property int num_onCurrentIndexChanged: 0
+ onCountChanged: { ++num_onCountChanged; }
+ onCurrentIndexChanged: { ++num_onCurrentIndexChanged; }
+ }
+ }
+
+ function test_addAndRemoveItems()
+ {
+ var stack = emtpy_StackLayout_Component.createObject(container)
+ stack.currentIndex = 2
+ compare(stack.implicitWidth, 0)
+ compare(stack.implicitHeight, 0)
+
+ var rect0 = layoutItem_Component.createObject(stack)
+ verify(waitForItemPolished(stack))
+ compare(stack.implicitWidth, 20)
+ compare(stack.implicitHeight, 20)
+ compare(rect0.visible, false)
+
+ var rect1 = layoutItem_Component.createObject(stack)
+ rect1.Layout.preferredWidth = 30
+ rect1.Layout.preferredHeight = 10
+ verify(waitForItemPolished(stack))
+ compare(stack.implicitWidth, 30)
+ compare(stack.implicitHeight, 20)
+ compare(rect0.visible, false)
+ compare(rect1.visible, false)
+
+ var rect2 = layoutItem_Component.createObject(stack)
+ rect2.x = 42 // ### items in a stacklayout will have their x and y positions discarded.
+ rect2.y = 42
+ rect2.Layout.preferredWidth = 80
+ rect2.Layout.preferredHeight = 30
+ rect2.Layout.fillWidth = true
+ verify(waitForItemPolished(stack))
+ compare(stack.implicitWidth, 80)
+ compare(stack.implicitHeight, 30)
+ compare(rect0.visible, false)
+ compare(rect1.visible, false)
+ compare(rect2.visible, true)
+ compare(geometry(rect2), geometry(stack))
+
+ rect2.destroy()
+ wait(0)
+ verify(waitForItemPolished(stack))
+ compare(stack.implicitWidth, 30)
+ compare(stack.implicitHeight, 20)
+
+ rect0.destroy()
+ wait(0)
+ verify(waitForItemPolished(stack))
+ compare(stack.implicitWidth, 30)
+ compare(stack.implicitHeight, 10)
+
+ rect1.destroy()
+ wait(0)
+ verify(waitForItemPolished(stack))
+ compare(stack.implicitWidth, 0)
+ compare(stack.implicitHeight, 0)
+
+ stack.destroy()
+ }
+
+ function test_sizeHint_data() {
+ return [
+ { tag: "propagateNone", layoutHints: [10, 20, 30], childHints: [11, 21, 31], expected:[10, 20, Number.POSITIVE_INFINITY]},
+ { tag: "propagateMinimumWidth", layoutHints: [-1, 20, 30], childHints: [10, 21, 31], expected:[10, 20, Number.POSITIVE_INFINITY]},
+ { tag: "propagatePreferredWidth", layoutHints: [10, -1, 30], childHints: [11, 20, 31], expected:[10, 20, Number.POSITIVE_INFINITY]},
+ { tag: "propagateMaximumWidth", layoutHints: [10, 20, -1], childHints: [11, 21, 30], expected:[10, 20, Number.POSITIVE_INFINITY]},
+ { tag: "propagateAll", layoutHints: [-1, -1, -1], childHints: [10, 20, 30], expected:[10, 20, Number.POSITIVE_INFINITY]},
+ { tag: "propagateCrazy", layoutHints: [-1, -1, -1], childHints: [40, 21, 30], expected:[30, 30, Number.POSITIVE_INFINITY]},
+ { tag: "expandMinToExplicitPref", layoutHints: [-1, 1, -1], childHints: [11, 21, 31], expected:[ 1, 1, Number.POSITIVE_INFINITY]},
+ { tag: "expandMaxToExplicitPref", layoutHints: [-1, 99, -1], childHints: [11, 21, 31], expected:[11, 99, Number.POSITIVE_INFINITY]},
+ { tag: "expandAllToExplicitMin", layoutHints: [99, -1, -1], childHints: [11, 21, 31], expected:[99, 99, Number.POSITIVE_INFINITY]},
+ { tag: "expandPrefToExplicitMin", layoutHints: [24, -1, -1], childHints: [11, 21, 31], expected:[24, 24, Number.POSITIVE_INFINITY]},
+ { tag: "boundPrefToExplicitMax", layoutHints: [-1, -1, 19], childHints: [11, 21, 31], expected:[11, 19, Number.POSITIVE_INFINITY]},
+ { tag: "boundAllToExplicitMax", layoutHints: [-1, -1, 9], childHints: [11, 21, 31], expected:[ 9, 9, Number.POSITIVE_INFINITY]},
+ ];
+ }
+
+ function itemSizeHints(item) {
+ return [item.Layout.minimumWidth, item.implicitWidth, item.Layout.maximumWidth]
+ }
+ Component {
+ id: stacklayout_sizeHint_Component
+ StackLayout {
+ property int implicitWidthChangedCount : 0
+ onImplicitWidthChanged: { ++implicitWidthChangedCount }
+ ColumnLayout {
+ Rectangle {
+ id: r1
+ color: "red"
+ Layout.minimumWidth: 1
+ Layout.preferredWidth: 2
+ Layout.maximumWidth: 3
+
+ Layout.minimumHeight: 20
+ Layout.preferredHeight: 20
+ Layout.maximumHeight: 20
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ function test_sizeHint(data) {
+ var layout = stacklayout_sizeHint_Component.createObject(container)
+
+ var col = layout.children[0]
+ col.Layout.minimumWidth = data.layoutHints[0]
+ col.Layout.preferredWidth = data.layoutHints[1]
+ col.Layout.maximumWidth = data.layoutHints[2]
+
+ var child = col.children[0]
+ if (data.implicitWidth !== undefined) {
+ child.implicitWidth = data.implicitWidth
+ }
+ child.Layout.minimumWidth = data.childHints[0]
+ child.Layout.preferredWidth = data.childHints[1]
+ child.Layout.maximumWidth = data.childHints[2]
+
+ verify(waitForItemPolished(layout))
+ var effectiveSizeHintResult = [layout.Layout.minimumWidth, layout.implicitWidth, layout.Layout.maximumWidth]
+ compare(effectiveSizeHintResult, data.expected)
+ layout.destroy()
+ }
+
+ Component {
+ id: stacklayout_addIgnoredItem_Component
+ StackLayout {
+ Repeater {
+ id: rep
+ model: 1
+ Rectangle {
+ id: r
+ }
+ }
+ }
+ }
+
+ // Items with no size information is ignored.
+ function test_addIgnoredItem()
+ {
+ var stack = stacklayout_addIgnoredItem_Component.createObject(container)
+ compare(stack.count, 1)
+ compare(stack.implicitWidth, 0)
+ compare(stack.implicitHeight, 0)
+ var r = stack.children[0]
+ r.Layout.preferredWidth = 20
+ r.Layout.preferredHeight = 30
+ verify(waitForItemPolished(stack))
+ compare(stack.count, 1)
+ compare(stack.implicitWidth, 20)
+ compare(stack.implicitHeight, 30)
+ stack.destroy();
+ }
+
+ function test_dontCrashWhenAnchoredToAWindow() {
+ var test_layoutStr =
+ 'import QtQuick; \
+ import QtQuick.Window; \
+ import QtQuick.Layouts; \
+ Window { \
+ visible: true; \
+ width: stack.implicitWidth; \
+ height: stack.implicitHeight; \
+ StackLayout { \
+ id: stack; \
+ currentIndex: 0; \
+ anchors.fill: parent; \
+ Rectangle { \
+ color: "red"; \
+ implicitWidth: 300; \
+ implicitHeight: 200; \
+ } \
+ } \
+ } '
+
+ var win = Qt.createQmlObject(test_layoutStr, container, '');
+ if (win.visibility === Window.Windowed) {
+ // on single-window systems (such as Android), the window geometry will be
+ // fullscreen, and most likely it will be set to screen size. Avoid this test for
+ // those systems, as the size of the window will not be determined by the layout
+ tryCompare(win, 'width', 300);
+ }
+ win.destroy()
+ }
+
+ Component {
+ id: test_dontCrashWhenChildIsResizedToNull_Component
+ StackLayout {
+ property alias rect : _rect
+ Rectangle {
+ id: _rect;
+ color: "red"
+ implicitWidth: 200
+ implicitHeight: 200
+ }
+ }
+ }
+
+ function test_dontCrashWhenChildIsResizedToNull() {
+ var layout = test_dontCrashWhenChildIsResizedToNull_Component.createObject(container)
+ layout.rect.width = 0
+ layout.width = 222 // trigger a rearrange with a valid size
+ layout.height = 222
+ }
+
+ Component {
+ id: test_currentIndex_Component
+ StackLayout {
+ currentIndex: 1
+ Text {
+ text: "0"
+ }
+ Text {
+ text: "1"
+ }
+ }
+ }
+
+ function test_currentIndex() {
+ var layout = test_currentIndex_Component.createObject(container)
+ var c0 = layout.children[0]
+ var c1 = layout.children[1]
+ compare(layout.currentIndex, 1)
+ tryCompare(layout, 'visible', true)
+ compare(c0.visible, false)
+ compare(c1.visible, true)
+ layout.currentIndex = 0
+ compare(c0.visible, true)
+ compare(c1.visible, false)
+ var c2 = layoutItem_Component.createObject(layout)
+ compare(c2.visible, false)
+
+ /*
+ * destroy the current item and check if visibility advances to next
+ */
+ c0.destroy()
+ tryCompare(c1, 'visible', true)
+ compare(c2.visible, false)
+ c1.destroy()
+ tryCompare(c2, 'visible', true)
+ c2.destroy()
+ tryCompare(layout, 'currentIndex', 0)
+
+ layout.destroy()
+
+ /*
+ * Test the default/implicit value of currentIndex, either -1 (if empty) or 0:
+ */
+ layout = emtpy_StackLayout_Component.createObject(container)
+ tryCompare(layout, 'visible', true)
+ compare(layout.currentIndex, -1)
+ compare(layout.num_onCurrentIndexChanged, 0)
+ // make it non-empty
+ c0 = layoutItem_Component.createObject(layout)
+ compare(layout.currentIndex, 0)
+ compare(layout.num_onCurrentIndexChanged, 1)
+ compare(c0.visible, true)
+ // make it empty again
+ c0.destroy()
+ wait(0)
+ compare(layout.currentIndex, -1)
+ //tryCompare(layout, 'currentIndex', -1)
+ compare(layout.num_onCurrentIndexChanged, 2)
+
+ /*
+ * Check that explicit value doesn't change,
+ * and that no items are visible if the index is invalid/out of range
+ */
+ layout.currentIndex = 2
+ compare(layout.currentIndex, 2)
+ compare(layout.num_onCurrentIndexChanged, 3)
+ c0 = layoutItem_Component.createObject(layout)
+ compare(layout.currentIndex, 2)
+ compare(c0.visible, false)
+
+ c1 = layoutItem_Component.createObject(layout)
+ compare(layout.currentIndex, 2)
+ compare(c0.visible, false)
+ compare(c1.visible, false)
+
+ c2 = layoutItem_Component.createObject(layout)
+ compare(layout.currentIndex, 2)
+ compare(c0.visible, false)
+ compare(c1.visible, false)
+ compare(c2.visible, true)
+
+ c2.destroy()
+ wait(0)
+ compare(layout.currentIndex, 2)
+ compare(c0.visible, false)
+ compare(c1.visible, false)
+ c1.destroy()
+ wait(0)
+ compare(layout.currentIndex, 2)
+ compare(c0.visible, false)
+ c0.destroy()
+ wait(0)
+ compare(layout.currentIndex, 2)
+ compare(layout.num_onCurrentIndexChanged, 3)
+ }
+
+ function test_count() {
+ var layout = emtpy_StackLayout_Component.createObject(container)
+ tryCompare(layout, 'visible', true)
+ compare(layout.count, 0)
+ compare(layout.currentIndex, -1)
+ compare(layout.num_onCountChanged, 0)
+ compare(layout.num_onCurrentIndexChanged, 0)
+ var c0 = layoutItem_Component.createObject(layout)
+ compare(layout.count, 1)
+ compare(layout.currentIndex, 0)
+ compare(layout.num_onCurrentIndexChanged, 1)
+ compare(layout.num_onCountChanged, 1)
+ }
+
+
}
}
diff --git a/tests/auto/quick/qquicklistview/BLACKLIST b/tests/auto/quick/qquicklistview/BLACKLIST
index 6ef69550a4..e6b76ea247 100644
--- a/tests/auto/quick/qquicklistview/BLACKLIST
+++ b/tests/auto/quick/qquicklistview/BLACKLIST
@@ -4,11 +4,9 @@ opensuse-leap
#QTBUG-53863
[populateTransitions]
opensuse-42.1
+
+# QTBUG-103089
+[QTBUG_48044_currentItemNotVisibleAfterTransition]
+android
[contentHeightWithDelayRemove]
-macos
-#QTBUG-75960
-#QTBUG-76652
-[currentIndex]
-macos
-opensuse-leap
-ubuntu-18.04
+android
diff --git a/tests/auto/quick/qquicklistview/CMakeLists.txt b/tests/auto/quick/qquicklistview/CMakeLists.txt
index 761d515eaf..a87cc82628 100644
--- a/tests/auto/quick/qquicklistview/CMakeLists.txt
+++ b/tests/auto/quick/qquicklistview/CMakeLists.txt
@@ -12,19 +12,11 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicklistview
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
incrementalmodel.cpp incrementalmodel.h
proxytestinnermodel.cpp proxytestinnermodel.h
randomsortmodel.cpp randomsortmodel.h
reusemodel.h
tst_qquicklistview.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -33,6 +25,7 @@ qt_internal_add_test(tst_qquicklistview
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquicklistview/data/appendDuringScrollDown.qml b/tests/auto/quick/qquicklistview/data/appendDuringScrollDown.qml
index af35c29143..6ba6480297 100644
--- a/tests/auto/quick/qquicklistview/data/appendDuringScrollDown.qml
+++ b/tests/auto/quick/qquicklistview/data/appendDuringScrollDown.qml
@@ -1,10 +1,11 @@
import QtQuick 2.6
ListView {
+ id: listView
width: 320; height: 240
focus: true
delegate: Text {
- height: 40; width: parent.width
+ height: 40; width: listView.width
text: model.text
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
diff --git a/tests/auto/quick/qquicklistview/data/displayMargin.qml b/tests/auto/quick/qquicklistview/data/displayMargin.qml
index aafbb4235f..e6ea695b49 100644
--- a/tests/auto/quick/qquicklistview/data/displayMargin.qml
+++ b/tests/auto/quick/qquicklistview/data/displayMargin.qml
@@ -44,7 +44,7 @@ Item {
model: 100
delegate: Rectangle {
objectName: "delegate"
- width: parent.width
+ width: view.width
height: 25
color: index % 2 ? "steelblue" : "lightsteelblue"
Text {
diff --git a/tests/auto/quick/qquicklistview/data/headerCrash.qml b/tests/auto/quick/qquicklistview/data/headerCrash.qml
index 124fa894f2..972ecb2906 100644
--- a/tests/auto/quick/qquicklistview/data/headerCrash.qml
+++ b/tests/auto/quick/qquicklistview/data/headerCrash.qml
@@ -12,7 +12,7 @@ ListView {
}
delegate: Rectangle {
- width: parent.width; height: 20
+ width: myList.width; height: 20
color: index % 2 ? "green" : "red"
}
diff --git a/tests/auto/quick/qquicklistview/data/listview-itematindex.qml b/tests/auto/quick/qquicklistview/data/listview-itematindex.qml
index fba8b11933..2194f1edff 100644
--- a/tests/auto/quick/qquicklistview/data/listview-itematindex.qml
+++ b/tests/auto/quick/qquicklistview/data/listview-itematindex.qml
@@ -1,13 +1,14 @@
import QtQuick 2.0
ListView {
+ id: listView
width: 400
height: 400
focus: true
model: 3
delegate: Text {
- width: parent.width
+ width: listView.width
height: 10
property int idx: index
text: index
diff --git a/tests/auto/quick/qquicklistview/data/outsideViewportChangeNotAffectingView.qml b/tests/auto/quick/qquicklistview/data/outsideViewportChangeNotAffectingView.qml
index e0acaf49e4..ef959b10b4 100644
--- a/tests/auto/quick/qquicklistview/data/outsideViewportChangeNotAffectingView.qml
+++ b/tests/auto/quick/qquicklistview/data/outsideViewportChangeNotAffectingView.qml
@@ -72,7 +72,7 @@ Item {
ListElement { size: 300; }
}
delegate: Rectangle {
- width: parent.width
+ width: list.width
color: index % 2 == 0 ? "red" : "blue"
height: size
Text { anchors.centerIn: parent; text: index }
diff --git a/tests/auto/quick/qquicklistview/data/qtbug48044.qml b/tests/auto/quick/qquicklistview/data/qtbug48044.qml
index d318643c1c..368b6bd4bd 100644
--- a/tests/auto/quick/qquicklistview/data/qtbug48044.qml
+++ b/tests/auto/quick/qquicklistview/data/qtbug48044.qml
@@ -116,7 +116,7 @@ Item {
color: header ? "yellow" : "cyan"
border.color: "black"
height: 50
- width: parent.width
+ width: listView.width
Text {
anchors.centerIn: parent
diff --git a/tests/auto/quick/qquicklistview/data/resizeAfterComponentComplete.qml b/tests/auto/quick/qquicklistview/data/resizeAfterComponentComplete.qml
index 851d8f9a0c..f5be95b7cc 100644
--- a/tests/auto/quick/qquicklistview/data/resizeAfterComponentComplete.qml
+++ b/tests/auto/quick/qquicklistview/data/resizeAfterComponentComplete.qml
@@ -56,7 +56,7 @@ ListView {
anchors.fill: parent
model: 10
delegate: Rectangle {
- width: parent.width
+ width: listView.width
height: 40
border.color: "lightsteelblue"
Text {
diff --git a/tests/auto/quick/qquicklistview/data/sectionSnapping.qml b/tests/auto/quick/qquicklistview/data/sectionSnapping.qml
index 2583cc0377..48a893f88c 100644
--- a/tests/auto/quick/qquicklistview/data/sectionSnapping.qml
+++ b/tests/auto/quick/qquicklistview/data/sectionSnapping.qml
@@ -1,6 +1,7 @@
import QtQuick 2.0
ListView {
+ id: listView
width: 400
height: 400
preferredHighlightBegin: 100
@@ -17,7 +18,7 @@ ListView {
}
delegate: Rectangle {
- width: parent.width
+ width: listView.width
height: 50
color: index % 2 ? "lightsteelblue" : "steelblue"
Text {
diff --git a/tests/auto/quick/qquicklistview/data/snapOneItemWrongDirection.qml b/tests/auto/quick/qquicklistview/data/snapOneItemWrongDirection.qml
index f5b7b35d0c..1dfbfe0feb 100644
--- a/tests/auto/quick/qquicklistview/data/snapOneItemWrongDirection.qml
+++ b/tests/auto/quick/qquicklistview/data/snapOneItemWrongDirection.qml
@@ -1,13 +1,14 @@
import QtQuick 2.0
ListView {
+ id: listView
width: 400
height: 400
focus: true
model: 10
delegate: Rectangle {
- width: parent.width
+ width: listView.width
height: 50
color: index % 2 ? "blue" : "green"
}
diff --git a/tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml b/tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml
index 338af38475..16b9c72b16 100644
--- a/tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml
+++ b/tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml
@@ -1,6 +1,7 @@
import QtQuick 2.0
ListView {
+ id: listView
width: 400
height: 400
focus: true
@@ -15,7 +16,7 @@ ListView {
model: 10
delegate: Item {
- width: parent.width
+ width: listView.width
height: ListView.isCurrentItem ? 100 : 50
Text {
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index 2b017aa1fc..24196e2ba1 100644
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -46,9 +46,9 @@
#include <QtQmlModels/private/qqmllistmodel_p.h>
#include <QtQmlModels/private/qqmldelegatemodel_p.h>
#include <qpa/qwindowsysteminterface.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
#include "incrementalmodel.h"
#include "proxytestinnermodel.h"
#include "randomsortmodel.h"
@@ -62,8 +62,8 @@ Q_DECLARE_METATYPE(QQuickListView::Orientation)
Q_DECLARE_METATYPE(QQuickFlickable::FlickableDirection)
Q_DECLARE_METATYPE(Qt::Key)
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
#define SHARE_VIEWS
@@ -401,7 +401,9 @@ public:
int mCacheBuffer;
};
-tst_QQuickListView::tst_QQuickListView() : m_view(nullptr)
+tst_QQuickListView::tst_QQuickListView()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , m_view(nullptr)
{
}
@@ -431,6 +433,9 @@ void tst_QQuickListView::cleanupTestCase()
template <class T>
void tst_QQuickListView::items(const QUrl &source)
{
+ // Make sure we outlive the view, or the context property will become null.
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
T model;
@@ -441,7 +446,6 @@ void tst_QQuickListView::items(const QUrl &source)
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(source);
@@ -512,6 +516,8 @@ void tst_QQuickListView::items(const QUrl &source)
template <class T>
void tst_QQuickListView::changed(const QUrl &source)
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
T model;
@@ -522,7 +528,6 @@ void tst_QQuickListView::changed(const QUrl &source)
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(source);
@@ -550,6 +555,8 @@ void tst_QQuickListView::changed(const QUrl &source)
template <class T>
void tst_QQuickListView::inserted(const QUrl &source)
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window.data()));
@@ -562,7 +569,6 @@ void tst_QQuickListView::inserted(const QUrl &source)
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(source);
@@ -654,11 +660,12 @@ void tst_QQuickListView::inserted_more(QQuickItemView::VerticalLayoutDirection v
for (int i = 0; i < 30; i++)
model.addItem("Item" + QString::number(i), "");
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QQuickView *window = getView();
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -955,6 +962,8 @@ void tst_QQuickListView::insertBeforeVisible_data()
template <class T>
void tst_QQuickListView::removed(const QUrl &source, bool /* animated */)
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
T model;
@@ -964,7 +973,6 @@ void tst_QQuickListView::removed(const QUrl &source, bool /* animated */)
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(source);
@@ -1318,6 +1326,8 @@ void tst_QQuickListView::removed_more_data()
template <class T>
void tst_QQuickListView::clear(const QUrl &source, QQuickItemView::VerticalLayoutDirection verticalLayoutDirection)
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
T model;
@@ -1327,7 +1337,6 @@ void tst_QQuickListView::clear(const QUrl &source, QQuickItemView::VerticalLayou
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(source);
@@ -1850,6 +1859,8 @@ void tst_QQuickListView::multipleChanges_data()
void tst_QQuickListView::swapWithFirstItem()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
QaimModel model;
@@ -1859,7 +1870,6 @@ void tst_QQuickListView::swapWithFirstItem()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -1878,6 +1888,8 @@ void tst_QQuickListView::swapWithFirstItem()
void tst_QQuickListView::checkCountForMultiColumnModels()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
// Check that a list view will only load items for the first
// column, even if the model reports that it got several columns.
// We test this since QQmlDelegateModel has been changed to
@@ -1895,7 +1907,6 @@ void tst_QQuickListView::checkCountForMultiColumnModels()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -2032,6 +2043,8 @@ void tst_QQuickListView::enforceRange_withoutHighlight()
void tst_QQuickListView::spacing()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
QaimModel model;
@@ -2041,7 +2054,6 @@ void tst_QQuickListView::spacing()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -2309,7 +2321,7 @@ void tst_QQuickListView::sectionsDragOutsideBounds()
QFETCH(int, cacheBuffer);
QQuickView *window = getView();
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickViewTestUtils::moveMouseAway(window);
QaimModel model;
for (int i = 0; i < 10; i++)
@@ -2962,8 +2974,8 @@ void tst_QQuickListView::keyNavigation()
for (int i = 0; i < 30; i++)
model.addItem("Item" + QString::number(i), "");
- QQuickView *window = getView();
QScopedPointer<TestObject> testObject(new TestObject);
+ QQuickView *window = getView();
window->rootContext()->setContextProperty("testModel", &model);
window->rootContext()->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -3167,6 +3179,8 @@ void tst_QQuickListView::itemListFlicker()
void tst_QQuickListView::cacheBuffer()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
QaimModel model;
@@ -3176,7 +3190,6 @@ void tst_QQuickListView::cacheBuffer()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -3269,6 +3282,8 @@ void tst_QQuickListView::cacheBuffer()
void tst_QQuickListView::positionViewAtBeginningEnd()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
QaimModel model;
@@ -3278,7 +3293,6 @@ void tst_QQuickListView::positionViewAtBeginningEnd()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->show();
window->setSource(testFileUrl("listviewtest.qml"));
@@ -3327,6 +3341,8 @@ void tst_QQuickListView::positionViewAtIndex()
QFETCH(QQuickListView::PositionMode, mode);
QFETCH(qreal, contentY);
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QQuickView *window = getView();
QaimModel model;
@@ -3336,7 +3352,6 @@ void tst_QQuickListView::positionViewAtIndex()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->show();
window->setSource(testFileUrl("listviewtest.qml"));
@@ -3676,6 +3691,8 @@ void tst_QQuickListView::manualHighlight()
void tst_QQuickListView::QTBUG_11105()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
QaimModel model;
for (int i = 0; i < 30; i++)
@@ -3684,7 +3701,6 @@ void tst_QQuickListView::QTBUG_11105()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -4346,6 +4362,8 @@ void tst_QQuickListView::resetModel_headerFooter()
void tst_QQuickListView::resizeView()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
QaimModel model;
for (int i = 0; i < 40; i++)
@@ -4354,7 +4372,6 @@ void tst_QQuickListView::resizeView()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -4455,6 +4472,8 @@ void tst_QQuickListView::resizeViewAndRepaint()
void tst_QQuickListView::sizeLessThan1()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
QaimModel model;
@@ -4464,7 +4483,6 @@ void tst_QQuickListView::sizeLessThan1()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("sizelessthan1.qml"));
@@ -4585,6 +4603,8 @@ void tst_QQuickListView::resizeFirstDelegate()
{
// QTBUG-20712: Content Y jumps constantly if first delegate height == 0
// and other delegates have height > 0
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QScopedPointer<QQuickView> window(createView());
// bug only occurs when all items in the model are visible
@@ -4595,7 +4615,6 @@ void tst_QQuickListView::resizeFirstDelegate()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -4793,6 +4812,8 @@ void tst_QQuickListView::indexAt_itemAt()
QFETCH(qreal, y);
QFETCH(int, index);
+ QScopedPointer<TestObject> testObject(new TestObject);
+
QQuickView *window = getView();
QaimModel model;
@@ -4802,7 +4823,6 @@ void tst_QQuickListView::indexAt_itemAt()
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("testModel", &model);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("listviewtest.qml"));
@@ -5170,7 +5190,7 @@ void tst_QQuickListView::marginsResize()
QQuickView *window = getView();
window->setSource(testFileUrl("margins2.qml"));
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickViewTestUtils::moveMouseAway(window);
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window));
@@ -5306,7 +5326,7 @@ void tst_QQuickListView::snapToItem()
QFETCH(qreal, startExtent);
QQuickView *window = getView();
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickViewTestUtils::moveMouseAway(window);
window->setSource(testFileUrl("snapToItem.qml"));
window->show();
@@ -5990,7 +6010,7 @@ void tst_QQuickListView::snapOneItemResize_QTBUG_43555()
QScopedPointer<QQuickView> window(createView());
window->resize(QSize(100, 320));
window->setResizeMode(QQuickView::SizeRootObjectToView);
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("snapOneItemResize.qml"));
window->show();
@@ -6304,7 +6324,7 @@ void tst_QQuickListView::snapOneItem()
qreal flickDuration = 180 * flickSlowdown;
QQuickView *window = getView();
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickViewTestUtils::moveMouseAway(window);
window->setSource(testFileUrl("snapOneItem.qml"));
window->show();
@@ -6670,8 +6690,8 @@ void tst_QQuickListView::populateTransitions()
model.addItem("item" + QString::number(i), "");
}
+ QScopedPointer<TestObject> testObject(new TestObject());
QQuickView *window = getView();
- QScopedPointer<TestObject> testObject(new TestObject(window->rootContext()));
window->rootContext()->setContextProperty("testModel", &model);
window->rootContext()->setContextProperty("testObject", testObject.data());
window->rootContext()->setContextProperty("usePopulateTransition", usePopulateTransition);
@@ -6794,12 +6814,12 @@ void tst_QQuickListView::populateTransitions_data()
void tst_QQuickListView::sizeTransitions()
{
QFETCH(bool, topToBottom);
+ QScopedPointer<TestObject> testObject(new TestObject);
QQuickView *window = getView();
QQmlContext *ctxt = window->rootContext();
QaimModel model;
ctxt->setContextProperty("testModel", &model);
ctxt->setContextProperty("topToBottom", topToBottom);
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testObject", &model);
window->setSource(testFileUrl("sizeTransitions.qml"));
window->show();
@@ -6854,9 +6874,9 @@ void tst_QQuickListView::addTransitions()
QaimModel model_targetItems_transitionFrom;
QaimModel model_displacedItems_transitionVia;
+ QScopedPointer<TestObject> testObject(new TestObject);
QQuickView *window = getView();
QQmlContext *ctxt = window->rootContext();
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testModel", &model);
ctxt->setContextProperty("model_targetItems_transitionFrom", &model_targetItems_transitionFrom);
ctxt->setContextProperty("model_displacedItems_transitionVia", &model_displacedItems_transitionVia);
@@ -7049,9 +7069,9 @@ void tst_QQuickListView::moveTransitions()
QaimModel model_targetItems_transitionVia;
QaimModel model_displacedItems_transitionVia;
+ QScopedPointer<TestObject> testObject(new TestObject);
QQuickView *window = getView();
QQmlContext *ctxt = window->rootContext();
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testModel", &model);
ctxt->setContextProperty("model_targetItems_transitionVia", &model_targetItems_transitionVia);
ctxt->setContextProperty("model_displacedItems_transitionVia", &model_displacedItems_transitionVia);
@@ -7251,9 +7271,9 @@ void tst_QQuickListView::removeTransitions()
QaimModel model_targetItems_transitionTo;
QaimModel model_displacedItems_transitionVia;
+ QScopedPointer<TestObject> testObject(new TestObject);
QQuickView *window = getView();
QQmlContext *ctxt = window->rootContext();
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testModel", &model);
ctxt->setContextProperty("model_targetItems_transitionTo", &model_targetItems_transitionTo);
ctxt->setContextProperty("model_displacedItems_transitionVia", &model_displacedItems_transitionVia);
@@ -7449,9 +7469,9 @@ void tst_QQuickListView::displacedTransitions()
QPointF moveDisplaced_transitionVia(50, -100);
QPointF removeDisplaced_transitionVia(150, 100);
+ QScopedPointer<TestObject> testObject(new TestObject());
QQuickView *window = getView();
QQmlContext *ctxt = window->rootContext();
- QScopedPointer<TestObject> testObject(new TestObject(window));
ctxt->setContextProperty("testModel", &model);
ctxt->setContextProperty("testObject", testObject.data());
ctxt->setContextProperty("model_displaced_transitionVia", &model_displaced_transitionVia);
@@ -7675,9 +7695,9 @@ void tst_QQuickListView::multipleTransitions()
for (int i = 0; i < initialCount; i++)
model.addItem("Original item" + QString::number(i), "");
+ QScopedPointer<TestObject> testObject(new TestObject);
QQuickView *window = getView();
QQmlContext *ctxt = window->rootContext();
- QScopedPointer<TestObject> testObject(new TestObject);
ctxt->setContextProperty("testModel", &model);
ctxt->setContextProperty("testObject", testObject.data());
ctxt->setContextProperty("addTargets_transitionFrom", addTargets_transitionFrom);
@@ -7842,9 +7862,9 @@ void tst_QQuickListView::multipleDisplaced()
for (int i = 0; i < 30; i++)
model.addItem("Original item" + QString::number(i), "");
+ QScopedPointer<TestObject> testObject(new TestObject());
QQuickView *window = getView();
QQmlContext *ctxt = window->rootContext();
- QScopedPointer<TestObject> testObject(new TestObject(window));
ctxt->setContextProperty("testModel", &model);
ctxt->setContextProperty("testObject", testObject.data());
window->setSource(testFileUrl("multipleDisplaced.qml"));
@@ -7939,7 +7959,7 @@ void tst_QQuickListView::matchItemLists(const QVariantList &itemLists, const QLi
void tst_QQuickListView::flickBeyondBounds()
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("flickBeyondBoundsBug.qml"));
window->show();
@@ -7981,7 +8001,7 @@ void tst_QQuickListView::flickBothDirections()
QFETCH(QPointF, targetPos);
QQuickView *window = getView();
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickViewTestUtils::moveMouseAway(window);
QQmlContext *ctxt = window->rootContext();
ctxt->setContextProperty("initialOrientation", initValues ? orientation : QQuickListView::Vertical);
@@ -8154,7 +8174,7 @@ void tst_QQuickListView::delayedChanges_QTBUG_30555()
void tst_QQuickListView::outsideViewportChangeNotAffectingView()
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("outsideViewportChangeNotAffectingView.qml"));
QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>();
@@ -8188,7 +8208,7 @@ void tst_QQuickListView::outsideViewportChangeNotAffectingView()
void tst_QQuickListView::testProxyModelChangedAfterMove()
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("proxytest.qml"));
QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>();
@@ -9463,7 +9483,7 @@ void tst_QQuickListView::QTBUG_66163_setModelViewPortSizeChange()
delegate: Rectangle {
color: index % 2 ? "green" : "orange"
- width: parent.width
+ width: view.width
height: 50
}
@@ -9515,8 +9535,8 @@ void tst_QQuickListView::itemFiltered()
QScopedPointer<QQuickView> window(createView());
window->engine()->rootContext()->setContextProperty("_model", &proxy2);
QQmlComponent component(window->engine());
- component.setData("import QtQuick 2.4; ListView { "
- "anchors.fill: parent; model: _model; delegate: Text { width: parent.width;"
+ component.setData("import QtQuick 2.4; ListView { id: listView; "
+ "anchors.fill: parent; model: _model; delegate: Text { width: listView.width;"
"text: model.display; } }",
QUrl());
window->setContent(QUrl(), &component, component.create());
@@ -9799,12 +9819,24 @@ void tst_QQuickListView::delegateWithRequiredProperties()
void tst_QQuickListView::reuse_reuseIsOffByDefault()
{
+ QScopedPointer<TestObject> testObject(new TestObject);
+
// Check that delegate recycling is off by default. The reason is that
// ListView needs to be backwards compatible with legacy applications. And
// when using delegate recycling, there are certain differences, like that
// a delegates Component.onCompleted will just be called the first time the
// item is created, and not when it's reused.
QScopedPointer<QQuickView> window(createView());
+
+ QaimModel model;
+ for (int i = 0; i < 40; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QQmlContext *ctxt = window->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ ctxt->setContextProperty("testObject", testObject.data());
+
window->setSource(testFileUrl("listviewtest.qml"));
window->resize(640, 480);
window->show();
@@ -9918,7 +9950,7 @@ void tst_QQuickListView::reuse_checkThatItemsAreReused()
void tst_QQuickListView::dragOverFloatingHeaderOrFooter() // QTBUG-74046
{
QQuickView *window = getView();
- QQuickViewTestUtil::moveMouseAway(window);
+ QQuickViewTestUtils::moveMouseAway(window);
window->setSource(testFileUrl("qtbug63974.qml"));
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window));
diff --git a/tests/auto/quick/qquicklistview2/BLACKLIST b/tests/auto/quick/qquicklistview2/BLACKLIST
new file mode 100644
index 0000000000..52b0231815
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/BLACKLIST
@@ -0,0 +1,9 @@
+[tapDelegateDuringFlicking]
+android # QTBUG-104471
+[flickDuringFlicking]
+android # QTBUG-104471
+
+# QTBUG-104509
+[DragAndOvershootBounds]
+android
+
diff --git a/tests/auto/quick/qquicklistview2/CMakeLists.txt b/tests/auto/quick/qquicklistview2/CMakeLists.txt
index 8cad53c0d2..1a84ae15b1 100644
--- a/tests/auto/quick/qquicklistview2/CMakeLists.txt
+++ b/tests/auto/quick/qquicklistview2/CMakeLists.txt
@@ -6,15 +6,8 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicklistview2
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
+ typerolemodel.h typerolemodel.cpp
tst_qquicklistview2.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,9 +16,15 @@ qt_internal_add_test(tst_qquicklistview2
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
+qt6_add_qml_module(tst_qquicklistview2
+ URI TestQQuickListViewTwo
+ VERSION 1.0
+)
+
qt_internal_extend_target(tst_qquicklistview2 CONDITION ANDROID OR IOS
DEFINES
QT_QMLTEST_DATADIR=\\\":/data\\\"
diff --git a/tests/auto/quick/qquicklistview2/data/buttonDelegate.qml b/tests/auto/quick/qquicklistview2/data/buttonDelegate.qml
new file mode 100644
index 0000000000..a40ba1cd7e
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/buttonDelegate.qml
@@ -0,0 +1,27 @@
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+
+ListView {
+ id: root
+ width: 320
+ height: 480
+ model: 100
+
+ property var pressedDelegates: []
+ property var releasedDelegates: []
+ property var tappedDelegates: []
+ property var canceledDelegates: []
+
+ delegate: Button {
+ required property int index
+ objectName: text
+ text: "button " + index
+ height: 100
+ width: 320
+
+ onPressed: root.pressedDelegates.push(index)
+ onReleased: root.releasedDelegates.push(index)
+ onClicked: root.tappedDelegates.push(index)
+ onCanceled: root.canceledDelegates.push(index)
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/delegateChooserEnumRole.qml b/tests/auto/quick/qquicklistview2/data/delegateChooserEnumRole.qml
new file mode 100644
index 0000000000..ec842468d2
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/delegateChooserEnumRole.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import Qt.labs.qmlmodels
+import TestQQuickListViewTwo
+
+ListView {
+ width: 300; height: 300
+ model: TypeRoleModel {}
+ delegate: DelegateChooser {
+ role: "type"
+ DelegateChoice {
+ roleValue: 0
+ Text {
+ property int delegateType: 0
+ text: model.text + " of type " + model.type
+ }
+ }
+ DelegateChoice {
+ roleValue: "Markdown"
+ Text {
+ property int delegateType: 1
+ text: model.text + " of **type** " + model.type
+ textFormat: Text.MarkdownText
+ }
+ }
+ DelegateChoice {
+ roleValue: TypeRoleModel.Rect
+ Rectangle {
+ property int delegateType: 2
+ width: 300; height: 20
+ color: "wheat"
+ Text {
+ text: model.text + " of type " + model.type
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/delegateModelRefresh.qml b/tests/auto/quick/qquicklistview2/data/delegateModelRefresh.qml
new file mode 100644
index 0000000000..8c16ed64ce
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/delegateModelRefresh.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQml.Models
+
+ApplicationWindow {
+ id: window
+ visible: true
+ width: 400
+ height: 800
+ property bool done: false
+
+ ListView {
+ model: delegateModel
+ anchors.fill: parent
+ }
+
+ DelegateModel {
+ id: delegateModel
+ model: ListModel {
+ ListElement {
+ available: true
+ }
+ ListElement {
+ available: true
+ }
+ ListElement {
+ available: true
+ }
+ }
+
+ Component.onCompleted: {
+ delegateModel.refresh()
+ done = true;
+ }
+ function refresh() {
+ var rowCount = delegateModel.model.count;
+ const flatItemsList = []
+ for (var i = 0; i < rowCount; i++) {
+ var entry = delegateModel.model.get(i);
+ flatItemsList.push(entry)
+ }
+
+ for (i = 0; i < flatItemsList.length; ++i) {
+ var item = flatItemsList[i]
+ if (item !== null)
+ items.insert(item)
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/delegateWithMouseArea.qml b/tests/auto/quick/qquicklistview2/data/delegateWithMouseArea.qml
new file mode 100644
index 0000000000..92a6963962
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/delegateWithMouseArea.qml
@@ -0,0 +1,120 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+
+Rectangle {
+
+ width: 240
+ height: 320
+ color: "#ffffff"
+
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ width: list.orientation == ListView.Vertical ? 240 : 20
+ height: list.orientation == ListView.Vertical ? 20 : 240
+ border.width: 1
+ border.color: "black"
+ MouseArea {
+ anchors.fill: parent
+ }
+ Text {
+ text: index + ":" + (list.orientation == ListView.Vertical ? parent.y : parent.x).toFixed(0)
+ }
+ color: ListView.isCurrentItem ? "lightsteelblue" : "white"
+ }
+ }
+
+ ListView {
+ id: list
+ objectName: "list"
+ focus: true
+ width: 240
+ height: 200
+ clip: true
+ model: 30
+ headerPositioning: ListView.OverlayHeader
+ delegate: myDelegate
+
+ header: Rectangle {
+ width: list.orientation == Qt.Vertical ? 240 : 30
+ height: list.orientation == Qt.Vertical ? 30 : 240
+ color: "green"
+ z: 11
+ Text {
+ anchors.centerIn: parent
+ text: "header " + (list.orientation == ListView.Vertical ? parent.y : parent.x).toFixed(1)
+ }
+ }
+ }
+
+ // debug
+ Rectangle {
+ color: "#40ff0000"
+ border.width: txt.x
+ border.color: "black"
+ radius: 5
+ width: txt.implicitWidth + 50
+ height: txt.implicitHeight + 2 * txt.x
+ anchors.bottom: parent.bottom
+ anchors.right: parent.right
+ anchors.left: parent.left
+
+ Text {
+ id: txt
+ x: 3
+ y: x
+ text: "header position: " + (list.orientation == ListView.Vertical ? list.headerItem.y : list.headerItem.x).toFixed(1)
+ + "\ncontent position: " + (list.orientation == ListView.Vertical ? list.contentY : list.contentX).toFixed(1)
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/footerUpdate.qml b/tests/auto/quick/qquicklistview2/data/footerUpdate.qml
new file mode 100644
index 0000000000..5d4dfad7fa
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/footerUpdate.qml
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+
+Rectangle {
+ id: root
+ width: 800
+ height: 800
+ Component.onCompleted: { list.model.remove(0); }
+ ListView {
+ id: list
+ objectName: "list"
+ anchors.fill: parent
+ model: ListModel {
+ ListElement {
+ txt: "Foo"
+ }
+ }
+ delegate: Rectangle {
+ id: myDelegate
+ color: "red"
+ width: 800
+ height: 100
+ ListView.onRemove: SequentialAnimation {
+ PropertyAction { target: myDelegate; property: "ListView.delayRemove"; value: true }
+ NumberAnimation { target: myDelegate; property: "scale"; to: 0; duration: 1; }
+ PropertyAction { target: myDelegate; property: "ListView.delayRemove"; value: false }
+ }
+
+ }
+ footer: Rectangle {
+ id: listFooter
+ color: "blue"
+ width: 800
+ height: 100
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/mouseAreaDelegate.qml b/tests/auto/quick/qquicklistview2/data/mouseAreaDelegate.qml
new file mode 100644
index 0000000000..ad556913a5
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/mouseAreaDelegate.qml
@@ -0,0 +1,30 @@
+import QtQuick 2.15
+
+ListView {
+ id: root
+ width: 320
+ height: 480
+ model: 100
+
+ property var pressedDelegates: []
+ property var releasedDelegates: []
+ property var tappedDelegates: []
+ property var canceledDelegates: []
+
+ delegate: MouseArea {
+ height: 100
+ width: 320
+
+ onPressed: root.pressedDelegates.push(index)
+ onReleased: root.releasedDelegates.push(index)
+ onClicked: root.tappedDelegates.push(index)
+ onCanceled: root.canceledDelegates.push(index)
+
+ Rectangle {
+ id: buttonArea
+ anchors.fill: parent
+ border.color: "#41cd52"
+ color: parent.pressed ? "lightsteelblue" : "beige"
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/noCrashOnIndexChange.qml b/tests/auto/quick/qquicklistview2/data/noCrashOnIndexChange.qml
new file mode 100644
index 0000000000..6065d09981
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/noCrashOnIndexChange.qml
@@ -0,0 +1,48 @@
+import QtQuick
+import QtQml.Models
+
+Item {
+ ListModel {
+ id: myModel
+ ListElement { role_display: "One"; role_value: 0; }
+ ListElement { role_display: "One"; role_value: 2; }
+ ListElement { role_display: "One"; role_value: 3; }
+ ListElement { role_display: "One"; role_value: 4; }
+ ListElement { role_details: "Two"; role_value: 5; }
+ ListElement { role_details: "Three"; role_value: 6; }
+ ListElement { role_details: "Four"; role_value: 7; }
+ ListElement { role_details: "Five"; role_value: 8; }
+ ListElement { role_details: "Six"; role_value: 9; }
+ ListElement { role_keyID: "Seven"; role_value: 10; }
+ ListElement { role_keyID: "Eight"; role_value: 11; }
+ ListElement { role_keyID: "hello"; role_value: 12; }
+ }
+
+ DelegateModel {
+ id: displayDelegateModel
+ delegate: Text { text: role_display }
+ model: myModel
+ groups: [
+ DelegateModelGroup {
+ includeByDefault: false
+ name: "displayField"
+ }
+ ]
+ filterOnGroup: "displayField"
+ Component.onCompleted: {
+ var rowCount = myModel.count;
+ items.remove(0, rowCount);
+ for (var i = 0; i < rowCount; i++) {
+ var entry = myModel.get(i);
+ if (entry.role_display) {
+ items.insert(entry, "displayField");
+ }
+ }
+ }
+ }
+
+ ListView {
+ model: displayDelegateModel
+ }
+}
+
diff --git a/tests/auto/quick/qquicklistview2/data/qtbug86744.qml b/tests/auto/quick/qquicklistview2/data/qtbug86744.qml
new file mode 100644
index 0000000000..c69a4f7ec6
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/qtbug86744.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQml.Models
+
+Item {
+ height: 200
+ width: 100
+ DelegateModel {
+ id: dm
+ model: 2
+ delegate: Item {
+ width: 100
+ height: 20
+ property bool isCurrent: ListView.isCurrentItem
+ }
+ }
+ ListView {
+ objectName: "listView"
+ model: dm
+ currentIndex: 1
+ anchors.fill: parent
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/qtbug98315.qml b/tests/auto/quick/qquicklistview2/data/qtbug98315.qml
new file mode 100644
index 0000000000..bf2ed857b1
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/qtbug98315.qml
@@ -0,0 +1,98 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQml.Models
+
+Item {
+ width: 500
+ height: 200
+
+ property list<QtObject> myModel: [
+ QtObject {
+ objectName: "Item 0"
+ property bool selected: true
+ },
+ QtObject {
+ objectName: "Item 1"
+ property bool selected: false
+ },
+ QtObject {
+ objectName: "Item 2"
+ property bool selected: false
+ },
+ QtObject {
+ objectName: "Item 3"
+ property bool selected: true
+ },
+ QtObject {
+ objectName: "Item 4"
+ property bool selected: true
+ },
+ QtObject {
+ objectName: "Item 5"
+ property bool selected: true
+ },
+ QtObject {
+ objectName: "Item 6"
+ property bool selected: false
+ }
+ ]
+
+ ListView {
+ objectName: "listView"
+ id: listview
+ width: 500
+ height: 200
+
+ focus: true
+ clip: true
+ spacing: 2
+ orientation: ListView.Horizontal
+ highlightMoveDuration: 300
+ highlightMoveVelocity: -1
+ preferredHighlightBegin: (500 - 100) / 2
+ preferredHighlightEnd: (500 + 100) / 2
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ cacheBuffer: 500
+ currentIndex: 1
+
+ model: DelegateModel {
+ id: delegateModel
+ filterOnGroup: "visible"
+ model: myModel
+ groups: [
+ DelegateModelGroup {
+ name: "visible"
+ includeByDefault: true
+ }
+ ]
+ delegate: Rectangle {
+ id: tile
+ objectName: model.modelData.objectName
+
+ width: 100
+ height: 100
+ border.width: 0
+ anchors.verticalCenter: parent.verticalCenter
+
+ visible: model.modelData.selected
+ Component.onCompleted: {
+ DelegateModel.inPersistedItems = true
+ DelegateModel.inVisible = Qt.binding(function () {
+ return model.modelData.selected
+ })
+ }
+
+ property bool isCurrent: ListView.isCurrentItem
+ color: isCurrent ? "red" : "green"
+
+ Text {
+ id: valueText
+ anchors.centerIn: parent
+ text: model.modelData.objectName
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/qtbug_92809.qml b/tests/auto/quick/qquicklistview2/data/qtbug_92809.qml
new file mode 100644
index 0000000000..8a995c012d
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/qtbug_92809.qml
@@ -0,0 +1,118 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+
+Rectangle {
+ id: root
+ width: 800
+ height: 480
+
+ property list<QtObject> myModel: [
+ QtObject { property string name: "Item 0"; property bool selected: true },
+ QtObject { property string name: "Item 1"; property bool selected: true },
+ QtObject { property string name: "Item 2"; property bool selected: true },
+ QtObject { property string name: "Item 3"; property bool selected: true },
+ QtObject { property string name: "Item 4"; property bool selected: true },
+ QtObject { property string name: "Item 5"; property bool selected: true },
+ QtObject { property string name: "Item 6"; property bool selected: true },
+ QtObject { property string name: "Item 7"; property bool selected: true },
+ QtObject { property string name: "Item 8"; property bool selected: true },
+ QtObject { property string name: "Item 9"; property bool selected: true },
+ QtObject { property string name: "Press Enter here"; property bool selected: true }
+ ]
+
+ DelegateModel {
+ objectName: "model"
+ id: visualModel
+ model: myModel
+ filterOnGroup: "selected"
+
+ groups: [
+ DelegateModelGroup {
+ name: "selected"
+ includeByDefault: true
+ }
+ ]
+
+ delegate: Rectangle {
+ width: 180
+ height: 180
+ visible: DelegateModel.inSelected
+ color: ListView.isCurrentItem ? "orange" : "yellow"
+ Component.onCompleted: {
+ DelegateModel.inPersistedItems = true
+ DelegateModel.inSelected = Qt.binding(function() { return model.selected })
+ }
+ }
+ }
+
+ ListView {
+ objectName: "list"
+ anchors.fill: parent
+ spacing: 180/15
+ orientation: ListView.Horizontal
+ model: visualModel
+ focus: true
+ currentIndex: 0
+ preferredHighlightBegin: (width-180)/2
+ preferredHighlightEnd: (width+180)/2
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ highlightMoveDuration: 300
+ highlightMoveVelocity: -1
+ cacheBuffer: 0
+
+ onCurrentIndexChanged: {
+ if (currentIndex === 10) {
+ myModel[6].selected = !myModel[6].selected
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicklistview2/data/singletonModelLifetime.qml b/tests/auto/quick/qquicklistview2/data/singletonModelLifetime.qml
new file mode 100644
index 0000000000..f230786723
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/data/singletonModelLifetime.qml
@@ -0,0 +1,32 @@
+import QtQuick 2.15
+import QtQuick.Window 2.15
+import test 1.0
+
+Window {
+ id: root
+ visible: true
+ width: 800
+ height: 680
+ property bool alive: false
+
+ Component {
+ id: view
+ ListView {
+ model: SingletonModel
+ }
+ }
+ function compare(a,b) {
+ root.alive = (a === b)
+ }
+
+ function test_singletonModelCrash() {
+ SingletonModel.objectName = "model"
+ var o = view.createObject(root)
+ o.destroy()
+ Qt.callLater(function() {
+ compare(SingletonModel.objectName, "model")
+ })
+ }
+
+ Component.onCompleted: root.test_singletonModelCrash()
+}
diff --git a/tests/auto/quick/qquicklistview2/tst_qquicklistview2.cpp b/tests/auto/quick/qquicklistview2/tst_qquicklistview2.cpp
index c9c7769182..4c6f9c70e2 100644
--- a/tests/auto/quick/qquicklistview2/tst_qquicklistview2.cpp
+++ b/tests/auto/quick/qquicklistview2/tst_qquicklistview2.cpp
@@ -31,12 +31,17 @@
#include <QtQuick/private/qquickitemview_p_p.h>
#include <QtQuick/private/qquicklistview_p.h>
#include <QtQuickTest/QtQuickTest>
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
-#include "../../shared/util.h"
+#include <QStringListModel>
+#include <QQmlApplicationEngine>
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+
+Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
+
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
class tst_QQuickListView2 : public QQmlDataTest
{
@@ -46,9 +51,28 @@ public:
private slots:
void urlListModel();
+ void dragDelegateWithMouseArea_data();
+ void dragDelegateWithMouseArea();
+ void delegateChooserEnumRole();
+ void QTBUG_92809();
+ void footerUpdate();
+ void singletonModelLifetime();
+ void delegateModelRefresh();
+ void noCrashOnIndexChange();
+ void tapDelegateDuringFlicking_data();
+ void tapDelegateDuringFlicking();
+ void flickDuringFlicking_data();
+ void flickDuringFlicking();
+ void isCurrentItem_DelegateModel();
+ void isCurrentItem_NoRegressionWithDelegateModelGroups();
+
+private:
+ void flickWithTouch(QQuickWindow *window, const QPoint &from, const QPoint &to);
+ QScopedPointer<QPointingDevice> touchDevice = QScopedPointer<QPointingDevice>(QTest::createTouchDevice());
};
tst_QQuickListView2::tst_QQuickListView2()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -71,6 +95,375 @@ void tst_QQuickListView2::urlListModel()
QCOMPARE(view->count(), model.size());
}
+static void dragListView(QWindow *window, QPoint *startPos, const QPoint &delta)
+{
+ auto drag_helper = [&](QWindow *window, QPoint *startPos, const QPoint &d) {
+ QPoint pos = *startPos;
+ const int dragDistance = d.manhattanLength();
+ const QPoint unitVector(qBound(-1, d.x(), 1), qBound(-1, d.y(), 1));
+ for (int i = 0; i < dragDistance; ++i) {
+ QTest::mouseMove(window, pos);
+ pos += unitVector;
+ }
+ // Move to the final position
+ pos = *startPos + d;
+ QTest::mouseMove(window, pos);
+ *startPos = pos;
+ };
+
+ if (delta.manhattanLength() == 0)
+ return;
+ const int dragThreshold = QGuiApplication::styleHints()->startDragDistance();
+ const QPoint unitVector(qBound(-1, delta.x(), 1), qBound(-1, delta.y(), 1));
+ // go just beyond the drag theshold
+ drag_helper(window, startPos, unitVector * (dragThreshold + 1));
+ drag_helper(window, startPos, unitVector);
+
+ // next drag will actually scroll the listview
+ drag_helper(window, startPos, delta);
+}
+
+void tst_QQuickListView2::dragDelegateWithMouseArea_data()
+{
+ QTest::addColumn<QQuickItemView::LayoutDirection>("layoutDirection");
+
+ for (int layDir = QQuickItemView::LeftToRight; layDir <= (int)QQuickItemView::VerticalBottomToTop; layDir++) {
+ const char *enumValueName = QMetaEnum::fromType<QQuickItemView::LayoutDirection>().valueToKey(layDir);
+ QTest::newRow(enumValueName) << static_cast<QQuickItemView::LayoutDirection>(layDir);
+ }
+}
+
+void tst_QQuickListView2::dragDelegateWithMouseArea()
+{
+ QFETCH(QQuickItemView::LayoutDirection, layoutDirection);
+
+ QScopedPointer<QQuickView> window(createView());
+ QVERIFY(window);
+ window->setFlag(Qt::FramelessWindowHint);
+ window->setSource(testFileUrl("delegateWithMouseArea.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list");
+ QVERIFY(listview != nullptr);
+
+ const bool horizontal = layoutDirection < QQuickItemView::VerticalTopToBottom;
+ listview->setOrientation(horizontal ? QQuickListView::Horizontal : QQuickListView::Vertical);
+
+ if (horizontal)
+ listview->setLayoutDirection(static_cast<Qt::LayoutDirection>(layoutDirection));
+ else
+ listview->setVerticalLayoutDirection(static_cast<QQuickItemView::VerticalLayoutDirection>(layoutDirection));
+
+ QVERIFY(QQuickTest::qWaitForItemPolished(listview));
+
+ auto contentPosition = [&](QQuickListView *listview) {
+ return (listview->orientation() == QQuickListView::Horizontal ? listview->contentX(): listview->contentY());
+ };
+
+ qreal expectedContentPosition = contentPosition(listview);
+ QPoint startPos = (QPointF(listview->width(), listview->height())/2).toPoint();
+ QTest::mousePress(window.data(), Qt::LeftButton, Qt::NoModifier, startPos, 200);
+
+ QPoint dragDelta(0, -10);
+
+ if (layoutDirection == QQuickItemView::RightToLeft || layoutDirection == QQuickItemView::VerticalBottomToTop)
+ dragDelta = -dragDelta;
+ expectedContentPosition -= dragDelta.y();
+ if (horizontal)
+ dragDelta = dragDelta.transposed();
+
+ dragListView(window.data(), &startPos, dragDelta);
+
+ QTest::mouseRelease(window.data(), Qt::LeftButton, Qt::NoModifier, startPos, 200); // Wait 200 ms before we release to avoid trigger a flick
+
+ // wait for the "fixup" animation to finish
+ QVERIFY(QTest::qWaitFor([&]()
+ { return !listview->isMoving();}
+ ));
+
+ QCOMPARE(contentPosition(listview), expectedContentPosition);
+}
+
+
+void tst_QQuickListView2::delegateChooserEnumRole()
+{
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("delegateChooserEnumRole.qml")));
+ QQuickListView *listview = qobject_cast<QQuickListView*>(window.rootObject());
+ QVERIFY(listview);
+ QTRY_COMPARE(listview->count(), 3);
+ QCOMPARE(listview->itemAtIndex(0)->property("delegateType").toInt(), 0);
+ QCOMPARE(listview->itemAtIndex(1)->property("delegateType").toInt(), 1);
+ QCOMPARE(listview->itemAtIndex(2)->property("delegateType").toInt(), 2);
+}
+
+void tst_QQuickListView2::QTBUG_92809()
+{
+ QScopedPointer<QQuickView> window(createView());
+ QTRY_VERIFY(window);
+ window->setSource(testFileUrl("qtbug_92809.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list");
+ QTRY_VERIFY(listview != nullptr);
+ QVERIFY(QQuickTest::qWaitForItemPolished(listview));
+ listview->setCurrentIndex(1);
+ QVERIFY(QQuickTest::qWaitForItemPolished(listview));
+ listview->setCurrentIndex(2);
+ QVERIFY(QQuickTest::qWaitForItemPolished(listview));
+ listview->setCurrentIndex(3);
+ QVERIFY(QQuickTest::qWaitForItemPolished(listview));
+ QTest::qWait(500);
+ listview->setCurrentIndex(10);
+ QVERIFY(QQuickTest::qWaitForItemPolished(listview));
+ QTest::qWait(500);
+ int currentIndex = listview->currentIndex();
+ QTRY_COMPARE(currentIndex, 9);
+}
+
+void tst_QQuickListView2::footerUpdate()
+{
+ QScopedPointer<QQuickView> window(createView());
+ QTRY_VERIFY(window);
+ window->setSource(testFileUrl("footerUpdate.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list");
+ QTRY_VERIFY(listview != nullptr);
+ QVERIFY(QQuickTest::qWaitForItemPolished(listview));
+ QQuickItem *footer = listview->footerItem();
+ QTRY_VERIFY(footer);
+ QVERIFY(QQuickTest::qWaitForItemPolished(footer));
+ QTRY_COMPARE(footer->y(), 0);
+}
+
+void tst_QQuickListView2::noCrashOnIndexChange()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("noCrashOnIndexChange.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+
+ QObject *delegateModel = qmlContext(o.data())->objectForName("displayDelegateModel");
+ QVERIFY(delegateModel);
+
+ QObject *items = qvariant_cast<QObject *>(delegateModel->property("items"));
+ QCOMPARE(items->property("name").toString(), QStringLiteral("items"));
+ QCOMPARE(items->property("count").toInt(), 4);
+}
+
+void tst_QQuickListView2::tapDelegateDuringFlicking_data()
+{
+ QTest::addColumn<QByteArray>("qmlFile");
+ QTest::addColumn<QQuickFlickable::BoundsBehavior>("boundsBehavior");
+
+ QTest::newRow("Button StopAtBounds") << QByteArray("buttonDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::StopAtBounds);
+ QTest::newRow("MouseArea StopAtBounds") << QByteArray("mouseAreaDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::StopAtBounds);
+ QTest::newRow("Button DragOverBounds") << QByteArray("buttonDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragOverBounds);
+ QTest::newRow("MouseArea DragOverBounds") << QByteArray("mouseAreaDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragOverBounds);
+ QTest::newRow("Button OvershootBounds") << QByteArray("buttonDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::OvershootBounds);
+ QTest::newRow("MouseArea OvershootBounds") << QByteArray("mouseAreaDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::OvershootBounds);
+ QTest::newRow("Button DragAndOvershootBounds") << QByteArray("buttonDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragAndOvershootBounds);
+ QTest::newRow("MouseArea DragAndOvershootBounds") << QByteArray("mouseAreaDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragAndOvershootBounds);
+}
+
+void tst_QQuickListView2::tapDelegateDuringFlicking() // QTBUG-103832
+{
+ QFETCH(QByteArray, qmlFile);
+ QFETCH(QQuickFlickable::BoundsBehavior, boundsBehavior);
+
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl(qmlFile.constData())));
+ QQuickListView *listView = qobject_cast<QQuickListView*>(window.rootObject());
+ QVERIFY(listView);
+ listView->setBoundsBehavior(boundsBehavior);
+
+ flickWithTouch(&window, {100, 400}, {100, 100});
+ QTRY_VERIFY(listView->contentY() > 501); // let it flick some distance
+ QVERIFY(listView->isFlicking()); // we want to test the case when it's still moving while we tap
+ // @y = 400 we pressed the 4th delegate; started flicking, and the press was canceled
+ QCOMPARE(listView->property("pressedDelegates").toList().first(), 4);
+ QCOMPARE(listView->property("canceledDelegates").toList().first(), 4);
+
+ // press a delegate during flicking (at y > 501 + 100, so likely delegate 6)
+ QTest::touchEvent(&window, touchDevice.data()).press(0, {100, 100});
+ QQuickTouchUtils::flush(&window);
+ QTest::touchEvent(&window, touchDevice.data()).release(0, {100, 100});
+ QQuickTouchUtils::flush(&window);
+
+ const QVariantList pressedDelegates = listView->property("pressedDelegates").toList();
+ const QVariantList releasedDelegates = listView->property("releasedDelegates").toList();
+ const QVariantList tappedDelegates = listView->property("tappedDelegates").toList();
+ const QVariantList canceledDelegates = listView->property("canceledDelegates").toList();
+
+ qCDebug(lcTests) << "pressed" << pressedDelegates; // usually [4, 6]
+ qCDebug(lcTests) << "released" << releasedDelegates;
+ qCDebug(lcTests) << "tapped" << tappedDelegates;
+ qCDebug(lcTests) << "canceled" << canceledDelegates;
+
+ // which delegate received the second press, during flicking?
+ const int lastPressed = pressedDelegates.last().toInt();
+ QVERIFY(lastPressed > 5);
+ QCOMPARE(releasedDelegates.last(), lastPressed);
+ QCOMPARE(tappedDelegates.last(), lastPressed);
+ QCOMPARE(canceledDelegates.count(), 1); // only the first press was canceled, not the second
+}
+
+void tst_QQuickListView2::flickDuringFlicking_data()
+{
+ QTest::addColumn<QByteArray>("qmlFile");
+ QTest::addColumn<QQuickFlickable::BoundsBehavior>("boundsBehavior");
+
+ QTest::newRow("Button StopAtBounds") << QByteArray("buttonDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::StopAtBounds);
+ QTest::newRow("MouseArea StopAtBounds") << QByteArray("mouseAreaDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::StopAtBounds);
+ QTest::newRow("Button DragOverBounds") << QByteArray("buttonDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragOverBounds);
+ QTest::newRow("MouseArea DragOverBounds") << QByteArray("mouseAreaDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragOverBounds);
+ QTest::newRow("Button OvershootBounds") << QByteArray("buttonDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::OvershootBounds);
+ QTest::newRow("MouseArea OvershootBounds") << QByteArray("mouseAreaDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::OvershootBounds);
+ QTest::newRow("Button DragAndOvershootBounds") << QByteArray("buttonDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragAndOvershootBounds);
+ QTest::newRow("MouseArea DragAndOvershootBounds") << QByteArray("mouseAreaDelegate.qml")
+ << QQuickFlickable::BoundsBehavior(QQuickFlickable::DragAndOvershootBounds);
+}
+
+void tst_QQuickListView2::flickDuringFlicking() // QTBUG-103832
+{
+ QFETCH(QByteArray, qmlFile);
+ QFETCH(QQuickFlickable::BoundsBehavior, boundsBehavior);
+
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl(qmlFile.constData())));
+ QQuickListView *listView = qobject_cast<QQuickListView*>(window.rootObject());
+ QVERIFY(listView);
+ listView->setBoundsBehavior(boundsBehavior);
+
+ flickWithTouch(&window, {100, 400}, {100, 100});
+ QTRY_VERIFY(listView->contentY() > 1000); // let it flick some distance
+ QVERIFY(listView->isFlicking()); // we want to test the case when it's moving and then we flick again
+ const qreal posBeforeSecondFlick = listView->contentY();
+
+ // flick again during flicking, and make sure that it doesn't jump back to the first delegate,
+ // but flicks incrementally further from the position at that time
+ QTest::touchEvent(&window, touchDevice.data()).press(0, {100, 400});
+ QQuickTouchUtils::flush(&window);
+ qCDebug(lcTests) << "second press: contentY" << posBeforeSecondFlick << "->" << listView->contentY();
+ qCDebug(lcTests) << "pressed delegates" << listView->property("pressedDelegates").toList();
+ QVERIFY(listView->contentY() >= posBeforeSecondFlick);
+
+ QTest::qWait(20);
+ QTest::touchEvent(&window, touchDevice.data()).move(0, {100, 300});
+ QQuickTouchUtils::flush(&window);
+ qCDebug(lcTests) << "first move after second press: contentY" << posBeforeSecondFlick << "->" << listView->contentY();
+ QVERIFY(listView->contentY() >= posBeforeSecondFlick);
+
+ QTest::qWait(20);
+ QTest::touchEvent(&window, touchDevice.data()).move(0, {100, 200});
+ QQuickTouchUtils::flush(&window);
+ qCDebug(lcTests) << "second move after second press: contentY" << posBeforeSecondFlick << "->" << listView->contentY();
+ QVERIFY(listView->contentY() >= posBeforeSecondFlick + 100);
+
+ QTest::touchEvent(&window, touchDevice.data()).release(0, {100, 100});
+}
+
+void tst_QQuickListView2::flickWithTouch(QQuickWindow *window, const QPoint &from, const QPoint &to)
+{
+ QTest::touchEvent(window, touchDevice.data()).press(0, from, window);
+ QQuickTouchUtils::flush(window);
+
+ QPoint diff = to - from;
+ for (int i = 1; i <= 8; ++i) {
+ QTest::touchEvent(window, touchDevice.data()).move(0, from + i * diff / 8, window);
+ QQuickTouchUtils::flush(window);
+ }
+ QTest::touchEvent(window, touchDevice.data()).release(0, to, window);
+ QQuickTouchUtils::flush(window);
+}
+
+class SingletonModel : public QStringListModel
+{
+ Q_OBJECT
+public:
+ SingletonModel(QObject* parent = nullptr) : QStringListModel(parent) { }
+};
+
+void tst_QQuickListView2::singletonModelLifetime()
+{
+ // this does not really test any functionality of listview, but we do not have a good way
+ // to unit test QQmlAdaptorModel in isolation.
+ qmlRegisterSingletonType<SingletonModel>("test", 1, 0, "SingletonModel",
+ [](QQmlEngine* , QJSEngine*) -> QObject* { return new SingletonModel; });
+
+ QQmlApplicationEngine engine(testFile("singletonModelLifetime.qml"));
+ // needs event loop iteration for callLater to execute
+ QTRY_VERIFY(engine.rootObjects().first()->property("alive").toBool());
+}
+
+void tst_QQuickListView2::delegateModelRefresh()
+{
+ // Test case originates from QTBUG-100161
+ QQmlApplicationEngine engine(testFile("delegateModelRefresh.qml"));
+ QVERIFY(!engine.rootObjects().isEmpty());
+ // needs event loop iteration for callLater to execute
+ QTRY_VERIFY(engine.rootObjects().first()->property("done").toBool());
+}
+
+void tst_QQuickListView2::isCurrentItem_DelegateModel()
+{
+ QScopedPointer<QQuickView> window(createView());
+ window->setSource(testFileUrl("qtbug86744.qml"));
+ window->resize(640, 480);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+ QQuickListView* listView = window->rootObject()->findChild<QQuickListView*>("listView");
+ QVERIFY(listView);
+ QVariant value = listView->itemAtIndex(1)->property("isCurrent");
+ QVERIFY(value.toBool() == true);
+}
+
+void tst_QQuickListView2::isCurrentItem_NoRegressionWithDelegateModelGroups()
+{
+ QScopedPointer<QQuickView> window(createView());
+ window->setSource(testFileUrl("qtbug98315.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+ QQuickListView* listView = window->rootObject()->findChild<QQuickListView*>("listView");
+ QVERIFY(listView);
+
+ QQuickItem *item3 = listView->itemAtIndex(1);
+ QVERIFY(item3);
+ QCOMPARE(item3->property("isCurrent").toBool(), true);
+
+ QObject *item0 = listView->itemAtIndex(0);
+ QVERIFY(item0);
+ QCOMPARE(item0->property("isCurrent").toBool(), false);
+
+ // Press left arrow key -> Item 1 should become current, Item 3 should not
+ // be current anymore. After a previous fix of QTBUG-86744 it was working
+ // incorrectly - see QTBUG-98315
+ QTest::keyPress(window.get(), Qt::Key_Left);
+
+ QTRY_COMPARE(item0->property("isCurrent").toBool(), true);
+ QCOMPARE(item3->property("isCurrent").toBool(), false);
+}
+
QTEST_MAIN(tst_QQuickListView2)
#include "tst_qquicklistview2.moc"
diff --git a/tests/auto/quick/qquicklistview2/typerolemodel.cpp b/tests/auto/quick/qquicklistview2/typerolemodel.cpp
new file mode 100644
index 0000000000..a7604f0ba5
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/typerolemodel.cpp
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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 "typerolemodel.h"
+
+TypeRoleModel::TypeRoleModel(QObject *parent)
+ : QAbstractListModel(parent)
+{
+ _mapRoleNames[TypeRole] = "type";
+ _mapRoleNames[TextRole] = "text";
+}
+
+int TypeRoleModel::rowCount(const QModelIndex &) const
+{
+ return 3;
+}
+
+QVariant TypeRoleModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return {};
+
+ constexpr Type types[] = {
+ Type::PlainText,
+ Type::Markdown,
+ Type::Rect
+ };
+ switch (role) {
+ case TypeRole: {
+ const Type type = types[index.row() % std::size(types)];
+ return QVariant::fromValue(type);
+ }
+ case TextRole: {
+ if (index.row() % std::size(types) == int(Type::Markdown))
+ return "*row* " + QString::number(index.row());
+ return "row " + QString::number(index.row());
+ }
+ }
+
+ return {};
+}
diff --git a/tests/auto/quick/qquicklistview2/typerolemodel.h b/tests/auto/quick/qquicklistview2/typerolemodel.h
new file mode 100644
index 0000000000..980484a044
--- /dev/null
+++ b/tests/auto/quick/qquicklistview2/typerolemodel.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** 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 <QAbstractListModel>
+#include <qqml.h>
+
+class TypeRoleModel : public QAbstractListModel
+{
+ Q_OBJECT
+ QML_ELEMENT
+
+public:
+ enum Role {
+ TypeRole = Qt::UserRole + 1,
+ TextRole,
+ };
+ Q_ENUM(Role)
+
+ enum class Type { PlainText, Markdown, Rect };
+ Q_ENUM(Type)
+
+ explicit TypeRoleModel(QObject *parent = nullptr);
+
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ QHash<int, QByteArray> roleNames() const override { return _mapRoleNames; }
+
+private:
+ QHash<int, QByteArray> _mapRoleNames;
+};
diff --git a/tests/auto/quick/qquickloader/BLACKLIST b/tests/auto/quick/qquickloader/BLACKLIST
index 30c02e4c13..a45a300607 100644
--- a/tests/auto/quick/qquickloader/BLACKLIST
+++ b/tests/auto/quick/qquickloader/BLACKLIST
@@ -2,5 +2,3 @@
# QTBUG-63049
[asyncToSync1]
b2qt
-[urlToComponent]
-macos
diff --git a/tests/auto/quick/qquickloader/CMakeLists.txt b/tests/auto/quick/qquickloader/CMakeLists.txt
index 785d5348a6..e27ff0a57b 100644
--- a/tests/auto/quick/qquickloader/CMakeLists.txt
+++ b/tests/auto/quick/qquickloader/CMakeLists.txt
@@ -12,16 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickloader
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickloader.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -29,6 +20,7 @@ qt_internal_add_test(tst_qquickloader
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickloader/data/loader-async-race-rect.qml b/tests/auto/quick/qquickloader/data/loader-async-race-rect.qml
new file mode 100644
index 0000000000..a56dcea5ad
--- /dev/null
+++ b/tests/auto/quick/qquickloader/data/loader-async-race-rect.qml
@@ -0,0 +1,10 @@
+import QtQuick 2.15
+
+Rectangle {
+ anchors.fill: parent
+ color: "blue"
+ Item {
+ Item {
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickloader/data/loader-async-race.qml b/tests/auto/quick/qquickloader/data/loader-async-race.qml
new file mode 100644
index 0000000000..8ba625c5c1
--- /dev/null
+++ b/tests/auto/quick/qquickloader/data/loader-async-race.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.15
+
+Item {
+ id: root
+ Component.onCompleted: {
+ myloader.active = false
+ }
+ Loader {
+ id: myloader
+ anchors.fill: parent
+ asynchronous: true
+ source: "loader-async-race-rect.qml"
+ }
+}
diff --git a/tests/auto/quick/qquickloader/data/noEngine.qml b/tests/auto/quick/qquickloader/data/noEngine.qml
new file mode 100644
index 0000000000..19e619f32e
--- /dev/null
+++ b/tests/auto/quick/qquickloader/data/noEngine.qml
@@ -0,0 +1,32 @@
+import QtQuick 2
+
+Item {
+ id: root
+ property bool a: false
+ property int changes: 0
+ onAChanged: {
+ m.model = 0
+ m.model = 1
+ ++changes;
+ }
+
+ Repeater {
+ id: m
+ model: 1
+
+ Item {
+ Timer {
+ onTriggered: {
+ root.a = true
+ l.source = "loaded.qml"
+ }
+ interval: 0
+ running: true
+ }
+
+ Loader {
+ id: l
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickloader/data/overflow.qml b/tests/auto/quick/qquickloader/data/overflow.qml
new file mode 100644
index 0000000000..e5fdfee182
--- /dev/null
+++ b/tests/auto/quick/qquickloader/data/overflow.qml
@@ -0,0 +1,5 @@
+import QtQuick
+
+Loader {
+ source: "overflow.qml"
+}
diff --git a/tests/auto/quick/qquickloader/tst_qquickloader.cpp b/tests/auto/quick/qquickloader/tst_qquickloader.cpp
index 4a2c7b0af0..067fa759d8 100644
--- a/tests/auto/quick/qquickloader/tst_qquickloader.cpp
+++ b/tests/auto/quick/qquickloader/tst_qquickloader.cpp
@@ -36,9 +36,9 @@
#include <QtQuick/qquickview.h>
#include <private/qquickloader_p.h>
#include <private/qquickwindowmodule_p.h>
-#include "testhttpserver.h"
-#include "../../shared/util.h"
-#include "../shared/geometrytestutil.h"
+#include <QtQuickTestUtils/private/geometrytestutils_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
#include <QQmlApplicationEngine>
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
@@ -133,11 +133,17 @@ private slots:
void statusChangeOnlyEmittedOnce();
void setSourceAndCheckStatus();
+ void loadComponentWithStates();
+ void asyncLoaderRace();
+ void noEngine();
+
+ void stackOverflow();
};
Q_DECLARE_METATYPE(QList<QQmlError>)
tst_QQuickLoader::tst_QQuickLoader()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qmlRegisterType<SlowComponent>("LoaderTest", 1, 0, "SlowComponent");
qRegisterMetaType<QList<QQmlError>>();
@@ -708,7 +714,7 @@ void tst_QQuickLoader::initialPropertyValues_data()
<< (QVariantList() << 12);
QTest::newRow("initial property errors get reported") << testFileUrl("initialPropertyTriggerException.qml")
- << (QStringList() << "^.*: Error: Cannot assign JavaScript function to int")
+ << (QStringList() << "^.*:10: Error: Cannot assign JavaScript function to int")
<< QStringList()
<< QVariantList();
}
@@ -1513,6 +1519,69 @@ void tst_QQuickLoader::setSourceAndCheckStatus()
QCOMPARE(loader->status(), QQuickLoader::Null);
}
+void tst_QQuickLoader::loadComponentWithStates()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QByteArray("import QtQuick\n"
+ "Loader {\n"
+ "id: loader\n"
+ "property int createdObjCount: 0\n"
+ "states: [ State { when: true; PropertyChanges { target: loader; sourceComponent: myComp } } ]\n"
+ "Component { id: myComp; Item { Component.onCompleted: { ++createdObjCount } } }\n"
+ "}" )
+ , dataDirectoryUrl());
+ QScopedPointer<QQuickLoader> loader(qobject_cast<QQuickLoader*>(component.create()));
+ QTest::qWait(200);
+ QTRY_VERIFY(loader != nullptr);
+ QVERIFY(loader->item());
+ QCOMPARE(static_cast<QQuickItem*>(loader.data())->childItems().size(), 1);
+ QCOMPARE(loader->property("createdObjCount").toInt(), 1);
+}
+
+void tst_QQuickLoader::asyncLoaderRace()
+{
+ QQmlApplicationEngine engine;
+ auto url = testFileUrl("loader-async-race.qml");
+ engine.load(url);
+ auto root = engine.rootObjects().at(0);
+ QVERIFY(root);
+
+ QQuickLoader *loader = root->findChild<QQuickLoader *>();
+ QCOMPARE(loader->active(), false);
+ QCOMPARE(loader->status(), QQuickLoader::Null);
+ QCOMPARE(loader->item(), nullptr);
+
+ QSignalSpy spy(loader, &QQuickLoader::itemChanged);
+ QVERIFY(!spy.wait(100));
+ QCOMPARE(loader->item(), nullptr);
+}
+
+void tst_QQuickLoader::noEngine()
+{
+ QQmlEngine engine;
+ const QUrl url = testFileUrl("noEngine.qml");
+ QQmlComponent component(&engine, url);
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> o(component.create());
+
+ const QString message = url.toString()
+ + QStringLiteral(":27:13: QML Loader: createComponent: Cannot find a QML engine.");
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+ QTRY_COMPARE(o->property("changes").toInt(), 1);
+}
+
+void tst_QQuickLoader::stackOverflow()
+{
+ QQmlEngine engine;
+ const QUrl url = testFileUrl("overflow.qml");
+ QQmlComponent component(&engine, url);
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ const QString message = url.toString() + QStringLiteral(": Maximum call stack size exceeded.");
+ QTest::ignoreMessage(QtCriticalMsg, qPrintable(message));
+ QScopedPointer<QObject> o(component.create());
+}
+
QTEST_MAIN(tst_QQuickLoader)
#include "tst_qquickloader.moc"
diff --git a/tests/auto/quick/qquickmousearea/BLACKLIST b/tests/auto/quick/qquickmousearea/BLACKLIST
index 61eb8043e2..f635061f7f 100644
--- a/tests/auto/quick/qquickmousearea/BLACKLIST
+++ b/tests/auto/quick/qquickmousearea/BLACKLIST
@@ -1,6 +1,3 @@
-[pressAndHold]
-macos ci
-
# QTBUG-78153
[nestedStopAtBounds]
opensuse-leap
@@ -9,3 +6,8 @@ opensuse-leap
[pressOneAndTapAnother]
opensuse-leap
+# QTBUG-103092
+[pressOneAndTapAnother]
+android
+[containsMouseAndVisibility]
+android
diff --git a/tests/auto/quick/qquickmousearea/CMakeLists.txt b/tests/auto/quick/qquickmousearea/CMakeLists.txt
index 7061c92384..2f9b10fe55 100644
--- a/tests/auto/quick/qquickmousearea/CMakeLists.txt
+++ b/tests/auto/quick/qquickmousearea/CMakeLists.txt
@@ -12,16 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickmousearea
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickmousearea.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -29,6 +20,7 @@ qt_internal_add_test(tst_qquickmousearea
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickmousearea/data/doubleClickToHide.qml b/tests/auto/quick/qquickmousearea/data/doubleClickToHide.qml
new file mode 100644
index 0000000000..01f6eaabed
--- /dev/null
+++ b/tests/auto/quick/qquickmousearea/data/doubleClickToHide.qml
@@ -0,0 +1,19 @@
+import QtQuick 2.0
+
+Item {
+ id: root
+ property int clicked: 0
+ property int doubleClicked: 0
+ property int released: 0
+
+ MouseArea {
+ width: 200; height: 200
+ onClicked: { root.clicked++ }
+ onDoubleClicked: {
+ root.doubleClicked++
+ visible = false
+ }
+ onReleased: { root.released++ }
+ }
+}
+
diff --git a/tests/auto/quick/qquickmousearea/data/preventStealingListViewChild.qml b/tests/auto/quick/qquickmousearea/data/preventStealingListViewChild.qml
new file mode 100644
index 0000000000..3833c5a8a9
--- /dev/null
+++ b/tests/auto/quick/qquickmousearea/data/preventStealingListViewChild.qml
@@ -0,0 +1,31 @@
+import QtQuick 2.15
+
+ListView {
+ id: flick
+ width: 640
+ height: 480
+ model: 100
+
+ delegate: Rectangle {
+ border.color: "#81e889"
+ width: 640; height: 100
+ Text { text: "Row " + index }
+ }
+
+ Rectangle {
+ anchors.right: parent.right
+ anchors.margins: 2
+ color: ma.pressed ? "#81e889" : "#c2f4c6"
+ width: 50; height: 50
+ radius: 5
+ MouseArea {
+ id: ma
+ anchors.fill: parent
+ preventStealing: true
+ drag {
+ target: parent
+ axis: Drag.YAxis
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
index 1e9f76c8ce..50cc536795 100644
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
@@ -36,8 +36,8 @@
#include <QtQuick/qquickview.h>
#include <QtQml/qqmlcontext.h>
#include <QtQml/qqmlengine.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
#include <QtGui/qstylehints.h>
#include <QtGui/QCursor>
#include <QtGui/QScreen>
@@ -89,6 +89,7 @@ class tst_QQuickMouseArea: public QQmlDataTest
Q_OBJECT
public:
tst_QQuickMouseArea()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qmlRegisterType<CircleMask>("Test", 1, 0, "CircleMask");
qmlRegisterType<EventSender>("Test", 1, 0, "EventSender");
@@ -122,6 +123,7 @@ private slots:
void invalidClick();
void pressedOrdering();
void preventStealing();
+ void preventStealingListViewChild();
void clickThrough();
void hoverPosition();
void hoverPropagation();
@@ -155,6 +157,7 @@ private slots:
void settingHiddenInPressUngrabs();
void negativeZStackingOrder();
void containsMouseAndVisibility();
+ void doubleClickToHide();
private:
int startDragDistance() const {
@@ -1090,6 +1093,36 @@ void tst_QQuickMouseArea::preventStealing()
QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, p);
}
+// QTBUG-103522
+void tst_QQuickMouseArea::preventStealingListViewChild()
+{
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("preventStealingListViewChild.qml")));
+ QQuickFlickable *flickable = qobject_cast<QQuickFlickable*>(window.rootObject());
+ QVERIFY(flickable);
+ QQuickMouseArea *mouseArea = flickable->findChild<QQuickMouseArea*>();
+ QVERIFY(mouseArea);
+ QPoint p = mouseArea->mapToScene(mouseArea->boundingRect().center()).toPoint();
+ const int threshold = qApp->styleHints()->startDragDistance();
+
+ flickable->flick(0, -10000);
+ for (int i = 0; i < 2; ++i) {
+ QVERIFY(flickable->isMovingVertically());
+ QTest::touchEvent(&window, device).press(0, p);
+ QQuickTouchUtils::flush(&window);
+ for (int j = 0; j < 4 && !mouseArea->drag()->active(); ++j) {
+ p += QPoint(0, threshold);
+ QTest::touchEvent(&window, device).move(0, p);
+ QQuickTouchUtils::flush(&window);
+ }
+ // MouseArea should be dragged because of preventStealing; ListView does not steal the grab.
+ QVERIFY(mouseArea->drag()->active());
+ QCOMPARE(flickable->isDragging(), false);
+ QTest::touchEvent(&window, device).release(0, p);
+ QCOMPARE(mouseArea->drag()->active(), false);
+ }
+}
+
void tst_QQuickMouseArea::clickThrough()
{
// timestamp delay to avoid generating a double click
@@ -2344,6 +2377,29 @@ void tst_QQuickMouseArea::containsMouseAndVisibility()
QVERIFY(!mouseArea->hovered());
}
+// QTBUG-35995 and QTBUG-102158
+void tst_QQuickMouseArea::doubleClickToHide()
+{
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("doubleClickToHide.qml")));
+
+ QQuickMouseArea *mouseArea = window.rootObject()->findChild<QQuickMouseArea *>();
+ QVERIFY(mouseArea);
+
+ QTest::mouseDClick(&window, Qt::LeftButton, Qt::NoModifier, {10, 10});
+
+ QCOMPARE(window.rootObject()->property("clicked").toInt(), 1);
+ QCOMPARE(window.rootObject()->property("doubleClicked").toInt(), 1);
+ QCOMPARE(mouseArea->isVisible(), false);
+ QCOMPARE(mouseArea->pressed(), false);
+ QCOMPARE(mouseArea->pressedButtons(), Qt::NoButton);
+
+ mouseArea->setVisible(true);
+
+ QTest::mouseClick(&window, Qt::LeftButton, Qt::NoModifier, {10, 10});
+ QCOMPARE(window.rootObject()->property("clicked").toInt(), 2);
+}
+
QTEST_MAIN(tst_QQuickMouseArea)
#include "tst_qquickmousearea.moc"
diff --git a/tests/auto/quick/qquickmultipointtoucharea/BLACKLIST b/tests/auto/quick/qquickmultipointtoucharea/BLACKLIST
index abe504d20c..2488eff270 100644
--- a/tests/auto/quick/qquickmultipointtoucharea/BLACKLIST
+++ b/tests/auto/quick/qquickmultipointtoucharea/BLACKLIST
@@ -1,4 +1,6 @@
[nonOverlapping]
ubuntu-20.04
+ubuntu-22.04
[nested]
ubuntu-20.04
+ubuntu-22.04
diff --git a/tests/auto/quick/qquickmultipointtoucharea/CMakeLists.txt b/tests/auto/quick/qquickmultipointtoucharea/CMakeLists.txt
index 1902b3fefa..30c1109c21 100644
--- a/tests/auto/quick/qquickmultipointtoucharea/CMakeLists.txt
+++ b/tests/auto/quick/qquickmultipointtoucharea/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickmultipointtoucharea
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickmultipointtoucharea.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickmultipointtoucharea/data/nestedMouseArea.qml b/tests/auto/quick/qquickmultipointtoucharea/data/nestedMouseArea.qml
new file mode 100644
index 0000000000..7ca3f187d6
--- /dev/null
+++ b/tests/auto/quick/qquickmultipointtoucharea/data/nestedMouseArea.qml
@@ -0,0 +1,26 @@
+import QtQuick 2.12
+
+Item {
+ id: root
+ width: 300; height: 300
+ property point mptaPoint
+ property point maPoint
+ MultiPointTouchArea {
+ anchors.fill : parent
+ onPressed: function(touchPoints) {
+ root.mptaPoint = Qt.point(touchPoints[0].x, touchPoints[0].y)
+ }
+ MouseArea {
+ id: ma
+ width: 100; height: 100
+ anchors.centerIn: parent
+ onPressed: function(mouse) {
+ root.maPoint = Qt.point(mouse.x, mouse.y)
+ }
+ }
+ Rectangle {
+ anchors.fill: ma
+ border.color: "grey"
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp b/tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp
index 056028b3f0..299241b768 100644
--- a/tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp
+++ b/tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp
@@ -37,9 +37,10 @@
#include <QtQuick/qquickview.h>
#include <QtGui/QScreen>
#include <QtGui/private/qevent_p.h>
+#include <QtGui/private/qeventpoint_p.h>
#include <QtGui/private/qpointingdevice_p.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
@@ -47,7 +48,7 @@ class tst_QQuickMultiPointTouchArea : public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQuickMultiPointTouchArea() { }
+ tst_QQuickMultiPointTouchArea() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
private slots:
void cleanupTestCase() {}
@@ -72,6 +73,7 @@ private slots:
void mouseGestureStarted();
void cancel();
void stationaryTouchWithChangingPressure();
+ void touchFiltering();
private:
QQuickView *createAndShowView(const QString &file);
@@ -1377,6 +1379,23 @@ void tst_QQuickMultiPointTouchArea::stationaryTouchWithChangingPressure() // QTB
QCOMPARE(point1->pressure(), 0);
}
+void tst_QQuickMultiPointTouchArea::touchFiltering() // QTBUG-74028
+{
+ QScopedPointer<QQuickView> window(createAndShowView("nestedMouseArea.qml"));
+ QVERIFY(window->rootObject() != nullptr);
+ QQuickMultiPointTouchArea *mpta = window->rootObject()->findChild<QQuickMultiPointTouchArea*>();
+ QVERIFY(mpta);
+ QQuickMouseArea *ma = window->rootObject()->findChild<QQuickMouseArea*>();
+ QVERIFY(ma);
+
+ QSignalSpy mptaSpy(mpta, &QQuickMultiPointTouchArea::pressed);
+ const QPoint pt = window->rootObject()->boundingRect().center().toPoint();
+ QTest::touchEvent(window.data(), device).press(1, pt);
+ QQuickTouchUtils::flush(window.data());
+ QTRY_COMPARE(mpta->parentItem()->property("mptaPoint").toPoint(), pt);
+ QCOMPARE(mpta->parentItem()->property("maPoint").toPoint(), ma->boundingRect().center().toPoint());
+ QCOMPARE(mptaSpy.count(), 1);
+}
QTEST_MAIN(tst_QQuickMultiPointTouchArea)
diff --git a/tests/auto/quick/qquickpainteditem/BLACKLIST b/tests/auto/quick/qquickpainteditem/BLACKLIST
index 9b58325f6c..6d8597b830 100644
--- a/tests/auto/quick/qquickpainteditem/BLACKLIST
+++ b/tests/auto/quick/qquickpainteditem/BLACKLIST
@@ -1,27 +1,34 @@
# QTBUG-63053
[opaquePainting]
b2qt
+qnx
# QTBUG-63053
[antialiasing]
b2qt
+qnx
# QTBUG-63053
[mipmap]
b2qt
+qnx
# QTBUG-63053
[performanceHints]
b2qt
+qnx
# QTBUG-63053
[contentScale]
b2qt
+qnx
# QTBUG-63053
[contentsBoundingRect]
b2qt
+qnx
# QTBUG-63053
[fillColor]
b2qt
+qnx
diff --git a/tests/auto/quick/qquickpalette/CMakeLists.txt b/tests/auto/quick/qquickpalette/CMakeLists.txt
index 98036c0a38..eefecc7ac3 100644
--- a/tests/auto/quick/qquickpalette/CMakeLists.txt
+++ b/tests/auto/quick/qquickpalette/CMakeLists.txt
@@ -6,14 +6,13 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpalette
SOURCES
- ../../shared/util.h
- ../../shared/util.cpp
tst_qquickpalette.cpp
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickpalette/tst_qquickpalette.cpp b/tests/auto/quick/qquickpalette/tst_qquickpalette.cpp
index cca7b54a8a..144bc84fda 100644
--- a/tests/auto/quick/qquickpalette/tst_qquickpalette.cpp
+++ b/tests/auto/quick/qquickpalette/tst_qquickpalette.cpp
@@ -47,7 +47,7 @@
#include <QtQuick/private/qquickabstractpaletteprovider_p.h>
#include <QtQuick/private/qquickpalettecolorprovider_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
// Use this to get a more descriptive failure message (QTBUG-87039).
#define COMPARE_PALETTES(actualPalette, expectedPalette) \
@@ -59,6 +59,9 @@ class tst_QQuickPalette : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_QQuickPalette();
+
private Q_SLOTS:
void resolvingColor();
void resolvingColor_data();
@@ -92,6 +95,11 @@ private Q_SLOTS:
using GroupGetter = QQuickColorGroup* (QQuickPalette::* )() const;
Q_DECLARE_METATYPE(GroupGetter);
+tst_QQuickPalette::tst_QQuickPalette()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQuickPalette::resolvingColor()
{
QFETCH(QPalette::ColorGroup, colorGroup);
diff --git a/tests/auto/quick/qquickpath/CMakeLists.txt b/tests/auto/quick/qquickpath/CMakeLists.txt
index c616519987..fd1d003e80 100644
--- a/tests/auto/quick/qquickpath/CMakeLists.txt
+++ b/tests/auto/quick/qquickpath/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpath
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickpath.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickpath/tst_qquickpath.cpp b/tests/auto/quick/qquickpath/tst_qquickpath.cpp
index c89ce730a8..c1c34ddc06 100644
--- a/tests/auto/quick/qquickpath/tst_qquickpath.cpp
+++ b/tests/auto/quick/qquickpath/tst_qquickpath.cpp
@@ -31,13 +31,13 @@
#include <QtQml/qqmlcomponent.h>
#include <QtQuick/private/qquickpath_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_QuickPath : public QQmlDataTest
{
Q_OBJECT
public:
- tst_QuickPath() {}
+ tst_QuickPath() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void arc();
diff --git a/tests/auto/quick/qquickpathview/CMakeLists.txt b/tests/auto/quick/qquickpathview/CMakeLists.txt
index 2f3bd53500..84a234b3b8 100644
--- a/tests/auto/quick/qquickpathview/CMakeLists.txt
+++ b/tests/auto/quick/qquickpathview/CMakeLists.txt
@@ -12,15 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpathview
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickpathview.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -29,6 +21,7 @@ qt_internal_add_test(tst_qquickpathview
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
index 4011ac930c..2b7aca72d0 100644
--- a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
+++ b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
@@ -45,16 +45,16 @@
#include <QStringListModel>
#include <QFile>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
#include <math.h>
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
Q_DECLARE_METATYPE(QQuickPathView::HighlightRangeMode)
Q_DECLARE_METATYPE(QQuickPathView::PositionMode)
@@ -153,6 +153,10 @@ private slots:
void objectModelMove();
void requiredPropertiesInDelegate();
void requiredPropertiesInDelegatePreventUnrelated();
+ void touchMove();
+
+private:
+ QScopedPointer<QPointingDevice> touchDevice = QScopedPointer<QPointingDevice>(QTest::createTouchDevice());
};
class TestObject : public QObject
@@ -186,6 +190,7 @@ private:
};
tst_QQuickPathView::tst_QQuickPathView()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -1389,8 +1394,7 @@ void tst_QQuickPathView::package()
QVERIFY(window);
window->setSource(testFileUrl("pathview_package.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathView = window->rootObject()->findChild<QQuickPathView*>("photoPathView");
QVERIFY(pathView);
@@ -1515,12 +1519,10 @@ void tst_QQuickPathView::undefinedPath()
void tst_QQuickPathView::mouseDrag()
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("dragpath.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -1585,13 +1587,10 @@ void tst_QQuickPathView::mouseDrag()
void tst_QQuickPathView::nestedMouseAreaDrag()
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("nestedmousearea.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
-
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -1608,12 +1607,10 @@ void tst_QQuickPathView::nestedMouseAreaDrag()
void tst_QQuickPathView::flickNClick() // QTBUG-77173
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("nestedmousearea2.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -1702,9 +1699,7 @@ void tst_QQuickPathView::changePreferredHighlight()
window->setGeometry(0,0,400,200);
window->setSource(testFileUrl("dragpath.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -1903,11 +1898,9 @@ void tst_QQuickPathView::cancelDrag()
{
QScopedPointer<QQuickView> window(createView());
window->setSource(testFileUrl("dragpath.qml"));
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -1950,11 +1943,9 @@ void tst_QQuickPathView::maximumFlickVelocity()
{
QScopedPointer<QQuickView> window(createView());
window->setSource(testFileUrl("dragpath.qml"));
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -1996,12 +1987,10 @@ void tst_QQuickPathView::snapToItem()
QFETCH(bool, enforceRange);
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("panels.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = window->rootObject()->findChild<QQuickPathView*>("view");
QVERIFY(pathview != nullptr);
@@ -2040,12 +2029,10 @@ void tst_QQuickPathView::snapOneItem()
QFETCH(bool, enforceRange);
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("panels.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = window->rootObject()->findChild<QQuickPathView*>("view");
QVERIFY(pathview != nullptr);
@@ -2096,9 +2083,7 @@ void tst_QQuickPathView::positionViewAtIndex()
QScopedPointer<QQuickView> window(createView());
window->setSource(testFileUrl("pathview3.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -2159,9 +2144,7 @@ void tst_QQuickPathView::indexAt_itemAt()
QScopedPointer<QQuickView> window(createView());
window->setSource(testFileUrl("pathview3.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -2285,8 +2268,7 @@ void tst_QQuickPathView::changePathDuringRefill()
window->setSource(testFileUrl("changePathDuringRefill.qml"));
window->show();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathView = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathView != nullptr);
@@ -2309,12 +2291,10 @@ void tst_QQuickPathView::changePathDuringRefill()
void tst_QQuickPathView::nestedinFlickable()
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("nestedInFlickable.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = findItem<QQuickPathView>(window->rootObject(), "pathView");
QVERIFY(pathview != nullptr);
@@ -2417,12 +2397,10 @@ void tst_QQuickPathView::nestedinFlickable()
void tst_QQuickPathView::ungrabNestedinFlickable()
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("ungrabNestedinFlickable.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = findItem<QQuickPathView>(window->rootObject(), "pathView");
QVERIFY(pathview != nullptr);
@@ -2451,12 +2429,10 @@ void tst_QQuickPathView::ungrabNestedinFlickable()
void tst_QQuickPathView::flickableDelegate()
{
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("flickableDelegate.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
QVERIFY(pathview != nullptr);
@@ -2536,8 +2512,7 @@ void tst_QQuickPathView::qtbug37815()
window->setSource(testFileUrl("qtbug37815.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
// cache items will be created async. Let's wait...
QTest::qWait(1000);
@@ -2567,8 +2542,7 @@ void tst_QQuickPathView::qtbug42716()
window->setSource(testFileUrl("qtbug42716.qml"));
window->show();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathView = findItem<QQuickPathView>(window->rootObject(), "pathView");
QVERIFY(pathView != nullptr);
@@ -2609,8 +2583,7 @@ void tst_QQuickPathView::qtbug53464()
window->setSource(testFileUrl("qtbug53464.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathView = findItem<QQuickPathView>(window->rootObject(), "pathView");
QVERIFY(pathView != nullptr);
@@ -2684,12 +2657,10 @@ void tst_QQuickPathView::movementDirection()
QFETCH(qreal, tooffset);
QScopedPointer<QQuickView> window(createView());
- QQuickViewTestUtil::moveMouseAway(window.data());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
window->setSource(testFileUrl("movementDirection.qml"));
window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window.data()));
- QCOMPARE(window.data(), qGuiApp->focusWindow());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QQuickPathView *pathview = window->rootObject()->findChild<QQuickPathView*>("view");
QVERIFY(pathview != nullptr);
@@ -2796,6 +2767,112 @@ void tst_QQuickPathView::requiredPropertiesInDelegatePreventUnrelated()
window->show();
}
+void tst_QQuickPathView::touchMove()
+{
+ QScopedPointer<QQuickView> window(createView());
+ QQuickVisualTestUtils::moveMouseAway(window.data());
+ window->setSource(testFileUrl("dragpath.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
+ QVERIFY(pathview != nullptr);
+
+ QSignalSpy movingSpy(pathview, SIGNAL(movingChanged()));
+ QSignalSpy moveStartedSpy(pathview, SIGNAL(movementStarted()));
+ QSignalSpy moveEndedSpy(pathview, SIGNAL(movementEnded()));
+ QSignalSpy draggingSpy(pathview, SIGNAL(draggingChanged()));
+ QSignalSpy dragStartedSpy(pathview, SIGNAL(dragStarted()));
+ QSignalSpy dragEndedSpy(pathview, SIGNAL(dragEnded()));
+ QSignalSpy flickStartedSpy(pathview, SIGNAL(flickStarted()));
+ QSignalSpy flickEndedSpy(pathview, SIGNAL(flickEnded()));
+
+ int current = pathview->currentIndex();
+
+ // touch move from left to right
+ QPoint from(250, 100);
+ QPoint to(10, 100);
+
+ QTest::touchEvent(window.data(), touchDevice.data()).press(0, from, window.data());
+ QQuickTouchUtils::flush(window.data());
+
+ QVERIFY(!pathview->isMoving());
+ QVERIFY(!pathview->isDragging());
+ QCOMPARE(movingSpy.count(), 0);
+ QCOMPARE(moveStartedSpy.count(), 0);
+ QCOMPARE(moveEndedSpy.count(), 0);
+ QCOMPARE(draggingSpy.count(), 0);
+ QCOMPARE(dragStartedSpy.count(), 0);
+ QCOMPARE(dragEndedSpy.count(), 0);
+ QCOMPARE(flickStartedSpy.count(), 0);
+ QCOMPARE(flickEndedSpy.count(), 0);
+
+ from -= QPoint(QGuiApplication::styleHints()->startDragDistance() + 1, 0);
+ QTest::touchEvent(window.data(), touchDevice.data()).move(0, from, window.data());
+ QQuickTouchUtils::flush(window.data());
+
+ // first move does not trigger move/drag
+ QVERIFY(!pathview->isMoving());
+ QVERIFY(!pathview->isDragging());
+ QCOMPARE(movingSpy.count(), 0);
+ QCOMPARE(moveStartedSpy.count(), 0);
+ QCOMPARE(moveEndedSpy.count(), 0);
+ QCOMPARE(draggingSpy.count(), 0);
+ QCOMPARE(dragStartedSpy.count(), 0);
+ QCOMPARE(dragEndedSpy.count(), 0);
+ QCOMPARE(flickStartedSpy.count(), 0);
+ QCOMPARE(flickEndedSpy.count(), 0);
+
+ QPoint diff = from - to;
+ int moveCount = 4;
+ for (int i = 1; i <= moveCount; ++i) {
+ QTest::touchEvent(window.data(), touchDevice.data()).move(0, from - i * diff / moveCount, window.data());
+ QQuickTouchUtils::flush(window.data());
+
+ QVERIFY(pathview->isMoving());
+ QVERIFY(pathview->isDragging());
+ QCOMPARE(movingSpy.count(), 1);
+ QCOMPARE(moveStartedSpy.count(), 1);
+ QCOMPARE(moveEndedSpy.count(), 0);
+ QCOMPARE(draggingSpy.count(), 1);
+ QCOMPARE(dragStartedSpy.count(), 1);
+ QCOMPARE(dragEndedSpy.count(), 0);
+ QCOMPARE(flickStartedSpy.count(), 0);
+ QCOMPARE(flickEndedSpy.count(), 0);
+ }
+ QVERIFY(pathview->currentIndex() != current);
+
+ QTest::touchEvent(window.data(), touchDevice.data()).release(0, to, window.data());
+ QQuickTouchUtils::flush(window.data());
+
+ QVERIFY(pathview->isMoving());
+ QVERIFY(!pathview->isDragging());
+ QCOMPARE(movingSpy.count(), 1);
+ QCOMPARE(moveStartedSpy.count(), 1);
+ QCOMPARE(moveEndedSpy.count(), 0);
+ QCOMPARE(draggingSpy.count(), 2);
+ QCOMPARE(dragStartedSpy.count(), 1);
+ QCOMPARE(dragEndedSpy.count(), 1);
+ QCOMPARE(flickStartedSpy.count(), 1);
+ QCOMPARE(flickEndedSpy.count(), 0);
+
+ // Wait for the flick to finish
+ QVERIFY(QTest::qWaitFor([&]()
+ { return !pathview->isFlicking(); }
+ ));
+ QVERIFY(!pathview->isMoving());
+ QVERIFY(!pathview->isDragging());
+ QCOMPARE(movingSpy.count(), 2);
+ QCOMPARE(moveStartedSpy.count(), 1);
+ QCOMPARE(moveEndedSpy.count(), 1);
+ QCOMPARE(draggingSpy.count(), 2);
+ QCOMPARE(dragStartedSpy.count(), 1);
+ QCOMPARE(dragEndedSpy.count(), 1);
+ QCOMPARE(flickStartedSpy.count(), 1);
+ QCOMPARE(flickEndedSpy.count(), 1);
+
+}
+
QTEST_MAIN(tst_QQuickPathView)
#include "tst_qquickpathview.moc"
diff --git a/tests/auto/quick/qquickpincharea/CMakeLists.txt b/tests/auto/quick/qquickpincharea/CMakeLists.txt
index 4f417366a1..48e354de34 100644
--- a/tests/auto/quick/qquickpincharea/CMakeLists.txt
+++ b/tests/auto/quick/qquickpincharea/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpincharea
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickpincharea.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickpincharea/data/pinchAreaInPathView.qml b/tests/auto/quick/qquickpincharea/data/pinchAreaInPathView.qml
new file mode 100644
index 0000000000..dc909c2c7c
--- /dev/null
+++ b/tests/auto/quick/qquickpincharea/data/pinchAreaInPathView.qml
@@ -0,0 +1,48 @@
+import QtQuick
+
+PathView {
+ width: 600
+ height: 200
+
+ model: 3
+ delegate: Rectangle {
+ width: 200
+ height: 200
+ color: "salmon"
+ opacity: PathView.isCurrentItem ? 1 : 0.5
+
+ property alias pinchArea: pinchArea
+
+ Text {
+ text: "Test"
+ font.pixelSize: 100
+ anchors.fill: parent
+ fontSizeMode: Text.Fit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ PinchArea {
+ id: pinchArea
+ anchors.fill: parent
+ pinch.target: parent
+ pinch.dragAxis: Pinch.XAndYAxis
+ pinch.minimumScale: 1.0
+ pinch.maximumScale: 5.0
+
+ onPinchFinished: (pinch) => {
+ parent.scale = 1
+ parent.x = 0
+ parent.y = 0
+ }
+ }
+ }
+ path: Path {
+ startX: 100
+ startY: 100
+ PathLine {
+ x: 700
+ y: 100
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickpincharea/data/pinchproperties.qml b/tests/auto/quick/qquickpincharea/data/pinchproperties.qml
index 899c6380da..42096d0b77 100644
--- a/tests/auto/quick/qquickpincharea/data/pinchproperties.qml
+++ b/tests/auto/quick/qquickpincharea/data/pinchproperties.qml
@@ -31,18 +31,18 @@ Rectangle {
pinch.maximumScale: 2.0
pinch.minimumRotation: 0.0
pinch.maximumRotation: 90.0
- onPinchStarted: {
+ onPinchStarted: (pinch) => {
whiteRect.center = pinch.center
whiteRect.scale = pinch.scale
whiteRect.pointCount = pinch.pointCount;
whiteRect.pinchActive = true;
}
- onPinchUpdated: {
+ onPinchUpdated: (pinch) => {
whiteRect.center = pinch.center
whiteRect.scale = pinch.scale
whiteRect.pointCount = pinch.pointCount;
}
- onPinchFinished: {
+ onPinchFinished: (pinch) => {
whiteRect.center = pinch.center
whiteRect.scale = pinch.scale
whiteRect.pointCount = pinch.pointCount;
diff --git a/tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp b/tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp
index 55fb07f744..d845e9ef90 100644
--- a/tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp
+++ b/tests/auto/quick/qquickpincharea/tst_qquickpincharea.cpp
@@ -26,23 +26,26 @@
**
****************************************************************************/
+#include <QtCore/private/qvariantanimation_p.h>
#include <QtTest/QtTest>
#include <QtTest/QSignalSpy>
#include <QtGui/QStyleHints>
#include <QtGui/private/qevent_p.h>
+#include <QtGui/private/qeventpoint_p.h>
#include <qpa/qwindowsysteminterface.h>
#include <private/qquickpincharea_p.h>
+#include <QtQuick/private/qquickpathview_p.h>
#include <QtQuick/private/qquickrectangle_p.h>
#include <QtQuick/qquickview.h>
#include <QtQml/qqmlcontext.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
class tst_QQuickPinchArea: public QQmlDataTest
{
Q_OBJECT
public:
- tst_QQuickPinchArea() { }
+ tst_QQuickPinchArea() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
private slots:
void cleanupTestCase();
void pinchProperties();
@@ -54,6 +57,8 @@ private slots:
void transformedPinchArea();
void dragTransformedPinchArea_data();
void dragTransformedPinchArea();
+ void pinchAreaKeepsDragInView();
+ void pinchInPathView();
private:
QQuickView *createView();
@@ -642,6 +647,147 @@ void tst_QQuickPinchArea::dragTransformedPinchArea() // QTBUG-63673
QCOMPARE(pinchArea->pinch()->active(), false);
}
+template<typename F>
+void forEachLerpStep(int steps, F &&func)
+{
+ for (int i = 0; i < steps; ++i) {
+ const qreal t = qreal(i) / steps;
+ func(t);
+ }
+}
+
+QPoint lerpPoints(const QPoint &point1, const QPoint &point2, qreal t)
+{
+ return QPoint(_q_interpolate(point1.x(), point2.x(), t), _q_interpolate(point1.y(), point2.y(), t));
+};
+
+// QTBUG-105058
+void tst_QQuickPinchArea::pinchAreaKeepsDragInView()
+{
+ QQuickView view;
+ view.setSource(testFileUrl("pinchAreaInPathView.qml"));
+ QVERIFY(view.rootObject());
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickPathView *pathView = qobject_cast<QQuickPathView*>(view.rootObject());
+ QVERIFY(pathView);
+ QCOMPARE(pathView->count(), 3);
+
+ const QQuickItem *pinchDelegateItem = pathView->itemAtIndex(0);
+ QQuickPinchArea *pinchArea = pinchDelegateItem->property("pinchArea").value<QQuickPinchArea*>();
+ QVERIFY(pinchArea);
+
+ // Press.
+ QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(&view, device);
+ QPoint point1Start = { 80, 120 };
+ QPoint point2Start = { 120, 80 };
+ const int dragThreshold = qApp->styleHints()->startDragDistance();
+ pinchSequence.press(1, pinchArea->mapToScene(point1Start).toPoint(), &view)
+ .press(2, pinchArea->mapToScene(point2Start).toPoint(), &view).commit();
+ QQuickTouchUtils::flush(&view);
+
+ // Move past the drag threshold to begin the pinch.
+ const int steps = 30;
+ QPoint point1End = point1Start + QPoint(-dragThreshold, dragThreshold);
+ QPoint point2End = point2Start + QPoint(dragThreshold, -dragThreshold);
+ forEachLerpStep(steps, [&](qreal t) {
+ pinchSequence.move(1, lerpPoints(point1Start, point1End, t), &view)
+ .move(2, lerpPoints(point2Start, point2End, t), &view).commit();
+ QQuickTouchUtils::flush(&view);
+ QTest::qWait(5);
+ });
+ QCOMPARE(pinchArea->pinch()->active(), true);
+ QVERIFY2(pinchDelegateItem->scale() > 1.0, qPrintable(QString::number(pinchDelegateItem->scale())));
+ // The PathView contents shouldn't have moved.
+ QCOMPARE(pathView->offset(), 0);
+
+ // Release a touch point.
+ pinchSequence.stationary(1).release(2, point2End, &view).commit();
+ QQuickTouchUtils::flush(&view);
+
+ // Press it again.
+ pinchSequence.stationary(1).press(2, point2End, &view).commit();
+ QQuickTouchUtils::flush(&view);
+ QCOMPARE(pinchArea->pinch()->active(), true);
+
+ // Drag to the right; the PathView still shouldn't move.
+ point1Start = point1End;
+ point2Start = point2End;
+ point1End = point1Start + QPoint(100, 0);
+ point2End = point2Start + QPoint(100, 0);
+ forEachLerpStep(steps, [&](qreal t) {
+ pinchSequence.move(1, lerpPoints(point1Start, point1End, t), &view)
+ .move(2, lerpPoints(point2Start, point2End, t), &view).commit();
+ QQuickTouchUtils::flush(&view);
+ QTest::qWait(5);
+ });
+ QCOMPARE(pinchArea->pinch()->active(), true);
+ QVERIFY2(pinchDelegateItem->scale() > 1.0, qPrintable(QString::number(pinchDelegateItem->scale())));
+ QCOMPARE(pathView->offset(), 0);
+
+ // Release pinch.
+ pinchSequence.release(1, point1End, &view).release(2, point2End, &view).commit();
+ QQuickTouchUtils::flush(&view);
+ QCOMPARE(pinchArea->pinch()->active(), false);
+ QCOMPARE(pathView->offset(), 0);
+}
+
+void tst_QQuickPinchArea::pinchInPathView()
+{
+ QQuickView view;
+ view.setSource(testFileUrl("pinchAreaInPathView.qml"));
+ QVERIFY(view.rootObject());
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickPathView *pathView = qobject_cast<QQuickPathView*>(view.rootObject());
+ QVERIFY(pathView);
+ QCOMPARE(pathView->count(), 3);
+
+ const QQuickItem *pinchDelegateItem = pathView->itemAtIndex(0);
+ QQuickPinchArea *pinchArea = pinchDelegateItem->property("pinchArea").value<QQuickPinchArea*>();
+ QVERIFY(pinchArea);
+
+ // press
+ QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(&view, device);
+ QPoint point1Start = { 10, 10 };
+ QPoint point2Start = { 100, 100 };
+ const int dragThreshold = qApp->styleHints()->startDragDistance();
+ pinchSequence.press(0, point1Start, &view)
+ .press(1, point2Start, &view)
+ .commit();
+ QQuickTouchUtils::flush(&view);
+ QTest::qWait(20);
+
+ // move
+ QPoint moveDistance = QPoint(dragThreshold * 3, dragThreshold * 3);
+ QPoint point2End = point2Start + moveDistance;
+ pinchSequence.stationary(0)
+ .move(1, point2End, &view)
+ .commit();
+ QQuickTouchUtils::flush(&view);
+ QTest::qWait(20);
+
+ point2End += moveDistance;
+ pinchSequence.stationary(0)
+ .move(1, point2End, &view)
+ .commit();
+ QQuickTouchUtils::flush(&view);
+ QTest::qWait(20);
+
+ QCOMPARE(pinchArea->pinch()->active(), true);
+ QVERIFY2(pinchDelegateItem->scale() > 1.0, qPrintable(QString::number(pinchDelegateItem->scale())));
+ // PathView shouldn't have moved.
+ QCOMPARE(pathView->offset(), 0);
+
+ // release pinch.
+ pinchSequence.release(0, point1Start, &view).release(1, point2End, &view).commit();
+ QQuickTouchUtils::flush(&view);
+ QCOMPARE(pinchArea->pinch()->active(), false);
+ QCOMPARE(pathView->offset(), 0);
+}
+
QQuickView *tst_QQuickPinchArea::createView()
{
QQuickView *window = new QQuickView(nullptr);
diff --git a/tests/auto/quick/qquickpixmapcache/CMakeLists.txt b/tests/auto/quick/qquickpixmapcache/CMakeLists.txt
index e50a6eb6a8..3e20d02657 100644
--- a/tests/auto/quick/qquickpixmapcache/CMakeLists.txt
+++ b/tests/auto/quick/qquickpixmapcache/CMakeLists.txt
@@ -12,11 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpixmapcache
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qquickpixmapcache.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Concurrent
Qt::CorePrivate
@@ -25,6 +21,7 @@ qt_internal_add_test(tst_qquickpixmapcache
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp b/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp
index 13a3378905..88c0feac6a 100644
--- a/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp
+++ b/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp
@@ -32,8 +32,8 @@
#include <QtQuick/qquickimageprovider.h>
#include <QtQml/QQmlComponent>
#include <QNetworkReply>
-#include "../../shared/util.h"
-#include "testhttpserver.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
#if QT_CONFIG(concurrent)
#include <qtconcurrentrun.h>
@@ -46,7 +46,7 @@ class tst_qquickpixmapcache : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickpixmapcache() {}
+ tst_qquickpixmapcache() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void initTestCase() override;
diff --git a/tests/auto/quick/qquickpositioners/CMakeLists.txt b/tests/auto/quick/qquickpositioners/CMakeLists.txt
index e72958c6cd..d62bb4b0e1 100644
--- a/tests/auto/quick/qquickpositioners/CMakeLists.txt
+++ b/tests/auto/quick/qquickpositioners/CMakeLists.txt
@@ -12,15 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickpositioners
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickpositioners.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -28,6 +20,7 @@ qt_internal_add_test(tst_qquickpositioners
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp b/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
index 3885dd4a9a..2da96a60b7 100644
--- a/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
+++ b/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
@@ -34,12 +34,12 @@
#include <QtQuickTest/QtQuickTest>
#include <private/qquickitem_p.h>
#include <qqmlexpression.h>
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
@@ -306,6 +306,7 @@ void tst_qquickpositioners::moveTransitions_flow_data()
}
tst_qquickpositioners::tst_qquickpositioners()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -1023,7 +1024,7 @@ void tst_qquickpositioners::populateTransitions(const QString &positionerObjectN
QaimModel model_targetItems_transitionFrom;
QaimModel model_displacedItems_transitionVia;
- QScopedPointer<QQuickView> window(QQuickViewTestUtil::createView());
+ QScopedPointer<QQuickView> window(QQuickViewTestUtils::createView());
window->setInitialProperties({
{"usePopulateTransition", usePopulateTransition},
@@ -1111,7 +1112,7 @@ void tst_qquickpositioners::addTransitions(const QString &positionerObjectName)
QaimModel model_targetItems_transitionFrom;
QaimModel model_displacedItems_transitionVia;
- QScopedPointer<QQuickView> window(QQuickViewTestUtil::createView());
+ QScopedPointer<QQuickView> window(QQuickViewTestUtils::createView());
window->setInitialProperties({
{"usePopulateTransition", QVariant(false)},
{"enableAddTransition", QVariant(true)},
@@ -1235,7 +1236,7 @@ void tst_qquickpositioners::moveTransitions(const QString &positionerObjectName)
QaimModel model_targetItems_transitionFrom;
QaimModel model_displacedItems_transitionVia;
- QScopedPointer<QQuickView> window(QQuickViewTestUtil::createView());
+ QScopedPointer<QQuickView> window(QQuickViewTestUtils::createView());
window->setInitialProperties({
{"usePopulateTransition", QVariant(false)},
{"enableAddTransition", QVariant(false)},
@@ -2986,7 +2987,9 @@ void tst_qquickpositioners::test_propertychanges()
QCOMPARE(columnsSpy.count(),1);
QCOMPARE(rowsSpy.count(),1);
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(".*QML Grid: Grid contains more visible items \\(20\\) than rows\\*columns \\(6\\)"));
grid->setColumns(2);
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(".*QML Grid: Grid contains more visible items \\(20\\) than rows\\*columns \\(4\\)"));
grid->setRows(2);
QCOMPARE(columnsSpy.count(),2);
QCOMPARE(rowsSpy.count(),2);
diff --git a/tests/auto/quick/qquickrectangle/CMakeLists.txt b/tests/auto/quick/qquickrectangle/CMakeLists.txt
index 5ccb12a3f7..b56171af94 100644
--- a/tests/auto/quick/qquickrectangle/CMakeLists.txt
+++ b/tests/auto/quick/qquickrectangle/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickrectangle
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickrectangle.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickrectangle/tst_qquickrectangle.cpp b/tests/auto/quick/qquickrectangle/tst_qquickrectangle.cpp
index 536280337a..cb2f26e49f 100644
--- a/tests/auto/quick/qquickrectangle/tst_qquickrectangle.cpp
+++ b/tests/auto/quick/qquickrectangle/tst_qquickrectangle.cpp
@@ -35,7 +35,7 @@
#include <private/qquickitem_p.h>
#include <private/qquickrectangle_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickrectangle : public QQmlDataTest
{
@@ -57,11 +57,16 @@ private:
};
tst_qquickrectangle::tst_qquickrectangle()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
void tst_qquickrectangle::color()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Test does not work on Android because of QTBUG-102345");
+#endif
+
if (QGuiApplication::primaryScreen()->depth() < 24)
QSKIP("This test does not work at display depths < 24");
diff --git a/tests/auto/quick/qquickrendercontrol/BLACKLIST b/tests/auto/quick/qquickrendercontrol/BLACKLIST
new file mode 100644
index 0000000000..5c4846d821
--- /dev/null
+++ b/tests/auto/quick/qquickrendercontrol/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-103258
+[renderAndReadBackWithRhi]
+android
diff --git a/tests/auto/quick/qquickrendercontrol/CMakeLists.txt b/tests/auto/quick/qquickrendercontrol/CMakeLists.txt
index 46cfc1513c..90bfc57ebd 100644
--- a/tests/auto/quick/qquickrendercontrol/CMakeLists.txt
+++ b/tests/auto/quick/qquickrendercontrol/CMakeLists.txt
@@ -4,18 +4,23 @@
## tst_qquickrendercontrol Test:
#####################################################################
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
qt_internal_add_test(tst_qquickrendercontrol
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickrendercontrol.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
#### Keys ignored in scope 1:.:.:qquickrendercontrol.pro:<TRUE>:
diff --git a/tests/auto/quick/qquickrendercontrol/tst_qquickrendercontrol.cpp b/tests/auto/quick/qquickrendercontrol/tst_qquickrendercontrol.cpp
index 539ac25adb..3b2ce38c4b 100644
--- a/tests/auto/quick/qquickrendercontrol/tst_qquickrendercontrol.cpp
+++ b/tests/auto/quick/qquickrendercontrol/tst_qquickrendercontrol.cpp
@@ -39,7 +39,7 @@
#include <QQmlEngine>
#include <QQmlComponent>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/qpa/qplatformintegration.h>
@@ -79,6 +79,9 @@ class tst_RenderControl : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_RenderControl();
+
private slots:
void initTestCase() override;
void cleanupTestCase();
@@ -93,6 +96,11 @@ private:
AnimationDriver *animDriver;
};
+tst_RenderControl::tst_RenderControl()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_RenderControl::initTestCase()
{
QQmlDataTest::initTestCase();
@@ -128,8 +136,7 @@ void tst_RenderControl::renderAndReadBackWithRhi_data()
QTest::newRow("Vulkan") << QSGRendererInterface::VulkanRhi;
#endif
#ifdef Q_OS_WIN
- if (QOperatingSystemVersion::current() > QOperatingSystemVersion::Windows7)
- QTest::newRow("D3D11") << QSGRendererInterface::Direct3D11Rhi;
+ QTest::newRow("D3D11") << QSGRendererInterface::Direct3D11Rhi;
#endif
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
QTest::newRow("Metal") << QSGRendererInterface::MetalRhi;
@@ -144,6 +151,12 @@ void tst_RenderControl::renderAndReadBackWithRhi()
QSKIP("Skipping Vulkan-based QRhi readback test due to failing to create a VkInstance");
#endif
+#ifdef Q_OS_ANDROID
+ // QTBUG-102780
+ if (api == QSGRendererInterface::VulkanRhi)
+ QSKIP("Vulkan-based rendering tests on Android are flaky.");
+#endif
+
// Changing the graphics api is not possible once a QQuickWindow et al is
// created, however we do support changing it once all QQuickWindow,
// QQuickRenderControl, etc. instances are destroyed, before creating new
diff --git a/tests/auto/quick/qquickrepeater/CMakeLists.txt b/tests/auto/quick/qquickrepeater/CMakeLists.txt
index 3e7fda53c0..0f34764e44 100644
--- a/tests/auto/quick/qquickrepeater/CMakeLists.txt
+++ b/tests/auto/quick/qquickrepeater/CMakeLists.txt
@@ -12,15 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickrepeater
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickrepeater.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -28,6 +20,7 @@ qt_internal_add_test(tst_qquickrepeater
Qt::QmlModelsPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp b/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp
index 3634a3ea3c..168c0561d0 100644
--- a/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp
+++ b/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp
@@ -39,12 +39,12 @@
#include <QtQmlModels/private/qqmlobjectmodel_p.h>
#include <QtGui/qstandarditemmodel.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
class tst_QQuickRepeater : public QQmlDataTest
@@ -109,6 +109,7 @@ private:
};
tst_QQuickRepeater::tst_QQuickRepeater()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/quick/qquickscreen/CMakeLists.txt b/tests/auto/quick/qquickscreen/CMakeLists.txt
index 65c5538be3..d78b38d16e 100644
--- a/tests/auto/quick/qquickscreen/CMakeLists.txt
+++ b/tests/auto/quick/qquickscreen/CMakeLists.txt
@@ -4,18 +4,23 @@
## tst_qquickscreen Test:
#####################################################################
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
qt_internal_add_test(tst_qquickscreen
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickscreen.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
## Scopes:
diff --git a/tests/auto/quick/qquickscreen/tst_qquickscreen.cpp b/tests/auto/quick/qquickscreen/tst_qquickscreen.cpp
index ff6031619c..a77839afa4 100644
--- a/tests/auto/quick/qquickscreen/tst_qquickscreen.cpp
+++ b/tests/auto/quick/qquickscreen/tst_qquickscreen.cpp
@@ -32,18 +32,26 @@
#include <QtQuick/QQuickItem>
#include <QtQuick/QQuickView>
#include <QtGui/QScreen>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtQuick/private/qquickscreen_p.h>
#include <QDebug>
class tst_qquickscreen : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qquickscreen();
+
private slots:
void basicProperties();
void screenOnStartup();
void fullScreenList();
};
+tst_qquickscreen::tst_qquickscreen()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qquickscreen::basicProperties()
{
QQuickView view;
diff --git a/tests/auto/quick/qquickshadereffect/CMakeLists.txt b/tests/auto/quick/qquickshadereffect/CMakeLists.txt
index 6eebadeedf..100890ff5b 100644
--- a/tests/auto/quick/qquickshadereffect/CMakeLists.txt
+++ b/tests/auto/quick/qquickshadereffect/CMakeLists.txt
@@ -6,16 +6,14 @@
qt_internal_add_test(tst_qquickshadereffect
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickshadereffect.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
)
# Resources:
diff --git a/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp b/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp
index 070eba32c0..a9027f86bb 100644
--- a/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp
+++ b/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp
@@ -32,9 +32,11 @@
#include <QByteArray>
#include <private/qquickshadereffect_p.h>
#include <QMatrix4x4>
-#include <QtQuick/QQuickView>
#include <QtQml/QQmlEngine>
-#include "../../shared/util.h"
+#include <QtQuick/QQuickView>
+#include <QtQuick/private/qquickshadereffectsource_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
class TestShaderEffect : public QQuickShaderEffect
{
@@ -102,6 +104,7 @@ private:
};
tst_qquickshadereffect::tst_qquickshadereffect()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qmlRegisterType<TestShaderEffect>("ShaderEffectTest", 1, 0, "TestShaderEffect");
}
@@ -118,17 +121,17 @@ void tst_qquickshadereffect::cleanupTestCase()
void tst_qquickshadereffect::testConnection()
{
// verify that the property notify signal is connected
- QQuickView *view = new QQuickView(nullptr);
- view->setSource(QUrl(QStringLiteral("qrc:/data/connections.qml")));
+ QQuickView view;
+ QVERIFY(QQuickTest::initView(view, QStringLiteral("qrc:/data/connections.qml")));
- auto *shaderEffectItem = qobject_cast<TestShaderEffect*>(view->rootObject());
+ auto *shaderEffectItem = qobject_cast<TestShaderEffect*>(view.rootObject());
QVERIFY(shaderEffectItem);
QCOMPARE(shaderEffectItem->signalsConnected, 0);
- view->show();
- QVERIFY(QTest::qWaitForWindowExposed(view));
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
- QSGRendererInterface *rif = view->rendererInterface();
+ QSGRendererInterface *rif = view.rendererInterface();
if (rif && rif->graphicsApi() != QSGRendererInterface::Software)
QCOMPARE(shaderEffectItem->signalsConnected, 1);
}
@@ -136,66 +139,55 @@ void tst_qquickshadereffect::testConnection()
void tst_qquickshadereffect::deleteSourceItem()
{
// purely to ensure that deleting the sourceItem of a shader doesn't cause a crash
- QQuickView *view = new QQuickView(nullptr);
- view->setSource(QUrl(QStringLiteral("qrc:/data/deleteSourceItem.qml")));
- view->show();
- QVERIFY(QTest::qWaitForWindowExposed(view));
- QVERIFY(view);
- QObject *obj = view->rootObject();
+ QQuickView view;
+ QVERIFY(QQuickTest::showView(view, QStringLiteral("qrc:/data/deleteSourceItem.qml")));
+ QObject *obj = view.rootObject();
QVERIFY(obj);
QMetaObject::invokeMethod(obj, "setDeletedSourceItem");
- QTest::qWait(50);
- delete view;
+ const auto shaderEffectSource = obj->findChild<QQuickShaderEffectSource*>();
+ QVERIFY(shaderEffectSource);
+ QTRY_VERIFY(!shaderEffectSource->sourceItem());
}
void tst_qquickshadereffect::deleteShaderEffectSource()
{
- // purely to ensure that deleting the sourceItem of a shader doesn't cause a crash
- QQuickView *view = new QQuickView(nullptr);
- view->setSource(QUrl(QStringLiteral("qrc:/data/deleteShaderEffectSource.qml")));
- view->show();
- QVERIFY(QTest::qWaitForWindowExposed(view));
- QVERIFY(view);
- QObject *obj = view->rootObject();
+ // purely to ensure that deleting the ShaderEffectSource doesn't cause a crash
+ QQuickView view;
+ QVERIFY(QQuickTest::showView(view, QStringLiteral("qrc:/data/deleteShaderEffectSource.qml")));
+ QObject *obj = view.rootObject();
QVERIFY(obj);
+ const QPointer<QQuickShaderEffectSource> shaderEffectSource = obj->findChild<QQuickShaderEffectSource*>();
+ QVERIFY(shaderEffectSource);
QMetaObject::invokeMethod(obj, "setDeletedShaderEffectSource");
- QTest::qWait(50);
- delete view;
+ QTRY_VERIFY(shaderEffectSource);
}
void tst_qquickshadereffect::twoImagesOneShaderEffect()
{
// Don't crash when having a ShaderEffect and an Image sharing the texture via supportsAtlasTextures
- QQuickView *view = new QQuickView(nullptr);
- view->setSource(QUrl(QStringLiteral("qrc:/data/twoImagesOneShaderEffect.qml")));
- view->show();
- QVERIFY(QTest::qWaitForWindowExposed(view));
- QVERIFY(view);
- QObject *obj = view->rootObject();
+ QQuickView view;
+ QVERIFY(QQuickTest::showView(view, QStringLiteral("qrc:/data/twoImagesOneShaderEffect.qml")));
+ QObject *obj = view.rootObject();
QVERIFY(obj);
- delete view;
}
void tst_qquickshadereffect::withoutQmlEngine()
{
// using a shader without QML engine used to crash
- auto window = new QQuickWindow;
- auto shaderEffect = new TestShaderEffect(window->contentItem());
+ const QQuickWindow window;
+ auto shaderEffect = new TestShaderEffect(window.contentItem());
shaderEffect->setVertexShader(QUrl());
QVERIFY(shaderEffect->isComponentComplete());
- delete window;
}
// QTBUG-86402: hiding the parent of an item that uses an effect should not cause a crash.
void tst_qquickshadereffect::hideParent()
{
- QScopedPointer<QQuickView> view(new QQuickView);
- view->setSource(QUrl(QStringLiteral("qrc:/data/hideParent.qml")));
- QCOMPARE(view->status(), QQuickView::Ready);
- view->show();
- QVERIFY(QTest::qWaitForWindowExposed(view.data()));
+ QQuickView view;
+ view.setSource(QUrl(QStringLiteral("qrc:/data/hideParent.qml")));
+ QVERIFY(QQuickTest::showView(view, QStringLiteral("qrc:/data/hideParent.qml")));
// Should finish without crashing.
- QTRY_VERIFY(view->rootObject()->property("finished").toBool());
+ QTRY_VERIFY(view.rootObject()->property("finished").toBool());
}
QTEST_MAIN(tst_qquickshadereffect)
diff --git a/tests/auto/quick/qquickshape/BLACKLIST b/tests/auto/quick/qquickshape/BLACKLIST
new file mode 100644
index 0000000000..f0d5bcd351
--- /dev/null
+++ b/tests/auto/quick/qquickshape/BLACKLIST
@@ -0,0 +1,19 @@
+# QTBUG-103094
+[render]
+android
+[renderWithMultipleSp]
+android
+[radialGrad]
+android
+[conicalGrad]
+android
+[renderPolyline]
+android
+[renderMultiline]
+android
+[polylineDataTypes]
+android
+[multilineDataTypes]
+android
+[multilineStronglyTyped]
+android
diff --git a/tests/auto/quick/qquickshape/CMakeLists.txt b/tests/auto/quick/qquickshape/CMakeLists.txt
index 325d812ed2..eaff007e8c 100644
--- a/tests/auto/quick/qquickshape/CMakeLists.txt
+++ b/tests/auto/quick/qquickshape/CMakeLists.txt
@@ -12,15 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickshape
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickshape.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -28,6 +20,7 @@ qt_internal_add_test(tst_qquickshape
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickShapesPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickshape/tst_qquickshape.cpp b/tests/auto/quick/qquickshape/tst_qquickshape.cpp
index 3a26f7e382..60b9df89f4 100644
--- a/tests/auto/quick/qquickshape/tst_qquickshape.cpp
+++ b/tests/auto/quick/qquickshape/tst_qquickshape.cpp
@@ -36,12 +36,12 @@
#include <QtQuickShapes/private/qquickshape_p.h>
#include <QStandardPaths>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
class PolygonProvider : public QObject
{
@@ -93,6 +93,7 @@ private:
};
tst_QQuickShape::tst_QQuickShape()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
// Force the software backend to get reliable rendering results regardless of the hw and drivers.
QQuickWindow::setGraphicsApi(QSGRendererInterface::Software);
@@ -288,12 +289,12 @@ void tst_QQuickShape::render()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("pathitem3.png").toLocalFile());
+ QImage refImg(testFile("pathitem3.png"));
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- QVERIFY2(QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage),
+ QVERIFY2(QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage),
qPrintable(errorMessage));
}
@@ -312,12 +313,12 @@ void tst_QQuickShape::renderWithMultipleSp()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("pathitem4.png").toLocalFile());
+ QImage refImg(testFile("pathitem4.png"));
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- QVERIFY2(QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage),
+ QVERIFY2(QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage),
qPrintable(errorMessage));
}
@@ -336,12 +337,12 @@ void tst_QQuickShape::radialGrad()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("pathitem5.png").toLocalFile());
+ QImage refImg(testFile("pathitem5.png"));
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- QVERIFY2(QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage),
+ QVERIFY2(QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage),
qPrintable(errorMessage));
}
@@ -360,12 +361,12 @@ void tst_QQuickShape::conicalGrad()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("pathitem6.png").toLocalFile());
+ QImage refImg(testFile("pathitem6.png"));
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- QVERIFY2(QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage),
+ QVERIFY2(QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage),
qPrintable(errorMessage));
}
@@ -384,12 +385,12 @@ void tst_QQuickShape::renderPolyline()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("pathitem3.png").toLocalFile()); // It's a recreation of pathitem3 using PathPolyline
+ QImage refImg(testFile("pathitem3.png")); // It's a recreation of pathitem3 using PathPolyline
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- const bool res = QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage);
+ const bool res = QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage);
if (!res) { // For visual inspection purposes.
QTest::qWait(5000);
const QString &tempLocation = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
@@ -413,12 +414,12 @@ void tst_QQuickShape::renderMultiline()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("pathitem8.png").toLocalFile());
+ QImage refImg(testFile("pathitem8.png"));
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- const bool res = QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage);
+ const bool res = QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage);
if (!res) { // For visual inspection purposes.
QTest::qWait(5000);
const QString &tempLocation = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
@@ -479,12 +480,12 @@ void tst_QQuickShape::polylineDataTypes()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("polyline.png").toLocalFile());
+ QImage refImg(testFile("polyline.png"));
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- const bool res = QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage);
+ const bool res = QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage);
if (!res) { // For visual inspection purposes.
QTest::qWait(5000);
const QString &tempLocation = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
@@ -630,12 +631,12 @@ void tst_QQuickShape::multilineDataTypes()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("multiline.png").toLocalFile());
+ QImage refImg(testFile("multiline.png"));
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- const bool res = QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage);
+ const bool res = QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage);
if (!res) { // For visual inspection purposes.
QTest::qWait(5000);
const QString &tempLocation = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
@@ -678,12 +679,12 @@ void tst_QQuickShape::multilineStronglyTyped()
QImage img = window->grabWindow();
QVERIFY(!img.isNull());
- QImage refImg(testFileUrl("multiline.png").toLocalFile());
+ QImage refImg(testFile("multiline.png"));
QVERIFY(!refImg.isNull());
QString errorMessage;
const QImage actualImg = img.convertToFormat(refImg.format());
- const bool res = QQuickVisualTestUtil::compareImages(actualImg, refImg, &errorMessage);
+ const bool res = QQuickVisualTestUtils::compareImages(actualImg, refImg, &errorMessage);
if (!res) { // For visual inspection purposes.
QTest::qWait(5000);
const QString &tempLocation = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
diff --git a/tests/auto/quick/qquickshortcut/CMakeLists.txt b/tests/auto/quick/qquickshortcut/CMakeLists.txt
index dda488abff..8887b9ba23 100644
--- a/tests/auto/quick/qquickshortcut/CMakeLists.txt
+++ b/tests/auto/quick/qquickshortcut/CMakeLists.txt
@@ -12,14 +12,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickshortcut
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickshortcut.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Qml
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickshortcut/tst_qquickshortcut.cpp b/tests/auto/quick/qquickshortcut/tst_qquickshortcut.cpp
index 6351b97fb3..0655b053e3 100644
--- a/tests/auto/quick/qquickshortcut/tst_qquickshortcut.cpp
+++ b/tests/auto/quick/qquickshortcut/tst_qquickshortcut.cpp
@@ -35,12 +35,15 @@
#include <QtQuickWidgets/qquickwidget.h>
#endif
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_QQuickShortcut : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_QQuickShortcut();
+
private slots:
void standardShortcuts_data();
void standardShortcuts();
@@ -83,6 +86,11 @@ static QVariant shortcutMap(const QVariant &key, bool enabled = true, bool autoR
return shortcutMap(key, Qt::WindowShortcut, enabled, autoRepeat);
}
+tst_QQuickShortcut::tst_QQuickShortcut()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_QQuickShortcut::standardShortcuts_data()
{
QTest::addColumn<QKeySequence::StandardKey>("standardKey");
diff --git a/tests/auto/quick/qquicksmoothedanimation/CMakeLists.txt b/tests/auto/quick/qquicksmoothedanimation/CMakeLists.txt
index f487e786ab..18dc389ad2 100644
--- a/tests/auto/quick/qquicksmoothedanimation/CMakeLists.txt
+++ b/tests/auto/quick/qquicksmoothedanimation/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicksmoothedanimation
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquicksmoothedanimation.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp b/tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp
index 14d2e858e8..fee7068825 100644
--- a/tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp
+++ b/tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp
@@ -31,7 +31,7 @@
#include <QtQuick/private/qquicksmoothedanimation_p.h>
#include <QtQuick/private/qquickrectangle_p.h>
#include <private/qqmlvaluetype_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquicksmoothedanimation : public QQmlDataTest
{
@@ -55,6 +55,7 @@ private:
};
tst_qquicksmoothedanimation::tst_qquicksmoothedanimation()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/quick/qquickspringanimation/CMakeLists.txt b/tests/auto/quick/qquickspringanimation/CMakeLists.txt
index b90f76cdf6..04fa4fde53 100644
--- a/tests/auto/quick/qquickspringanimation/CMakeLists.txt
+++ b/tests/auto/quick/qquickspringanimation/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickspringanimation
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickspringanimation.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickspringanimation/tst_qquickspringanimation.cpp b/tests/auto/quick/qquickspringanimation/tst_qquickspringanimation.cpp
index 9042e94c75..6e545e62f2 100644
--- a/tests/auto/quick/qquickspringanimation/tst_qquickspringanimation.cpp
+++ b/tests/auto/quick/qquickspringanimation/tst_qquickspringanimation.cpp
@@ -31,7 +31,7 @@
#include <QtQuick/qquickview.h>
#include <private/qquickspringanimation_p.h>
#include <private/qqmlvaluetype_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquickspringanimation : public QQmlDataTest
{
@@ -50,6 +50,7 @@ private:
};
tst_qquickspringanimation::tst_qquickspringanimation()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/quick/qquickspritesequence/CMakeLists.txt b/tests/auto/quick/qquickspritesequence/CMakeLists.txt
index 3955536260..27aac12df1 100644
--- a/tests/auto/quick/qquickspritesequence/CMakeLists.txt
+++ b/tests/auto/quick/qquickspritesequence/CMakeLists.txt
@@ -12,10 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickspritesequence
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickspritesequence.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -23,6 +20,7 @@ qt_internal_add_test(tst_qquickspritesequence
Qt::Network
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickspritesequence/tst_qquickspritesequence.cpp b/tests/auto/quick/qquickspritesequence/tst_qquickspritesequence.cpp
index e5d55a6871..6af58990f7 100644
--- a/tests/auto/quick/qquickspritesequence/tst_qquickspritesequence.cpp
+++ b/tests/auto/quick/qquickspritesequence/tst_qquickspritesequence.cpp
@@ -26,7 +26,7 @@
**
****************************************************************************/
#include <QtTest/QtTest>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtQuick/qquickview.h>
#include <private/qquickspritesequence_p.h>
@@ -34,7 +34,7 @@ class tst_qquickspritesequence : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickspritesequence(){}
+ tst_qquickspritesequence() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private slots:
void test_properties();
diff --git a/tests/auto/quick/qquickstates/CMakeLists.txt b/tests/auto/quick/qquickstates/CMakeLists.txt
index 00b259e763..657e11b392 100644
--- a/tests/auto/quick/qquickstates/CMakeLists.txt
+++ b/tests/auto/quick/qquickstates/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickstates
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickstates.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickstates/data/anchorRewind.qml b/tests/auto/quick/qquickstates/data/anchorRewind.qml
new file mode 100644
index 0000000000..740c94cf42
--- /dev/null
+++ b/tests/auto/quick/qquickstates/data/anchorRewind.qml
@@ -0,0 +1,31 @@
+import QtQuick
+
+Item {
+ width: 400
+ height: 400
+ Item {
+ id: outer
+ anchors.fill: parent
+ Item {
+ id: inner
+ width: parent.width / 2
+ height: parent.height / 2
+ anchors.left: parent.right
+ anchors.top: parent.bottom
+ }
+ states: [
+ State {
+ when: true
+ AnchorChanges {
+ target: inner
+ anchors.left: outer.left
+ anchors.top: outer.top
+ }
+ }
+ ]
+ transitions: Transition {
+ AnchorAnimation {}
+ }
+ }
+}
+
diff --git a/tests/auto/quick/qquickstates/data/noStateOsciallation.qml b/tests/auto/quick/qquickstates/data/noStateOsciallation.qml
new file mode 100644
index 0000000000..f0d7aeeb6d
--- /dev/null
+++ b/tests/auto/quick/qquickstates/data/noStateOsciallation.qml
@@ -0,0 +1,22 @@
+import QtQuick 2.15
+
+Item {
+ id: root
+ property int number: 2
+ property int stateChangeCounter: 0
+
+ Item {
+ id: item
+ onStateChanged: ++stateChangeCounter
+ states: [
+ State {
+ name: "n1"
+ when: root.number === 1
+ },
+ State {
+ name: "n2"
+ when: root.number === 2
+ }
+ ]
+ }
+}
diff --git a/tests/auto/quick/qquickstates/data/parentChangeInvolvingBindings.qml b/tests/auto/quick/qquickstates/data/parentChangeInvolvingBindings.qml
new file mode 100644
index 0000000000..d3873883cd
--- /dev/null
+++ b/tests/auto/quick/qquickstates/data/parentChangeInvolvingBindings.qml
@@ -0,0 +1,43 @@
+import QtQuick
+
+Item {
+ id: root
+ property alias childWidth: firstChild.width
+ property alias childX: firstChild.x
+ property alias childRotation: firstChild.rotation
+ property double myrotation: 100
+ property double myrotation2: 200
+ height: 400
+ y: 40
+
+ Item {
+ id: firstChild
+ height: parent.height
+ width: height
+ y: parent.y
+ x: y
+ rotation: root.myrotation
+
+ Item {
+ id: inner
+ anchors.fill: parent
+ }
+ }
+
+ states: State {
+ name: "reparented"
+ ParentChange {
+ target: firstChild
+ parent: otherChild
+ width: 2 *height
+ x: 2 * y
+ rotation: root.myrotation2
+ }
+ }
+
+ Item {
+ height: parent.height
+ y: parent.y
+ id: otherChild
+ }
+}
diff --git a/tests/auto/quick/qquickstates/tst_qquickstates.cpp b/tests/auto/quick/qquickstates/tst_qquickstates.cpp
index c565ec3a83..92c66211f4 100644
--- a/tests/auto/quick/qquickstates/tst_qquickstates.cpp
+++ b/tests/auto/quick/qquickstates/tst_qquickstates.cpp
@@ -37,7 +37,8 @@
#include <QtQuick/private/qquickstategroup_p.h>
#include <private/qquickitem_p.h>
#include <private/qqmlproperty_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtTest/qsignalspy.h>
class MyAttached : public QObject
{
@@ -143,7 +144,7 @@ class tst_qquickstates : public QQmlDataTest
{
Q_OBJECT
public:
- tst_qquickstates() {}
+ tst_qquickstates() : QQmlDataTest(QT_QMLTEST_DATADIR) {}
private:
QByteArray fullDataPath(const QString &path) const;
@@ -199,9 +200,12 @@ private slots:
void revertListMemoryLeak();
void duplicateStateName();
void trivialWhen();
+ void noStateOsciallation();
void parentChangeCorrectReversal();
void revertNullObjectBinding();
void bindableProperties();
+ void parentChangeInvolvingBindings();
+ void rewindAnchorChange();
};
void tst_qquickstates::initTestCase()
@@ -1713,6 +1717,20 @@ void tst_qquickstates::trivialWhen()
QVERIFY(root);
}
+void tst_qquickstates::noStateOsciallation()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("noStateOsciallation.qml"));
+ QScopedPointer<QObject> root {component.create()};
+ QVERIFY(root);
+ // set to 1 on initial transition from "" to "n2"
+ QCOMPARE(root->property("stateChangeCounter").toInt(), 1);
+ root->setProperty("number", 1);
+ // setting number to 1 changes directly from "n2" to "n1"
+ // without any intermediate transition to ""
+ QCOMPARE(root->property("stateChangeCounter").toInt(), 2);
+}
+
void tst_qquickstates::parentChangeCorrectReversal()
{
QQmlEngine engine;
@@ -1779,6 +1797,150 @@ void tst_qquickstates::bindableProperties()
}
}
+struct Listener : QQuickItemChangeListener
+{
+ // We want to get notified about all the states.
+ constexpr static const QRectF expectations[] = {
+ QRectF(40, 40, 400, 400),
+ QRectF(40, 0, 400, 400),
+ QRectF(0, 0, 400, 400),
+ QRectF(0, 0, 800, 400),
+ QRectF(0, 0, 800, 200),
+ QRectF(0, 0, 400, 200),
+ QRectF(0, 20, 400, 200),
+ QRectF(40, 20, 400, 200),
+ QRectF(84, 42, 400, 200),
+ QRectF(84, 42, 86, 43),
+ QRectF(40, 40, 86, 43),
+ QRectF(40, 40, 400, 400),
+ QRectF(40, 20, 400, 400),
+ QRectF(40, 20, 400, 200),
+ QRectF(20, 20, 400, 200),
+ QRectF(20, 20, 200, 200),
+ QRectF(20, 20, 200, 300),
+ QRectF(20, 20, 300, 300),
+ QRectF(20, 30, 300, 300),
+ QRectF(30, 30, 300, 300),
+ };
+
+ int position = 0;
+ bool ok = true;
+
+ void itemGeometryChanged(QQuickItem *, QQuickGeometryChange, const QRectF &rect) override
+ {
+ if (rect != expectations[position]) {
+ qDebug() << position << rect;
+ ok = false;
+ }
+ ++position;
+ }
+};
+
+void tst_qquickstates::parentChangeInvolvingBindings()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("parentChangeInvolvingBindings.qml"));
+ QScopedPointer<QQuickItem> root { qobject_cast<QQuickItem *>(c.create()) };
+ QVERIFY2(root, qPrintable(c.errorString()));
+
+ QObject *child = qmlContext(root.data())->objectForName(QStringLiteral("firstChild"));
+ QVERIFY(child);
+ QQuickItem *childItem = qobject_cast<QQuickItem *>(child);
+ QVERIFY(childItem);
+ Listener listener;
+ QQuickItemPrivate::get(childItem)->addItemChangeListener(&listener, QQuickItemPrivate::Geometry);
+
+
+ QCOMPARE(root->property("childWidth").toInt(), 400);
+ QCOMPARE(root->property("childX").toInt(), 40);
+ QCOMPARE(root->property("childRotation").toInt(), 100);
+ root->setState("reparented");
+
+ QCOMPARE(root->property("childWidth").toInt(), 800);
+ QCOMPARE(root->property("childX").toInt(), 0); // x gets zeroed here, from unrelated place.
+ QCOMPARE(root->property("childRotation").toInt(), 200);
+
+ root->setProperty("myrotation2", 300);
+ root->setHeight(200);
+ root->setY(20);
+ QCOMPARE(root->property("childRotation").toInt(), 300);
+ QCOMPARE(root->property("childWidth").toInt(), 400);
+ QCOMPARE(root->property("childX").toInt(), 40);
+
+ QObject *inner = qmlContext(root.data())->objectForName(QStringLiteral("inner"));
+ QVERIFY(inner);
+ QQuickItem *innerItem = qobject_cast<QQuickItem *>(inner);
+ QVERIFY(innerItem);
+
+ QCOMPARE(innerItem->size(), childItem->size());
+
+ // Does not break bindings and does not survive the state change.
+ // However, since the binding between x and y stays intact, we don't know
+ // whether x is set another time from the new y. We pass a pair of numbers that
+ // matches the binding.
+ childItem->setPosition(QPointF(84, 42));
+ QCOMPARE(root->property("childX").toInt(), 84);
+ QVERIFY(listener.ok);
+ childItem->setSize(QSizeF(86, 43));
+ QCOMPARE(root->property("childWidth").toInt(), 86);
+ QVERIFY(listener.ok);
+
+ QCOMPARE(innerItem->size(), childItem->size());
+
+ QSignalSpy xSpy(childItem, SIGNAL(xChanged()));
+ QSignalSpy widthSpy(childItem, SIGNAL(widthChanged()));
+
+ root->setState("");
+
+ QVERIFY(listener.ok);
+ QCOMPARE(root->property("childRotation").toInt(), 100);
+
+ // First change to 40 via reverse(), then to 20 via binding.
+ QCOMPARE(xSpy.count(), 2);
+
+ // First change to 400 via reverse(), then to 200 via binding.
+ QCOMPARE(widthSpy.count(), 2);
+
+ QCOMPARE(root->property("childX").toInt(), 20);
+ QCOMPARE(root->property("childWidth").toInt(), 200);
+
+ QCOMPARE(innerItem->size(), childItem->size());
+
+ root->setProperty("myrotation", 50);
+ root->setHeight(300);
+ QVERIFY(listener.ok);
+ root->setY(30);
+ QVERIFY(listener.ok);
+ QCOMPARE(root->property("childWidth").toInt(), 300);
+ QCOMPARE(root->property("childX").toInt(), 30);
+ QCOMPARE(root->property("childRotation").toInt(), 50);
+
+ QCOMPARE(innerItem->size(), childItem->size());
+}
+
+void tst_qquickstates::rewindAnchorChange()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("anchorRewind.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> root(c.create());
+ QVERIFY(root);
+
+ QQmlContext *context = qmlContext(root.data());
+ QVERIFY(context);
+
+ QObject *inner = context->objectForName(QStringLiteral("inner"));
+ QVERIFY(inner);
+
+ QQuickItem *innerRect = qobject_cast<QQuickItem *>(inner);
+ QVERIFY(innerRect);
+
+ QTRY_COMPARE(innerRect->x(), 0);
+ QTRY_COMPARE(innerRect->y(), 0);
+ QTRY_COMPARE(innerRect->width(), 200);
+ QTRY_COMPARE(innerRect->height(), 200);
+}
+
QTEST_MAIN(tst_qquickstates)
#include "tst_qquickstates.moc"
diff --git a/tests/auto/quick/qquicksystempalette/CMakeLists.txt b/tests/auto/quick/qquicksystempalette/CMakeLists.txt
index 5951dc1d07..45b527ce50 100644
--- a/tests/auto/quick/qquicksystempalette/CMakeLists.txt
+++ b/tests/auto/quick/qquicksystempalette/CMakeLists.txt
@@ -4,6 +4,12 @@
## tst_qquicksystempalette Test:
#####################################################################
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
qt_internal_add_test(tst_qquicksystempalette
SOURCES
tst_qquicksystempalette.cpp
@@ -13,6 +19,8 @@ qt_internal_add_test(tst_qquicksystempalette
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
## Scopes:
@@ -22,3 +30,13 @@ qt_internal_extend_target(tst_qquicksystempalette CONDITION TARGET Qt::Widgets
PUBLIC_LIBRARIES
Qt::Widgets
)
+
+qt_internal_extend_target(tst_qquicksystempalette CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquicksystempalette CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quick/qquicksystempalette/data/systemPalette.qml b/tests/auto/quick/qquicksystempalette/data/systemPalette.qml
new file mode 100644
index 0000000000..3a1395ec18
--- /dev/null
+++ b/tests/auto/quick/qquicksystempalette/data/systemPalette.qml
@@ -0,0 +1,4 @@
+import QtQuick 2.0
+
+SystemPalette {
+}
diff --git a/tests/auto/quick/qquicksystempalette/data/systemPaletteDisabled.qml b/tests/auto/quick/qquicksystempalette/data/systemPaletteDisabled.qml
new file mode 100644
index 0000000000..3eaeac8985
--- /dev/null
+++ b/tests/auto/quick/qquicksystempalette/data/systemPaletteDisabled.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+
+SystemPalette {
+ colorGroup: SystemPalette.Disabled
+}
diff --git a/tests/auto/quick/qquicksystempalette/data/systemPaletteInactive.qml b/tests/auto/quick/qquicksystempalette/data/systemPaletteInactive.qml
new file mode 100644
index 0000000000..f43e7073c6
--- /dev/null
+++ b/tests/auto/quick/qquicksystempalette/data/systemPaletteInactive.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+
+SystemPalette {
+ colorGroup: SystemPalette.Inactive
+}
diff --git a/tests/auto/quick/qquicksystempalette/tst_qquicksystempalette.cpp b/tests/auto/quick/qquicksystempalette/tst_qquicksystempalette.cpp
index 071dcafc97..b18a2cc666 100644
--- a/tests/auto/quick/qquicksystempalette/tst_qquicksystempalette.cpp
+++ b/tests/auto/quick/qquicksystempalette/tst_qquicksystempalette.cpp
@@ -32,8 +32,9 @@
#include <QtQml/qqmlcomponent.h>
#include <QtQuick/private/qquicksystempalette_p.h>
#include <qpalette.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
-class tst_qquicksystempalette : public QObject
+class tst_qquicksystempalette : public QQmlDataTest
{
Q_OBJECT
public:
@@ -51,15 +52,11 @@ private:
QQmlEngine engine;
};
-tst_qquicksystempalette::tst_qquicksystempalette()
-{
-}
+tst_qquicksystempalette::tst_qquicksystempalette() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
void tst_qquicksystempalette::activePalette()
{
- QString componentStr = "import QtQuick 2.0\nSystemPalette { }";
- QQmlComponent component(&engine);
- component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QQmlComponent component(&engine, testFileUrl("systemPalette.qml"));
QQuickSystemPalette *object = qobject_cast<QQuickSystemPalette*>(component.create());
QVERIFY(object != nullptr);
@@ -86,9 +83,7 @@ void tst_qquicksystempalette::activePalette()
void tst_qquicksystempalette::inactivePalette()
{
- QString componentStr = "import QtQuick 2.0\nSystemPalette { colorGroup: SystemPalette.Inactive }";
- QQmlComponent component(&engine);
- component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QQmlComponent component(&engine, testFileUrl("systemPaletteInactive.qml"));
QQuickSystemPalette *object = qobject_cast<QQuickSystemPalette*>(component.create());
QVERIFY(object != nullptr);
@@ -116,9 +111,7 @@ void tst_qquicksystempalette::inactivePalette()
void tst_qquicksystempalette::disabledPalette()
{
- QString componentStr = "import QtQuick 2.0\nSystemPalette { colorGroup: SystemPalette.Disabled }";
- QQmlComponent component(&engine);
- component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QQmlComponent component(&engine, testFileUrl("systemPaletteDisabled.qml"));
QQuickSystemPalette *object = qobject_cast<QQuickSystemPalette*>(component.create());
QVERIFY(object != nullptr);
@@ -147,9 +140,7 @@ void tst_qquicksystempalette::disabledPalette()
#ifndef QT_NO_WIDGETS
void tst_qquicksystempalette::paletteChanged()
{
- QString componentStr = "import QtQuick 2.0\nSystemPalette { }";
- QQmlComponent component(&engine);
- component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QQmlComponent component(&engine, testFileUrl("systemPalette.qml"));
QQuickSystemPalette *object = qobject_cast<QQuickSystemPalette*>(component.create());
QVERIFY(object != nullptr);
diff --git a/tests/auto/quick/qquicktableview/CMakeLists.txt b/tests/auto/quick/qquicktableview/CMakeLists.txt
index 04842aaae2..708d2cd516 100644
--- a/tests/auto/quick/qquicktableview/CMakeLists.txt
+++ b/tests/auto/quick/qquicktableview/CMakeLists.txt
@@ -12,16 +12,8 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktableview
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
testmodel.h
tst_qquicktableview.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -30,6 +22,7 @@ qt_internal_add_test(tst_qquicktableview
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquicktableview/data/syncviewsimple.qml b/tests/auto/quick/qquicktableview/data/syncviewsimple.qml
index 012cceaa9d..fc75e97a0f 100644
--- a/tests/auto/quick/qquicktableview/data/syncviewsimple.qml
+++ b/tests/auto/quick/qquicktableview/data/syncviewsimple.qml
@@ -49,6 +49,9 @@ Item {
property alias tableViewV: tableViewV
property alias tableViewHV: tableViewHV
+ property real delegateWidth: 30
+ property real delegateHeight: 60
+
Column {
spacing: 10
TableView {
@@ -93,7 +96,7 @@ Item {
height: 100
anchors.margins: 1
clip: true
- delegate: tableViewDelegate
+ delegate: tableViewDelegateMainView
columnSpacing: 1
rowSpacing: 1
@@ -106,10 +109,27 @@ Item {
id: tableViewDelegate
Rectangle {
objectName: "tableViewDelegate"
+ color: "lightblue"
+ border.width: 1
+ implicitWidth: 100
+ implicitHeight: 100
+
+ Text {
+ anchors.centerIn: parent
+ font.pixelSize: 10
+ text: parent.TableView.view.objectName + "\n" + column + ", " + row
+ }
+ }
+ }
+
+ Component {
+ id: tableViewDelegateMainView
+ Rectangle {
+ objectName: "tableViewDelegate"
color: "lightgray"
border.width: 1
- implicitWidth: 30
- implicitHeight: 60
+ implicitWidth: delegateWidth
+ implicitHeight: delegateHeight
Text {
anchors.centerIn: parent
diff --git a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
index 340c44fdb5..04670837d6 100644
--- a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
+++ b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
@@ -43,12 +43,12 @@
#include "testmodel.h"
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
-using namespace QQuickViewTestUtil;
-using namespace QQuickVisualTestUtil;
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
static const char* kDelegateObjectName = "tableViewDelegate";
static const char *kDelegatesCreatedCountProp = "delegatesCreatedCount";
@@ -73,7 +73,7 @@ Q_DECLARE_METATYPE(QMarginsF);
view->show(); \
QVERIFY(QTest::qWaitForWindowActive(view)); \
auto loader = view->rootObject()->property("loader").value<QQuickLoader *>(); \
- loader->setSource(QUrl::fromLocalFile("data/" fileName)); \
+ loader->setSource(testFileUrl(fileName)); \
QTRY_VERIFY(loader->item()); \
QCOMPARE(loader->status(), QQuickLoader::Status::Ready); \
GET_QML_TABLEVIEW(tableView)
@@ -179,10 +179,12 @@ private slots:
void checkSyncView_childViews_data();
void checkSyncView_childViews();
void checkSyncView_differentSizedModels();
+ void checkSyncView_differentGeometry();
void checkSyncView_connect_late_data();
void checkSyncView_connect_late();
void checkSyncView_pageFlicking();
void checkSyncView_emptyModel();
+ void checkSyncView_topLeftChanged();
void delegateWithRequiredProperties();
void checkThatFetchMoreIsCalledWhenScrolledToTheEndOfTable();
void replaceModel();
@@ -192,6 +194,10 @@ private slots:
void positionViewAtRow();
void positionViewAtColumn_data();
void positionViewAtColumn();
+ void positionViewAtRowClamped_data();
+ void positionViewAtRowClamped();
+ void positionViewAtColumnClamped_data();
+ void positionViewAtColumnClamped();
void itemAtCell_data();
void itemAtCell();
void leftRightTopBottomProperties_data();
@@ -209,6 +215,7 @@ private slots:
};
tst_QQuickTableView::tst_QQuickTableView()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -2637,6 +2644,18 @@ void tst_QQuickTableView::checkSyncView_rootView()
QCOMPARE(tableViewVPrivate->loadedTableOuterRect.left(), 0);
QCOMPARE(tableViewHVPrivate->loadedTableOuterRect, tableViewPrivate->loadedTableOuterRect);
+
+ // Check that the column widths are in sync
+ for (int column = tableView->leftColumn(); column < tableView->rightColumn(); ++column) {
+ QCOMPARE(tableViewH->columnWidth(column), tableView->columnWidth(column));
+ QCOMPARE(tableViewHV->columnWidth(column), tableView->columnWidth(column));
+ }
+
+ // Check that the row heights are in sync
+ for (int row = tableView->topRow(); row < tableView->bottomRow(); ++row) {
+ QCOMPARE(tableViewV->rowHeight(row), tableView->rowHeight(row));
+ QCOMPARE(tableViewHV->rowHeight(row), tableView->rowHeight(row));
+ }
}
void tst_QQuickTableView::checkSyncView_childViews_data()
@@ -2742,6 +2761,18 @@ void tst_QQuickTableView::checkSyncView_childViews()
QCOMPARE(tableViewHVPrivate->bottomRow(), tableViewPrivate->bottomRow());
QCOMPARE(tableViewHVPrivate->loadedTableOuterRect, tableViewPrivate->loadedTableOuterRect);
}
+
+ // Check that the column widths are in sync
+ for (int column = tableView->leftColumn(); column < tableView->rightColumn(); ++column) {
+ QCOMPARE(tableViewH->columnWidth(column), tableView->columnWidth(column));
+ QCOMPARE(tableViewHV->columnWidth(column), tableView->columnWidth(column));
+ }
+
+ // Check that the row heights are in sync
+ for (int row = tableView->topRow(); row < tableView->bottomRow(); ++row) {
+ QCOMPARE(tableViewV->rowHeight(row), tableView->rowHeight(row));
+ QCOMPARE(tableViewHV->rowHeight(row), tableView->rowHeight(row));
+ }
}
void tst_QQuickTableView::checkSyncView_differentSizedModels()
@@ -2807,6 +2838,61 @@ void tst_QQuickTableView::checkSyncView_differentSizedModels()
QVERIFY(tableViewHVPrivate->loadedColumns.isEmpty());
}
+void tst_QQuickTableView::checkSyncView_differentGeometry()
+{
+ // Check that you can have two tables in a syncView relation, where
+ // the sync "child" is larger than the sync view. This means that the
+ // child will display more rows and columns than the parent.
+ // In that case, the sync view will anyway need to load the same rows
+ // and columns as the child, otherwise the column and row sizes
+ // cannot be determined for the child.
+ LOAD_TABLEVIEW("syncviewsimple.qml");
+ GET_QML_TABLEVIEW(tableViewH);
+ GET_QML_TABLEVIEW(tableViewV);
+ GET_QML_TABLEVIEW(tableViewHV);
+
+ tableView->setWidth(40);
+ tableView->setHeight(40);
+
+ auto tableViewModel = TestModelAsVariant(100, 100);
+
+ tableView->setModel(tableViewModel);
+ tableViewH->setModel(tableViewModel);
+ tableViewV->setModel(tableViewModel);
+ tableViewHV->setModel(tableViewModel);
+
+ WAIT_UNTIL_POLISHED;
+
+ // Check that the column widths are in sync
+ for (int column = tableViewH->leftColumn(); column < tableViewH->rightColumn(); ++column) {
+ QCOMPARE(tableViewH->columnWidth(column), tableView->columnWidth(column));
+ QCOMPARE(tableViewHV->columnWidth(column), tableView->columnWidth(column));
+ }
+
+ // Check that the row heights are in sync
+ for (int row = tableViewV->topRow(); row < tableViewV->bottomRow(); ++row) {
+ QCOMPARE(tableViewV->rowHeight(row), tableView->rowHeight(row));
+ QCOMPARE(tableViewHV->rowHeight(row), tableView->rowHeight(row));
+ }
+
+ // Flick a bit, and do the same test again
+ tableView->setContentX(200);
+ tableView->setContentY(200);
+ WAIT_UNTIL_POLISHED;
+
+ // Check that the column widths are in sync
+ for (int column = tableViewH->leftColumn(); column < tableViewH->rightColumn(); ++column) {
+ QCOMPARE(tableViewH->columnWidth(column), tableView->columnWidth(column));
+ QCOMPARE(tableViewHV->columnWidth(column), tableView->columnWidth(column));
+ }
+
+ // Check that the row heights are in sync
+ for (int row = tableViewV->topRow(); row < tableViewV->bottomRow(); ++row) {
+ QCOMPARE(tableViewV->rowHeight(row), tableView->rowHeight(row));
+ QCOMPARE(tableViewHV->rowHeight(row), tableView->rowHeight(row));
+ }
+}
+
void tst_QQuickTableView::checkSyncView_connect_late_data()
{
QTest::addColumn<qreal>("flickToPos");
@@ -2974,6 +3060,42 @@ void tst_QQuickTableView::checkSyncView_emptyModel()
QCOMPARE(tableViewVPrivate->loadedTableOuterRect.left(), 0);
}
+void tst_QQuickTableView::checkSyncView_topLeftChanged()
+{
+ LOAD_TABLEVIEW("syncviewsimple.qml");
+ GET_QML_TABLEVIEW(tableViewH);
+ GET_QML_TABLEVIEW(tableViewV);
+ GET_QML_TABLEVIEW(tableViewHV);
+ QQuickTableView *views[] = {tableViewH, tableViewV, tableViewHV};
+
+ auto model = TestModelAsVariant(100, 100);
+ tableView->setModel(model);
+
+ for (auto view : views)
+ view->setModel(model);
+
+ tableView->setColumnWidthProvider(QJSValue());
+ tableView->setRowHeightProvider(QJSValue());
+ view->rootObject()->setProperty("delegateWidth", 300);
+ view->rootObject()->setProperty("delegateHeight", 300);
+ tableView->forceLayout();
+
+ tableViewHV->setContentX(350);
+ tableViewHV->setContentY(350);
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewH->leftColumn(), tableView->leftColumn());
+ QCOMPARE(tableViewV->topRow(), tableView->topRow());
+
+ view->rootObject()->setProperty("delegateWidth", 50);
+ view->rootObject()->setProperty("delegateHeight", 50);
+ tableView->forceLayout();
+
+ QCOMPARE(tableViewH->leftColumn(), tableView->leftColumn());
+ QCOMPARE(tableViewV->topRow(), tableView->topRow());
+}
+
void tst_QQuickTableView::checkThatFetchMoreIsCalledWhenScrolledToTheEndOfTable()
{
LOAD_TABLEVIEW("plaintableview.qml");
@@ -3137,48 +3259,30 @@ void tst_QQuickTableView::positionViewAtRow_data()
QTest::newRow("AlignTop 1") << 1 << Qt::AlignTop << 0. << 50.;
QTest::newRow("AlignTop 50") << 50 << Qt::AlignTop << 0. << -1.;
QTest::newRow("AlignTop 0") << 0 << Qt::AlignTop << 0. << -1.;
- QTest::newRow("AlignTop 99") << 99 << Qt::AlignTop << 0. << -1.;
-
- QTest::newRow("AlignTop 0") << 0 << Qt::AlignTop << -10. << 0.;
QTest::newRow("AlignTop 1") << 1 << Qt::AlignTop << -10. << 0.;
QTest::newRow("AlignTop 1") << 1 << Qt::AlignTop << -10. << 50.;
QTest::newRow("AlignTop 50") << 50 << Qt::AlignTop << -10. << -1.;
- QTest::newRow("AlignTop 0") << 0 << Qt::AlignTop << -10. << -1.;
- QTest::newRow("AlignTop 99") << 99 << Qt::AlignTop << -10. << -1.;
- QTest::newRow("AlignBottom 0") << 0 << Qt::AlignBottom << 0. << 0.;
- QTest::newRow("AlignBottom 1") << 1 << Qt::AlignBottom << 0. << 0.;
- QTest::newRow("AlignBottom 1") << 1 << Qt::AlignBottom << 0. << 50.;
QTest::newRow("AlignBottom 50") << 50 << Qt::AlignBottom << 0. << -1.;
- QTest::newRow("AlignBottom 0") << 0 << Qt::AlignBottom << 0. << -1.;
+ QTest::newRow("AlignBottom 98") << 98 << Qt::AlignBottom << 0. << -1.;
QTest::newRow("AlignBottom 99") << 99 << Qt::AlignBottom << 0. << -1.;
+ QTest::newRow("AlignBottom 50") << 40 << Qt::AlignBottom << 10. << -1.;
+ QTest::newRow("AlignBottom 40") << 50 << Qt::AlignBottom << -10. << -1.;
+ QTest::newRow("AlignBottom 98") << 98 << Qt::AlignBottom << 10. << -1.;
+ QTest::newRow("AlignBottom 99") << 99 << Qt::AlignBottom << -10. << -1.;
- QTest::newRow("AlignBottom 0") << 0 << Qt::AlignBottom << 10. << 0.;
- QTest::newRow("AlignBottom 1") << 1 << Qt::AlignBottom << 10. << 0.;
- QTest::newRow("AlignBottom 1") << 1 << Qt::AlignBottom << 10. << 50.;
- QTest::newRow("AlignBottom 50") << 50 << Qt::AlignBottom << 10. << -1.;
- QTest::newRow("AlignBottom 0") << 0 << Qt::AlignBottom << 10. << -1.;
- QTest::newRow("AlignBottom 99") << 99 << Qt::AlignBottom << 10. << -1.;
-
- QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << 0. << 0.;
- QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << 0. << 0.;
- QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << 0. << 50.;
+ QTest::newRow("AlignCenter 40") << 40 << Qt::AlignCenter << 0. << -1.;
QTest::newRow("AlignCenter 50") << 50 << Qt::AlignCenter << 0. << -1.;
- QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << 0. << -1.;
- QTest::newRow("AlignCenter 99") << 99 << Qt::AlignCenter << 0. << -1.;
-
- QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << -10. << 0.;
- QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << -10. << 0.;
- QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << -10. << 50.;
+ QTest::newRow("AlignCenter 40") << 40 << Qt::AlignCenter << 10. << -1.;
QTest::newRow("AlignCenter 50") << 50 << Qt::AlignCenter << -10. << -1.;
- QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << -10. << -1.;
- QTest::newRow("AlignCenter 99") << 99 << Qt::AlignCenter << -10. << -1.;
}
void tst_QQuickTableView::positionViewAtRow()
{
// Check that positionViewAtRow actually flicks the view
- // to the right position so that the row becomes visible
+ // to the right position so that the row becomes visible.
+ // For this test, we only check cells that can be placed exactly
+ // according to the given alignment.
QFETCH(int, row);
QFETCH(Qt::AlignmentFlag, alignment);
QFETCH(qreal, offset);
@@ -3228,48 +3332,27 @@ void tst_QQuickTableView::positionViewAtColumn_data()
QTest::newRow("AlignLeft 1") << 1 << Qt::AlignLeft << 0. << 50.;
QTest::newRow("AlignLeft 50") << 50 << Qt::AlignLeft << 0. << -1.;
QTest::newRow("AlignLeft 0") << 0 << Qt::AlignLeft << 0. << -1.;
- QTest::newRow("AlignLeft 99") << 99 << Qt::AlignLeft << 0. << -1.;
-
- QTest::newRow("AlignLeft 0") << 0 << Qt::AlignLeft << -10. << 0.;
QTest::newRow("AlignLeft 1") << 1 << Qt::AlignLeft << -10. << 0.;
QTest::newRow("AlignLeft 1") << 1 << Qt::AlignLeft << -10. << 50.;
QTest::newRow("AlignLeft 50") << 50 << Qt::AlignLeft << -10. << -1.;
- QTest::newRow("AlignLeft 0") << 0 << Qt::AlignLeft << -10. << -1.;
- QTest::newRow("AlignLeft 99") << 99 << Qt::AlignLeft << -10. << -1.;
- QTest::newRow("AlignRight 0") << 0 << Qt::AlignRight << 0. << 0.;
- QTest::newRow("AlignRight 1") << 1 << Qt::AlignRight << 0. << 0.;
- QTest::newRow("AlignRight 1") << 1 << Qt::AlignRight << 0. << 50.;
QTest::newRow("AlignRight 50") << 50 << Qt::AlignRight << 0. << -1.;
- QTest::newRow("AlignRight 0") << 0 << Qt::AlignRight << 0. << -1.;
QTest::newRow("AlignRight 99") << 99 << Qt::AlignRight << 0. << -1.;
-
- QTest::newRow("AlignRight 0") << 0 << Qt::AlignRight << 10. << 0.;
- QTest::newRow("AlignRight 1") << 1 << Qt::AlignRight << 10. << 0.;
- QTest::newRow("AlignRight 1") << 1 << Qt::AlignRight << 10. << 50.;
QTest::newRow("AlignRight 50") << 50 << Qt::AlignRight << 10. << -1.;
- QTest::newRow("AlignRight 0") << 0 << Qt::AlignRight << 10. << -1.;
- QTest::newRow("AlignRight 99") << 99 << Qt::AlignRight << 10. << -1.;
+ QTest::newRow("AlignRight 99") << 99 << Qt::AlignRight << -10. << -1.;
- QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << 0. << 0.;
- QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << 0. << 0.;
- QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << 0. << 50.;
+ QTest::newRow("AlignCenter 40") << 50 << Qt::AlignCenter << 0. << -1.;
QTest::newRow("AlignCenter 50") << 50 << Qt::AlignCenter << 0. << -1.;
- QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << 0. << -1.;
- QTest::newRow("AlignCenter 99") << 99 << Qt::AlignCenter << 0. << -1.;
-
- QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << -10. << 0.;
- QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << -10. << 0.;
- QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << -10. << 50.;
+ QTest::newRow("AlignCenter 40") << 50 << Qt::AlignCenter << 10. << -1.;
QTest::newRow("AlignCenter 50") << 50 << Qt::AlignCenter << -10. << -1.;
- QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << -10. << -1.;
- QTest::newRow("AlignCenter 99") << 99 << Qt::AlignCenter << -10. << -1.;
}
void tst_QQuickTableView::positionViewAtColumn()
{
// Check that positionViewAtColumn actually flicks the view
- // to the right position so that the row becomes visible
+ // to the right position so that the row becomes visible.
+ // For this test, we only check cells that can be placed exactly
+ // according to the given alignment.
QFETCH(int, column);
QFETCH(Qt::AlignmentFlag, alignment);
QFETCH(qreal, offset);
@@ -3307,6 +3390,134 @@ void tst_QQuickTableView::positionViewAtColumn()
}
}
+void tst_QQuickTableView::positionViewAtRowClamped_data()
+{
+ QTest::addColumn<int>("row");
+ QTest::addColumn<Qt::AlignmentFlag>("alignment");
+ QTest::addColumn<qreal>("offset");
+ QTest::addColumn<qreal>("contentYStartPos");
+
+ QTest::newRow("AlignTop 0") << 0 << Qt::AlignTop << -10. << 0.;
+ QTest::newRow("AlignTop 0") << 0 << Qt::AlignTop << -10. << -1.;
+ QTest::newRow("AlignTop 99") << 99 << Qt::AlignTop << 0. << -1.;
+ QTest::newRow("AlignTop 99") << 99 << Qt::AlignTop << -10. << -1.;
+
+ QTest::newRow("AlignBottom 0") << 0 << Qt::AlignBottom << 0. << 0.;
+ QTest::newRow("AlignBottom 1") << 1 << Qt::AlignBottom << 0. << 0.;
+ QTest::newRow("AlignBottom 1") << 1 << Qt::AlignBottom << 0. << 50.;
+ QTest::newRow("AlignBottom 0") << 0 << Qt::AlignBottom << 0. << -1.;
+
+ QTest::newRow("AlignBottom 0") << 0 << Qt::AlignBottom << 10. << 0.;
+ QTest::newRow("AlignBottom 1") << 1 << Qt::AlignBottom << 10. << 0.;
+ QTest::newRow("AlignBottom 1") << 1 << Qt::AlignBottom << 10. << 50.;
+ QTest::newRow("AlignBottom 0") << 0 << Qt::AlignBottom << 10. << -1.;
+ QTest::newRow("AlignBottom 99") << 99 << Qt::AlignBottom << 10. << -1.;
+
+ QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << 0. << 0.;
+ QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << 0. << 0.;
+ QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << 0. << 50.;
+ QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << 0. << -1.;
+ QTest::newRow("AlignCenter 99") << 99 << Qt::AlignCenter << 0. << -1.;
+
+ QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << -10. << 0.;
+ QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << -10. << 0.;
+ QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << -10. << 50.;
+ QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << -10. << -1.;
+ QTest::newRow("AlignCenter 99") << 99 << Qt::AlignCenter << -10. << -1.;
+}
+
+void tst_QQuickTableView::positionViewAtRowClamped()
+{
+ // Check that positionViewAtRow actually flicks the table to the
+ // right position so that the row becomes visible. For this test, we
+ // only test cells that cannot be placed exactly at the given alignment,
+ // because it would cause the table to overshoot. Instead the
+ // table should be flicked to the edge of the viewport, close to the
+ // requested alignment.
+ QFETCH(int, row);
+ QFETCH(Qt::AlignmentFlag, alignment);
+ QFETCH(qreal, offset);
+ QFETCH(qreal, contentYStartPos);
+
+ LOAD_TABLEVIEW("plaintableview.qml");
+ auto model = TestModelAsVariant(100, 100);
+ tableView->setModel(model);
+ if (contentYStartPos >= 0)
+ tableView->setContentY(contentYStartPos);
+
+ WAIT_UNTIL_POLISHED;
+
+ tableView->positionViewAtRow(row, alignment, offset);
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableView->contentY(), row < 50 ? 0 : tableView->contentHeight() - tableView->height());
+}
+
+void tst_QQuickTableView::positionViewAtColumnClamped_data()
+{
+ QTest::addColumn<int>("column");
+ QTest::addColumn<Qt::AlignmentFlag>("alignment");
+ QTest::addColumn<qreal>("offset");
+ QTest::addColumn<qreal>("contentXStartPos");
+
+ QTest::newRow("AlignLeft 0") << 0 << Qt::AlignLeft << -10. << 0.;
+ QTest::newRow("AlignLeft 0") << 0 << Qt::AlignLeft << -10. << -1.;
+ QTest::newRow("AlignLeft 99") << 99 << Qt::AlignLeft << 0. << -1.;
+ QTest::newRow("AlignLeft 99") << 99 << Qt::AlignLeft << -10. << -1.;
+
+ QTest::newRow("AlignRight 0") << 0 << Qt::AlignRight << 0. << 0.;
+ QTest::newRow("AlignRight 1") << 1 << Qt::AlignRight << 0. << 0.;
+ QTest::newRow("AlignRight 1") << 1 << Qt::AlignRight << 0. << 50.;
+ QTest::newRow("AlignRight 0") << 0 << Qt::AlignRight << 0. << -1.;
+
+ QTest::newRow("AlignRight 0") << 0 << Qt::AlignRight << 10. << 0.;
+ QTest::newRow("AlignRight 1") << 1 << Qt::AlignRight << 10. << 0.;
+ QTest::newRow("AlignRight 1") << 1 << Qt::AlignRight << 10. << 50.;
+ QTest::newRow("AlignRight 0") << 0 << Qt::AlignRight << 10. << -1.;
+ QTest::newRow("AlignRight 99") << 99 << Qt::AlignRight << 10. << -1.;
+
+ QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << 0. << 0.;
+ QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << 0. << 0.;
+ QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << 0. << 50.;
+ QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << 0. << -1.;
+ QTest::newRow("AlignCenter 99") << 99 << Qt::AlignCenter << 0. << -1.;
+
+ QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << -10. << 0.;
+ QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << -10. << 0.;
+ QTest::newRow("AlignCenter 1") << 1 << Qt::AlignCenter << -10. << 50.;
+ QTest::newRow("AlignCenter 0") << 0 << Qt::AlignCenter << -10. << -1.;
+ QTest::newRow("AlignCenter 99") << 99 << Qt::AlignCenter << -10. << -1.;
+}
+
+void tst_QQuickTableView::positionViewAtColumnClamped()
+{
+ // Check that positionViewAtColumn actually flicks the table to the
+ // right position so that the column becomes visible. For this test, we
+ // only test cells that cannot be placed exactly at the given alignment,
+ // because it would cause the table to overshoot. Instead the
+ // table should be flicked to the edge of the viewport, close to the
+ // requested alignment.
+ QFETCH(int, column);
+ QFETCH(Qt::AlignmentFlag, alignment);
+ QFETCH(qreal, offset);
+ QFETCH(qreal, contentXStartPos);
+
+ LOAD_TABLEVIEW("plaintableview.qml");
+ auto model = TestModelAsVariant(100, 100);
+ tableView->setModel(model);
+ if (contentXStartPos >= 0)
+ tableView->setContentX(contentXStartPos);
+
+ WAIT_UNTIL_POLISHED;
+
+ tableView->positionViewAtColumn(column, alignment, offset);
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableView->contentX(), column < 50 ? 0 : tableView->contentWidth() - tableView->width());
+}
+
void tst_QQuickTableView::itemAtCell_data()
{
QTest::addColumn<QPoint>("cell");
diff --git a/tests/auto/quick/qquicktext/BLACKLIST b/tests/auto/quick/qquicktext/BLACKLIST
index 1a3ea5492f..bc5f66da33 100644
--- a/tests/auto/quick/qquicktext/BLACKLIST
+++ b/tests/auto/quick/qquicktext/BLACKLIST
@@ -10,3 +10,17 @@ sles
ci b2qt 32bit
[baselineOffset]
ci b2qt 32bit
+# QTBUG-102721
+[hAlignWidthDependsOnImplicitWidth]
+android
+[hAlignImplicitWidth]
+android
+[transparentBackground]
+android
+
+# QTBUG-103096
+[largeTextObservesViewport]
+android
+[baselineOffset]
+android
+
diff --git a/tests/auto/quick/qquicktext/CMakeLists.txt b/tests/auto/quick/qquicktext/CMakeLists.txt
index 569347e287..90c7f30a93 100644
--- a/tests/auto/quick/qquicktext/CMakeLists.txt
+++ b/tests/auto/quick/qquicktext/CMakeLists.txt
@@ -12,11 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktext
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qquicktext.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -25,6 +21,7 @@ qt_internal_add_test(tst_qquicktext
Qt::QmlPrivate
Qt::QuickPrivate
Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquicktext/data/padding.qml b/tests/auto/quick/qquicktext/data/padding.qml
index ab0a37d041..f830af0e40 100644
--- a/tests/auto/quick/qquicktext/data/padding.qml
+++ b/tests/auto/quick/qquicktext/data/padding.qml
@@ -9,4 +9,30 @@ Text {
leftPadding: 30
rightPadding: 40
bottomPadding: 50
+
+ Rectangle {
+ width: parent.leftPadding
+ height: parent.height
+ color: "#6600FF00"
+ }
+
+ Rectangle {
+ width: parent.width
+ height: parent.topPadding
+ color: "#66888800"
+ }
+
+ Rectangle {
+ x: parent.width - parent.rightPadding
+ width: parent.rightPadding
+ height: parent.height
+ color: "#6600FFFF"
+ }
+
+ Rectangle {
+ y: parent.height - parent.bottomPadding
+ width: parent.width
+ height: parent.bottomPadding
+ color: "#66880088"
+ }
}
diff --git a/tests/auto/quick/qquicktext/data/paddingInLoader.qml b/tests/auto/quick/qquicktext/data/paddingInLoader.qml
new file mode 100644
index 0000000000..6ef7c25a9b
--- /dev/null
+++ b/tests/auto/quick/qquicktext/data/paddingInLoader.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.12
+
+Item {
+ width: 30
+ height: 30
+ Loader {
+ anchors.fill: parent
+ sourceComponent: Text {
+ rightPadding: 30
+ text: "Some text"
+ elide: Text.ElideRight
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
index 339bea0e6f..476297918d 100644
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
@@ -44,8 +44,9 @@
#include <private/qguiapplication_p.h>
#include <limits.h>
#include <QtGui/QMouseEvent>
-#include "../../shared/util.h"
-#include "testhttpserver.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
DEFINE_BOOL_CONFIG_OPTION(qmlDisableDistanceField, QML_DISABLE_DISTANCEFIELD)
@@ -153,6 +154,7 @@ private slots:
void growFromZeroWidth();
void padding();
+ void paddingInLoader();
void hintingPreference();
@@ -198,6 +200,7 @@ void tst_qquicktext::cleanup()
}
tst_qquicktext::tst_qquicktext()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
standard << "the quick brown fox jumped over the lazy dog"
<< "the quick brown fox\n jumped over the lazy dog";
@@ -2364,6 +2367,10 @@ void tst_qquicktext::implicitSize_data()
void tst_qquicktext::implicitSize()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("This segfaults on Android, QTBUG-103096");
+#endif
+
QFETCH(QString, text);
QFETCH(QString, width);
QFETCH(QString, format);
@@ -3165,12 +3172,12 @@ void tst_qquicktext::imgTagsAlign_data()
QTest::addColumn<QString>("src");
QTest::addColumn<int>("imgHeight");
QTest::addColumn<QString>("align");
- QTest::newRow("heart-bottom") << "data/images/heart200.png" << 181 << "bottom";
- QTest::newRow("heart-middle") << "data/images/heart200.png" << 181 << "middle";
- QTest::newRow("heart-top") << "data/images/heart200.png" << 181 << "top";
- QTest::newRow("starfish-bottom") << "data/images/starfish_2.png" << 217 << "bottom";
- QTest::newRow("starfish-middle") << "data/images/starfish_2.png" << 217 << "middle";
- QTest::newRow("starfish-top") << "data/images/starfish_2.png" << 217 << "top";
+ QTest::newRow("heart-bottom") << "images/heart200.png" << 181 << "bottom";
+ QTest::newRow("heart-middle") << "images/heart200.png" << 181 << "middle";
+ QTest::newRow("heart-top") << "images/heart200.png" << 181 << "top";
+ QTest::newRow("starfish-bottom") << "images/starfish_2.png" << 217 << "bottom";
+ QTest::newRow("starfish-middle") << "images/starfish_2.png" << 217 << "middle";
+ QTest::newRow("starfish-top") << "images/starfish_2.png" << 217 << "top";
}
void tst_qquicktext::imgTagsAlign()
@@ -3180,7 +3187,7 @@ void tst_qquicktext::imgTagsAlign()
QFETCH(QString, align);
QString componentStr = "import QtQuick 2.0\nText { text: \"This is a test <img src=\\\"" + src + "\\\" align=\\\"" + align + "\\\"> of image.\" }";
QQmlComponent textComponent(&engine);
- textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("."));
+ textComponent.setData(componentStr.toLatin1(), testFileUrl("."));
QQuickText *textObject = qobject_cast<QQuickText*>(textComponent.create());
QVERIFY(textObject != nullptr);
@@ -3202,10 +3209,10 @@ void tst_qquicktext::imgTagsAlign()
void tst_qquicktext::imgTagsMultipleImages()
{
- QString componentStr = "import QtQuick 2.0\nText { text: \"This is a starfish<img src=\\\"data/images/starfish_2.png\\\" width=\\\"60\\\" height=\\\"60\\\" > and another one<img src=\\\"data/images/heart200.png\\\" width=\\\"85\\\" height=\\\"85\\\">.\" }";
+ QString componentStr = "import QtQuick 2.0\nText { text: \"This is a starfish<img src=\\\"images/starfish_2.png\\\" width=\\\"60\\\" height=\\\"60\\\" > and another one<img src=\\\"images/heart200.png\\\" width=\\\"85\\\" height=\\\"85\\\">.\" }";
QQmlComponent textComponent(&engine);
- textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("."));
+ textComponent.setData(componentStr.toLatin1(), testFileUrl("."));
QQuickText *textObject = qobject_cast<QQuickText*>(textComponent.create());
QVERIFY(textObject != nullptr);
@@ -3261,11 +3268,15 @@ void tst_qquicktext::imgTagsUpdates()
void tst_qquicktext::imgTagsError()
{
- QString componentStr = "import QtQuick 2.0\nText { text: \"This is a starfish<img src=\\\"data/images/starfish_2.pn\\\" width=\\\"60\\\" height=\\\"60\\\">.\" }";
+ QString componentStr = "import QtQuick 2.0\nText { text: \"This is a starfish<img src=\\\"images/starfish_2.pn\\\" width=\\\"60\\\" height=\\\"60\\\">.\" }";
QQmlComponent textComponent(&engine);
- QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:2:1: QML Text: Cannot open: file:data/images/starfish_2.pn");
- textComponent.setData(componentStr.toLatin1(), QUrl("file:"));
+ const QString expectedMessage(
+ testFileUrl(".").toString()
+ + ":2:1: QML Text: Cannot open: "
+ + testFileUrl("images/starfish_2.pn").toString());
+ QTest::ignoreMessage(QtWarningMsg, expectedMessage.toLatin1());
+ textComponent.setData(componentStr.toLatin1(), testFileUrl("."));
QQuickText *textObject = qobject_cast<QQuickText*>(textComponent.create());
QVERIFY(textObject != nullptr);
@@ -3513,6 +3524,46 @@ void tst_qquicktext::fontSizeMode()
myText->setElideMode(QQuickText::ElideNone);
QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+
+ // Growing height needs to update the baselineOffset when AlignBottom is used
+ // and text is NOT wrapped
+ myText->setVAlign(QQuickText::AlignBottom);
+ myText->setFontSizeMode(QQuickText::Fit);
+ QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+
+ int baselineOffset = myText->baselineOffset();
+ myText->setHeight(myText->height() * 2);
+ QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+ QVERIFY(myText->baselineOffset() > baselineOffset);
+
+ // Growing height needs to update the baselineOffset when AlignBottom is used
+ // and the text is wrapped
+ myText->setVAlign(QQuickText::AlignBottom);
+ myText->setFontSizeMode(QQuickText::Fit);
+ myText->setWrapMode(QQuickText::NoWrap);
+ myText->resetMaximumLineCount();
+ QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+
+ baselineOffset = myText->baselineOffset();
+ myText->setHeight(myText->height() * 2);
+ QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+ QVERIFY(myText->baselineOffset() > baselineOffset);
+
+ // Check baselineOffset for the HorizontalFit case
+ myText->setVAlign(QQuickText::AlignBottom);
+ myText->setFontSizeMode(QQuickText::HorizontalFit);
+ QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+ QSignalSpy baselineOffsetSpy(myText, SIGNAL(baselineOffsetChanged(qreal)));
+ QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+ const qreal oldBaselineOffset = myText->baselineOffset();
+ myText->setHeight(myText->height() + 42);
+ QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+ QCOMPARE(baselineOffsetSpy.count(), 1);
+ QCOMPARE(myText->baselineOffset(), oldBaselineOffset + 42);
+ myText->setHeight(myText->height() - 42);
+ QVERIFY(QQuickTest::qWaitForItemPolished(myText));
+ QCOMPARE(baselineOffsetSpy.count(), 2);
+ QCOMPARE(myText->baselineOffset(), oldBaselineOffset);
}
void tst_qquicktext::fontSizeModeMultiline_data()
@@ -3851,13 +3902,11 @@ void tst_qquicktext::fontFormatSizes()
QFETCH(QString, textWithTag);
QFETCH(bool, fontIsBigger);
- QQuickView *view = new QQuickView;
{
- view->setSource(testFileUrl("pointFontSizes.qml"));
- view->show();
-
- QQuickText *qtext = view->rootObject()->findChild<QQuickText*>("text");
- QQuickText *qtextWithTag = view->rootObject()->findChild<QQuickText*>("textWithTag");
+ QQuickView view;
+ QVERIFY(QQuickTest::showView(view, testFileUrl("pointFontSizes.qml")));
+ QQuickText *qtext = view.rootObject()->findChild<QQuickText*>("text");
+ QQuickText *qtextWithTag = view.rootObject()->findChild<QQuickText*>("textWithTag");
QVERIFY(qtext != nullptr);
QVERIFY(qtextWithTag != nullptr);
@@ -3865,7 +3914,7 @@ void tst_qquicktext::fontFormatSizes()
qtextWithTag->setText(textWithTag);
for (int size = 6; size < 100; size += 4) {
- view->rootObject()->setProperty("pointSize", size);
+ view.rootObject()->setProperty("pointSize", size);
if (fontIsBigger)
QVERIFY(qtext->height() <= qtextWithTag->height());
else
@@ -3874,9 +3923,10 @@ void tst_qquicktext::fontFormatSizes()
}
{
- view->setSource(testFileUrl("pixelFontSizes.qml"));
- QQuickText *qtext = view->rootObject()->findChild<QQuickText*>("text");
- QQuickText *qtextWithTag = view->rootObject()->findChild<QQuickText*>("textWithTag");
+ QQuickView view;
+ QVERIFY(QQuickTest::showView(view, testFileUrl("pixelFontSizes.qml")));
+ QQuickText *qtext = view.rootObject()->findChild<QQuickText*>("text");
+ QQuickText *qtextWithTag = view.rootObject()->findChild<QQuickText*>("textWithTag");
QVERIFY(qtext != nullptr);
QVERIFY(qtextWithTag != nullptr);
@@ -3884,14 +3934,13 @@ void tst_qquicktext::fontFormatSizes()
qtextWithTag->setText(textWithTag);
for (int size = 6; size < 100; size += 4) {
- view->rootObject()->setProperty("pixelSize", size);
+ view.rootObject()->setProperty("pixelSize", size);
if (fontIsBigger)
QVERIFY(qtext->height() <= qtextWithTag->height());
else
QVERIFY(qtext->height() >= qtextWithTag->height());
}
}
- delete view;
}
typedef qreal (*ExpectedBaseline)(QQuickText *item);
@@ -3943,7 +3992,11 @@ static qreal expectedBaselineScaled(QQuickText *item)
{
QFont font = item->font();
QTextLayout layout(item->text().replace(QLatin1Char('\n'), QChar::LineSeparator));
- do {
+
+ qreal low = 0;
+ qreal high = 10000;
+
+ while (low < high) {
layout.setFont(font);
qreal width = 0;
layout.beginLayout();
@@ -3953,12 +4006,23 @@ static qreal expectedBaselineScaled(QQuickText *item)
}
layout.endLayout();
- if (width < item->width()) {
- QFontMetricsF fm(layout.font());
- return fm.ascent() + item->topPadding();
+ if (width > item->width()) {
+ high = font.pointSizeF();
+ font.setPointSizeF((high + low) / 2);
+ } else {
+ low = font.pointSizeF();
+
+ // When fontSizeMode != FixedSize, the font size will be scaled to a value
+ // The goal is to find a pointSize that uses as much space as possible while
+ // still fitting inside the available space. 0.01 is chosen as the threshold.
+ if ((high - low) < qreal(0.01)) {
+ QFontMetricsF fm(layout.font());
+ return fm.ascent() + item->topPadding();
+ }
+
+ font.setPointSizeF((high + low) / 2);
}
- font.setPointSize(font.pointSize() - 1);
- } while (font.pointSize() > 0);
+ }
return item->topPadding();
}
@@ -4380,6 +4444,18 @@ void tst_qquicktext::padding()
obj->setElideMode(QQuickText::ElideRight);
QCOMPARE(obj->implicitWidth(), cw + obj->leftPadding() + obj->rightPadding());
QCOMPARE(obj->implicitHeight(), ch + obj->topPadding() + obj->bottomPadding());
+
+ obj->setLeftPadding(0);
+ QCOMPARE(obj->implicitWidth(), cw + obj->leftPadding() + obj->rightPadding());
+
+ obj->setWidth(cw);
+ obj->setRightPadding(cw);
+ QCOMPARE(obj->contentWidth(), 0);
+
+ for (int incr = 1; incr < 50 && qFuzzyIsNull(obj->contentWidth()); ++incr)
+ obj->setWidth(cw + incr);
+ QVERIFY(obj->contentWidth() > 0);
+
obj->setElideMode(QQuickText::ElideNone);
obj->resetWidth();
@@ -4424,6 +4500,32 @@ void tst_qquicktext::padding()
delete root;
}
+void tst_qquicktext::paddingInLoader() // QTBUG-83413
+{
+ QQuickView view;
+ QVERIFY(QQuickTest::showView(view, testFileUrl("paddingInLoader.qml")));
+ QQuickText *qtext = view.rootObject()->findChild<QQuickText*>();
+ QVERIFY(qtext);
+ QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(qtext);
+ QVERIFY(textPrivate);
+ QCOMPARE(qtext->contentWidth(), 0); // does not render text, because width == rightPadding
+ QCOMPARE(textPrivate->availableWidth(), 0);
+
+ qtext->setLeftPadding(qtext->width());
+ qtext->setRightPadding(0);
+ QCOMPARE(qtext->contentWidth(), 0); // does not render text, because width == leftPadding
+ QCOMPARE(textPrivate->availableWidth(), 0);
+
+ qtext->setRightPadding(qtext->width());
+ QCOMPARE(qtext->contentWidth(), 0); // does not render text: available space is negative
+ QCOMPARE(textPrivate->availableWidth(), -qtext->width());
+
+ qtext->setLeftPadding(2);
+ qtext->setRightPadding(2);
+ QVERIFY(qtext->contentWidth() > 0); // finally space is available to render text
+ QCOMPARE(textPrivate->availableWidth(), qtext->width() - 4);
+}
+
void tst_qquicktext::hintingPreference()
{
{
diff --git a/tests/auto/quick/qquicktextdocument/CMakeLists.txt b/tests/auto/quick/qquicktextdocument/CMakeLists.txt
index c2e52317fe..5533bbbdc4 100644
--- a/tests/auto/quick/qquicktextdocument/CMakeLists.txt
+++ b/tests/auto/quick/qquicktextdocument/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktextdocument
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquicktextdocument.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp b/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
index e9c699db6a..dd6c375139 100644
--- a/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
+++ b/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
@@ -36,11 +36,14 @@
#include <QtGui/QTextDocumentWriter>
#include <QtQml/QQmlEngine>
#include <QtQml/QQmlComponent>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_qquicktextdocument : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_qquicktextdocument();
+
private slots:
void textDocumentWriter();
void textDocumentWithImage();
@@ -48,6 +51,11 @@ private slots:
QString text = QStringLiteral("foo bar");
+tst_qquicktextdocument::tst_qquicktextdocument()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_qquicktextdocument::textDocumentWriter()
{
QQmlEngine e;
diff --git a/tests/auto/quick/qquicktextedit/BLACKLIST b/tests/auto/quick/qquicktextedit/BLACKLIST
index 48108566e0..a8516a2411 100644
--- a/tests/auto/quick/qquicktextedit/BLACKLIST
+++ b/tests/auto/quick/qquicktextedit/BLACKLIST
@@ -11,3 +11,18 @@ macos ci
[hAlignVisual]
sles
+
+# QTBUG-103098
+[hAlignVisual]
+android
+[linkHover]
+android
+[cursorVisible]
+android
+[transparentSelectionColor]
+android
+
+# QTBUG-100991
+[selectionOnFocusOut]
+android
+
diff --git a/tests/auto/quick/qquicktextedit/CMakeLists.txt b/tests/auto/quick/qquicktextedit/CMakeLists.txt
index 57a955877b..ebf481d85d 100644
--- a/tests/auto/quick/qquicktextedit/CMakeLists.txt
+++ b/tests/auto/quick/qquicktextedit/CMakeLists.txt
@@ -12,16 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktextedit
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquicktextedit.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -29,6 +20,7 @@ qt_internal_add_test(tst_qquicktextedit
Qt::NetworkPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
index 73723f857c..583cb6b8d7 100644
--- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
+++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
@@ -27,7 +27,7 @@
****************************************************************************/
#include <qtest.h>
#include <QtTest/QSignalSpy>
-#include "../../shared/testhttpserver.h"
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
#include <math.h>
#include <QFile>
#include <QTextDocument>
@@ -50,10 +50,11 @@
#include <QClipboard>
#include <QMimeData>
#include <private/qquicktextcontrol_p.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
-#include "../../shared/platformquirks.h"
-#include "../../shared/platforminputcontext.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTestUtils/private/platformquirks_p.h>
+#include <QtQuickTestUtils/private/platforminputcontext_p.h>
#include <private/qinputmethod_p.h>
#include <QtGui/qstylehints.h>
#include <qmath.h>
@@ -317,6 +318,7 @@ QList<Key> &operator <<(QList<Key> &keys, Qt::Key key)
}
tst_qquicktextedit::tst_qquicktextedit()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qRegisterMetaType<QQuickTextEdit::TextFormat>();
qRegisterMetaType<QQuickTextEdit::SelectionMode>();
@@ -930,7 +932,7 @@ void tst_qquicktextedit::hAlignVisual()
// Try to check whether alignment works by checking the number of black
// pixels in the thirds of the grabbed image.
- const int windowWidth = 200;
+ const int windowWidth = view.width();
const int textWidth = qCeil(text->implicitWidth());
QVERIFY2(textWidth < windowWidth, "System font too large.");
const int sectionWidth = textWidth / 3;
@@ -978,7 +980,7 @@ void tst_qquicktextedit::hAlignVisual()
{
// Left Align
QImage image = view.grabWindow();
- int x = qCeil(text->implicitWidth());
+ int x = qCeil(text->implicitWidth() * view.devicePixelRatio());
int left = numberOfNonWhitePixels(0, x, image);
int right = numberOfNonWhitePixels(x, image.width() - x, image);
QVERIFY2(left > 0, msgNotGreaterThan(left, 0).constData());
@@ -988,7 +990,7 @@ void tst_qquicktextedit::hAlignVisual()
// HCenter Align
text->setHAlign(QQuickText::AlignHCenter);
QImage image = view.grabWindow();
- int x1 = qFloor(image.width() - text->implicitWidth()) / 2;
+ int x1 = qFloor(image.width() - text->implicitWidth() * view.devicePixelRatio()) / 2;
int x2 = image.width() - x1;
int left = numberOfNonWhitePixels(0, x1, image);
int mid = numberOfNonWhitePixels(x1, x2 - x1, image);
@@ -1001,7 +1003,7 @@ void tst_qquicktextedit::hAlignVisual()
// Right Align
text->setHAlign(QQuickText::AlignRight);
QImage image = view.grabWindow();
- int x = image.width() - qCeil(text->implicitWidth());
+ int x = image.width() - qCeil(text->implicitWidth() * view.devicePixelRatio());
int left = numberOfNonWhitePixels(0, x, image);
int right = numberOfNonWhitePixels(x, image.width() - x, image);
QCOMPARE(left, 0);
@@ -1363,7 +1365,7 @@ void tst_qquicktextedit::selectionOnFocusOut()
QVERIFY(edit2->hasActiveFocus());
edit2->setFocus(false, Qt::PopupFocusReason);
- QVERIFY(edit2->hasActiveFocus());
+ QVERIFY(!edit2->hasActiveFocus());
QCOMPARE(edit2->selectedText(), QLatin1String("text 2"));
}
@@ -2583,8 +2585,8 @@ void tst_qquicktextedit::linkHover()
QQuickView window(testFileUrl("linkInteraction.qml"));
window.setFlag(Qt::FramelessWindowHint);
QVERIFY(window.rootObject() != nullptr);
- QQuickViewTestUtil::centerOnScreen(&window);
- QQuickViewTestUtil::moveMouseAway(&window);
+ QQuickVisualTestUtils::centerOnScreen(&window);
+ QQuickVisualTestUtils::moveMouseAway(&window);
window.show();
window.requestActivate();
QVERIFY(QTest::qWaitForWindowActive(&window));
@@ -2625,8 +2627,8 @@ void tst_qquicktextedit::linkInteraction()
{
QQuickView window(testFileUrl("linkInteraction.qml"));
QVERIFY(window.rootObject() != nullptr);
- QQuickViewTestUtil::centerOnScreen(&window);
- QQuickViewTestUtil::moveMouseAway(&window);
+ QQuickVisualTestUtils::centerOnScreen(&window);
+ QQuickVisualTestUtils::moveMouseAway(&window);
window.show();
window.requestActivate();
QVERIFY(QTest::qWaitForWindowActive(&window));
@@ -3324,6 +3326,8 @@ void tst_qquicktextedit::inFlickableTouch()
QCOMPARE(flick->isMoving(), bool(expectFlickingAfter));
if (expectFlickingAfter) {
qCDebug(lcTests) << "flickable started moving after" << i << "moves, when we got to" << p;
+ if (i == expectFlickingAfter - 1)
+ QEXPECT_FAIL("", "flicking a little prematurely: OpenSuse perhaps?", Continue);
QCOMPARE(i, expectFlickingAfter);
}
QTest::touchEvent(&view, touchDevice).release(1, p, &view);
diff --git a/tests/auto/quick/qquicktextinput/BLACKLIST b/tests/auto/quick/qquicktextinput/BLACKLIST
index 7f3128d7fc..55ee6aa043 100644
--- a/tests/auto/quick/qquicktextinput/BLACKLIST
+++ b/tests/auto/quick/qquicktextinput/BLACKLIST
@@ -9,3 +9,23 @@ macos ci
# QTQAINFRA-4127
[passwordCharacter]
ci b2qt 32bit
+
+# QTBUG-95940
+[canPaste]
+opensuse-leap
+
+# QTBUG-95940
+[canPasteEmpty]
+opensuse-leap
+
+# QTBUG-95940
+[copyAndPaste]
+opensuse-leap
+
+# QTBUG-95940
+[copyAndPasteKeySequence]
+opensuse-leap
+
+# QTBUG-103256
+[copyAndPasteKeySequence]
+android
diff --git a/tests/auto/quick/qquicktextinput/CMakeLists.txt b/tests/auto/quick/qquicktextinput/CMakeLists.txt
index 6e8d855a58..8f49477a30 100644
--- a/tests/auto/quick/qquicktextinput/CMakeLists.txt
+++ b/tests/auto/quick/qquicktextinput/CMakeLists.txt
@@ -12,17 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktextinput
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qquicktextinput.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquicktextinput/data/cursorTest.qml b/tests/auto/quick/qquicktextinput/data/cursorTest.qml
index 363d37174b..44e81f9522 100644
--- a/tests/auto/quick/qquicktextinput/data/cursorTest.qml
+++ b/tests/auto/quick/qquicktextinput/data/cursorTest.qml
@@ -2,7 +2,7 @@ import QtQuick 2.0
Rectangle { id:rect; width: 300; height: 300; color: "white"
property string contextualProperty: "Hello"
- TextInput { text: "Hello world!"; id: textInputObject; objectName: "textInputObject"
+ TextInput { text: "Hello my wonderful world!"; id: textInputObject; objectName: "textInputObject"
width: 300; height: 300
resources: [ Component { id:cursor; Item { id:cursorInstance; objectName: "cursorInstance"; property string localProperty: contextualProperty } } ]
cursorDelegate: cursor
diff --git a/tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml b/tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml
index 31ee01db99..1e2c91e9cc 100644
--- a/tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml
+++ b/tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml
@@ -3,7 +3,7 @@ import QtQuick 2.0
Rectangle { width: 300; height: 300; color: "white"
property string contextualProperty: "Hello"
TextInput {
- text: "Hello world!"
+ text: "Hello my wonderful world!"
id: textInputObject;
objectName: "textInputObject"
width: 300; height: 300
diff --git a/tests/auto/quick/qquicktextinput/data/cursorTestInline.qml b/tests/auto/quick/qquicktextinput/data/cursorTestInline.qml
index b699ed2752..b7ad69962e 100644
--- a/tests/auto/quick/qquicktextinput/data/cursorTestInline.qml
+++ b/tests/auto/quick/qquicktextinput/data/cursorTestInline.qml
@@ -3,7 +3,7 @@ import QtQuick 2.0
Rectangle { width: 300; height: 300; color: "white"
property string contextualProperty: "Hello"
TextInput {
- text: "Hello world!"
+ text: "Hello my wonderful world!"
id: textInputObject
objectName: "textInputObject"
width: 300; height: 300
diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
index f61be67107..a87adf9130 100644
--- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
@@ -27,8 +27,8 @@
****************************************************************************/
#include <qtest.h>
#include <QtTest/QSignalSpy>
-#include "../../shared/util.h"
-#include "../../shared/testhttpserver.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
#include <private/qinputmethod_p.h>
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlexpression.h>
@@ -51,8 +51,8 @@
#endif
#include "qplatformdefs.h"
-#include "../../shared/platformquirks.h"
-#include "../../shared/platforminputcontext.h"
+#include <QtQuickTestUtils/private/platformquirks_p.h>
+#include <QtQuickTestUtils/private/platforminputcontext_p.h>
Q_DECLARE_METATYPE(QQuickTextInput::SelectionMode)
Q_DECLARE_METATYPE(QQuickTextInput::EchoMode)
@@ -302,6 +302,7 @@ void tst_qquicktextinput::cleanup()
}
tst_qquicktextinput::tst_qquicktextinput()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
standard << "the quick brown fox jumped over the lazy dog"
<< "It's supercalifragisiticexpialidocious!"
@@ -2882,7 +2883,7 @@ void tst_qquicktextinput::cursorDelegate()
// Test delegate gets moved on mouse press.
textInputObject->setSelectByMouse(true);
textInputObject->setCursorPosition(0);
- const QPoint point1 = textInputObject->positionToRectangle(5).center().toPoint();
+ const QPoint point1 = textInputObject->positionToRectangle(10).center().toPoint();
QTest::qWait(400); //ensure this isn't treated as a double-click
QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, point1);
QTest::qWait(50);
@@ -2892,7 +2893,7 @@ void tst_qquicktextinput::cursorDelegate()
// Test delegate gets moved on mouse drag
textInputObject->setCursorPosition(0);
- const QPoint point2 = textInputObject->positionToRectangle(10).center().toPoint();
+ const QPoint point2 = textInputObject->positionToRectangle(15).center().toPoint();
QTest::qWait(400); //ensure this isn't treated as a double-click
QTest::mousePress(&view, Qt::LeftButton, Qt::NoModifier, point1);
QMouseEvent mv(QEvent::MouseMove, point2, Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
@@ -2905,7 +2906,7 @@ void tst_qquicktextinput::cursorDelegate()
textInputObject->setReadOnly(true);
textInputObject->setCursorPosition(0);
QTest::qWait(400); //ensure this isn't treated as a double-click
- QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, textInputObject->positionToRectangle(5).center().toPoint());
+ QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, textInputObject->positionToRectangle(10).center().toPoint());
QTest::qWait(50);
QTRY_VERIFY(textInputObject->cursorPosition() != 0);
QCOMPARE(textInputObject->cursorRectangle().x(), delegateObject->x());
@@ -2913,7 +2914,7 @@ void tst_qquicktextinput::cursorDelegate()
textInputObject->setCursorPosition(0);
QTest::qWait(400); //ensure this isn't treated as a double-click
- QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, textInputObject->positionToRectangle(5).center().toPoint());
+ QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, textInputObject->positionToRectangle(10).center().toPoint());
QTest::qWait(50);
QTRY_VERIFY(textInputObject->cursorPosition() != 0);
QCOMPARE(textInputObject->cursorRectangle().x(), delegateObject->x());
@@ -3755,8 +3756,6 @@ void tst_qquicktextinput::focusOutNotClearSelection()
input.setFocus(false, Qt::PopupFocusReason);
QGuiApplication::processEvents();
QTRY_COMPARE(input.selectedText(), QLatin1String("llo"));
- // QTBUG-36332 and 36292: a popup window does not take focus
- QTRY_COMPARE(input.hasActiveFocus(), true);
input.setFocus(true);
QTRY_COMPARE(input.hasActiveFocus(), true);
@@ -5893,6 +5892,7 @@ void tst_qquicktextinput::clear()
textInput->clear();
QVERIFY(textInput->text().isEmpty());
+ QVERIFY2(textInput->preeditText().isEmpty(), "Pre-edit text must be empty after clear");
QCOMPARE(spy.count(), 3);
@@ -5901,6 +5901,7 @@ void tst_qquicktextinput::clear()
QVERIFY(!textInput->canUndo());
QCOMPARE(spy.count(), 4);
QCOMPARE(textInput->text(), QString("I am Legend"));
+ QVERIFY2(textInput->preeditText().isEmpty(), "Pre-edit text must be empty after undo");
}
void tst_qquicktextinput::backspaceSurrogatePairs()
diff --git a/tests/auto/quick/qquickview/CMakeLists.txt b/tests/auto/quick/qquickview/CMakeLists.txt
index 16babb106a..5f83f564e1 100644
--- a/tests/auto/quick/qquickview/CMakeLists.txt
+++ b/tests/auto/quick/qquickview/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickview
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickview.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickview/tst_qquickview.cpp b/tests/auto/quick/qquickview/tst_qquickview.cpp
index 7e47e0ca59..068acc7733 100644
--- a/tests/auto/quick/qquickview/tst_qquickview.cpp
+++ b/tests/auto/quick/qquickview/tst_qquickview.cpp
@@ -31,12 +31,12 @@
#include <QtQml/qqmlcontext.h>
#include <QtQuick/qquickview.h>
#include <QtQuick/qquickitem.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtGui/QWindow>
#include <QtCore/QDebug>
#include <QtQml/qqmlengine.h>
-#include "../shared/geometrytestutil.h"
+#include <QtQuickTestUtils/private/geometrytestutils_p.h>
class tst_QQuickView : public QQmlDataTest
{
@@ -54,6 +54,7 @@ private slots:
tst_QQuickView::tst_QQuickView()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
diff --git a/tests/auto/quick/qquickview_extra/CMakeLists.txt b/tests/auto/quick/qquickview_extra/CMakeLists.txt
index 4fa75da811..29b43b6c2b 100644
--- a/tests/auto/quick/qquickview_extra/CMakeLists.txt
+++ b/tests/auto/quick/qquickview_extra/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickview_extra
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickview_extra.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickview_extra/tst_qquickview_extra.cpp b/tests/auto/quick/qquickview_extra/tst_qquickview_extra.cpp
index f697a438bd..1ad248d899 100644
--- a/tests/auto/quick/qquickview_extra/tst_qquickview_extra.cpp
+++ b/tests/auto/quick/qquickview_extra/tst_qquickview_extra.cpp
@@ -30,7 +30,7 @@
#include <QtQuick/qquickview.h>
#include <QtQuick/qquickitem.h>
#include <QtQml/qqmlengine.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtCore/QDebug>
#include <QtCore/QTimer>
@@ -45,7 +45,7 @@ private slots:
void qtbug_87228();
};
-tst_QQuickViewExtra::tst_QQuickViewExtra() { }
+tst_QQuickViewExtra::tst_QQuickViewExtra() : QQmlDataTest(QT_QMLTEST_DATADIR) { }
void tst_QQuickViewExtra::qtbug_87228()
{
diff --git a/tests/auto/quick/qquickvisualdatamodel/CMakeLists.txt b/tests/auto/quick/qquickvisualdatamodel/CMakeLists.txt
index 8222fd001f..237837b5f8 100644
--- a/tests/auto/quick/qquickvisualdatamodel/CMakeLists.txt
+++ b/tests/auto/quick/qquickvisualdatamodel/CMakeLists.txt
@@ -12,15 +12,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickvisualdatamodel
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickvisualdatamodel.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
@@ -28,6 +20,7 @@ qt_internal_add_test(tst_qquickvisualdatamodel
Qt::QmlModelsPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickvisualdatamodel/data/setDelegateNoDoubleChange.qml b/tests/auto/quick/qquickvisualdatamodel/data/setDelegateNoDoubleChange.qml
new file mode 100644
index 0000000000..b4739d036e
--- /dev/null
+++ b/tests/auto/quick/qquickvisualdatamodel/data/setDelegateNoDoubleChange.qml
@@ -0,0 +1,43 @@
+import QtQuick
+
+Item {
+ width: 200
+ height: 200
+ id: root
+ property int creationCount: 0
+ property bool testStarted: false
+
+ ListModel {
+ id: mymodel
+ ListElement {message: "This is my alarm"}
+ }
+
+ Component {
+ id: aDelegate
+ Rectangle {
+ color: "blue"
+ width: 100
+ height: 100
+ }
+ }
+
+ Component {
+ id: bDelegate
+ Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {text: model.message }
+ Component.onCompleted: root.creationCount++
+ }
+ }
+
+
+ ListView {
+ width: 200
+ height: 200
+ id: myListView
+ model: mymodel
+ delegate: testStarted ? bDelegate : aDelegate
+ }
+}
diff --git a/tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp b/tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp
index 0037747043..c47d566d51 100644
--- a/tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp
+++ b/tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp
@@ -25,9 +25,9 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
#include <qtest.h>
#include <QtCore/qregularexpression.h>
@@ -47,8 +47,8 @@
#include <math.h>
#include <QtGui/qstandarditemmodel.h>
-using namespace QQuickVisualTestUtil;
-using namespace QQuickViewTestUtil;
+using namespace QQuickVisualTestUtils;
+using namespace QQuickViewTestUtils;
template <typename T, int N> int lengthOf(const T (&)[N]) { return N; }
@@ -434,6 +434,7 @@ private slots:
void invalidContext();
void externalManagedModel();
void delegateModelChangeDelegate();
+ void noDoubleDelegateUpdate();
void checkFilterGroupForDelegate();
void readFromProxyObject();
@@ -502,6 +503,7 @@ void tst_qquickvisualdatamodel::cleanupTestCase()
}
tst_qquickvisualdatamodel::tst_qquickvisualdatamodel()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
@@ -4349,6 +4351,20 @@ void tst_qquickvisualdatamodel::delegateModelChangeDelegate()
QCOMPARE(visualModel->count(), 3);
}
+void tst_qquickvisualdatamodel::noDoubleDelegateUpdate()
+{
+ // changing a delegate only refreshes its instances once
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("setDelegateNoDoubleChange.qml"));
+
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY(root);
+
+ bool ok = root->setProperty("testStarted", true);
+ QVERIFY(ok);
+ QCOMPARE(root->property("creationCount").toInt(), 1);
+}
+
void tst_qquickvisualdatamodel::checkFilterGroupForDelegate()
{
QQuickView view;
diff --git a/tests/auto/quick/qquickwindow/BLACKLIST b/tests/auto/quick/qquickwindow/BLACKLIST
index b4b7d2d761..6c3888daa1 100644
--- a/tests/auto/quick/qquickwindow/BLACKLIST
+++ b/tests/auto/quick/qquickwindow/BLACKLIST
@@ -1,3 +1,15 @@
[openglContextCreatedSignal]
opensuse-42.3
opensuse-leap
+
+# QTBUG-103078
+[defaultState]
+android
+[grab]
+android
+[requestActivate]
+android
+[contentItemSize]
+android
+[attachedProperty]
+android
diff --git a/tests/auto/quick/qquickwindow/CMakeLists.txt b/tests/auto/quick/qquickwindow/CMakeLists.txt
index 4b353cb277..0b934101e9 100644
--- a/tests/auto/quick/qquickwindow/CMakeLists.txt
+++ b/tests/auto/quick/qquickwindow/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickwindow
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_qquickwindow.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/qquickwindow/data/earlyGrab.qml b/tests/auto/quick/qquickwindow/data/earlyGrab.qml
new file mode 100644
index 0000000000..74427c9492
--- /dev/null
+++ b/tests/auto/quick/qquickwindow/data/earlyGrab.qml
@@ -0,0 +1,25 @@
+import QtQuick
+import Test
+
+Window {
+ id: window
+ width: 400
+ height: 400
+ color: "red"
+
+ // Important for the test to set visible early on, not wait until
+ // show() from C++. What is really verified here is that the
+ // content grabbing takes the real window state into account
+ // (visible vs. exposed).
+ visible: true
+
+ Grabber {
+ id: grabber
+ objectName: "grabber"
+ }
+
+ Item {
+ anchors.fill: parent
+ Component.onCompleted: grabber.grab(window)
+ }
+}
diff --git a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp
index 1a04d317ce..894e6ee297 100644
--- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp
+++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp
@@ -38,9 +38,9 @@
#include <QtQuick/private/qquickrectangle_p.h>
#include <QtQuick/private/qquickloader_p.h>
#include <QtQuick/private/qquickmousearea_p.h>
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
#include <QSignalSpy>
#include <private/qquickwindow_p.h>
#include <private/qguiapplication_p.h>
@@ -50,6 +50,7 @@
#include <QQuickRenderControl>
#include <QOperatingSystemVersion>
#include <functional>
+#include <QtGui/private/qeventpoint_p.h>
#include <QtGui/private/qrhi_p.h>
#if QT_CONFIG(opengl)
#include <QOpenGLContext>
@@ -327,30 +328,68 @@ protected:
}
};
-class MouseRecordingWindow : public QQuickWindow
+class PointerRecordingWindow : public QQuickWindow
{
public:
- explicit MouseRecordingWindow(QWindow *parent = nullptr) : QQuickWindow(parent) { }
+ explicit PointerRecordingWindow(QWindow *parent = nullptr) : QQuickWindow(parent) { }
protected:
+ bool event(QEvent *event) override {
+ if (event->isPointerEvent()) {
+ qCDebug(lcTests) << event;
+ m_events << PointerEvent { event->type(), static_cast<QPointerEvent *>(event)->pointingDevice() };
+ }
+ return QQuickWindow::event(event);
+ }
+
void mousePressEvent(QMouseEvent *event) override {
qCDebug(lcTests) << event;
- m_mouseEvents << event->source();
+ m_mouseEvents << PointerEvent { event->type(), event->pointingDevice() };
QQuickWindow::mousePressEvent(event);
}
void mouseMoveEvent(QMouseEvent *event) override {
qCDebug(lcTests) << event;
- m_mouseEvents << event->source();
+ m_mouseEvents << PointerEvent { event->type(), event->pointingDevice() };
QQuickWindow::mouseMoveEvent(event);
}
void mouseReleaseEvent(QMouseEvent *event) override {
qCDebug(lcTests) << event;
- m_mouseEvents << event->source();
+ m_mouseEvents << PointerEvent { event->type(), event->pointingDevice() };
QQuickWindow::mouseReleaseEvent(event);
}
+ void touchEvent(QTouchEvent * event) override {
+ qCDebug(lcTests) << event;
+ m_touchEvents << PointerEvent { event->type(), event->pointingDevice() };
+ QQuickWindow::touchEvent(event);
+ }
+
+#if QT_CONFIG(tabletevent)
+ void tabletEvent(QTabletEvent * event) override {
+ qCDebug(lcTests) << event;
+ m_tabletEvents << PointerEvent { event->type(), event->pointingDevice() };
+ QQuickWindow::tabletEvent(event);
+ }
+#endif
+
+#if QT_CONFIG(wheelevent)
+ void wheelEvent(QWheelEvent * event) override {
+ qCDebug(lcTests) << event;
+ m_tabletEvents << PointerEvent { event->type(), event->pointingDevice() };
+ QQuickWindow::wheelEvent(event);
+ }
+#endif
+
public:
- QList<Qt::MouseEventSource> m_mouseEvents;
+ struct PointerEvent
+ {
+ QEvent::Type type;
+ const QPointingDevice *device;
+ };
+ QList<PointerEvent> m_events;
+ QList<PointerEvent> m_mouseEvents;
+ QList<PointerEvent> m_touchEvents;
+ QList<PointerEvent> m_tabletEvents;
};
class MouseRecordingItem : public QQuickItem
@@ -402,7 +441,8 @@ class tst_qquickwindow : public QQmlDataTest
Q_OBJECT
public:
tst_qquickwindow()
- : touchDevice(QTest::createTouchDevice())
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+ , touchDevice(QTest::createTouchDevice())
, touchDeviceWithVelocity(QTest::createTouchDevice(QInputDevice::DeviceType::TouchScreen,
QInputDevice::Capability::Position | QPointingDevice::Capability::Velocity))
{
@@ -446,6 +486,7 @@ private slots:
void grab_data();
void grab();
+ void earlyGrab();
void multipleWindows();
void animationsWhileHidden();
@@ -509,6 +550,9 @@ private slots:
void testChildMouseEventFilter_data();
void cleanupGrabsOnRelease();
+ void subclassWithPointerEventVirtualOverrides_data();
+ void subclassWithPointerEventVirtualOverrides();
+
#if QT_CONFIG(shortcut)
void testShortCut();
#endif
@@ -1248,7 +1292,7 @@ void tst_qquickwindow::synthMouseFromTouch()
QFETCH(bool, acceptTouch);
QCoreApplication::setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, synthMouse);
- QScopedPointer<MouseRecordingWindow> window(new MouseRecordingWindow);
+ QScopedPointer<PointerRecordingWindow> window(new PointerRecordingWindow);
QScopedPointer<MouseRecordingItem> item(new MouseRecordingItem(acceptTouch, nullptr));
item->setParentItem(window->contentItem());
window->resize(250, 250);
@@ -1293,7 +1337,7 @@ void tst_qquickwindow::synthMouseDoubleClickFromTouch()
QFETCH(bool, expectedSynthesizedDoubleClickEvent);
QCoreApplication::setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, true);
- QScopedPointer<MouseRecordingWindow> window(new MouseRecordingWindow);
+ QScopedPointer<PointerRecordingWindow> window(new PointerRecordingWindow);
QScopedPointer<MouseRecordingItem> item(new MouseRecordingItem(false, nullptr));
item->setParentItem(window->contentItem());
window->resize(250, 250);
@@ -1526,8 +1570,7 @@ void tst_qquickwindow::grab()
}
QImage content = window.grabWindow();
- QCOMPARE(content.width(), int(window.width() * window.devicePixelRatio()));
- QCOMPARE(content.height(), int(window.height() * window.devicePixelRatio()));
+ QCOMPARE(content.size(), window.size() * window.devicePixelRatio());
if (alpha) {
QCOMPARE((uint) content.convertToFormat(QImage::Format_ARGB32_Premultiplied).pixel(0, 0), (uint) 0x00000000);
@@ -1542,8 +1585,7 @@ void tst_qquickwindow::grab()
// never was renderable before grabbing.
window.hide();
QImage content = window.grabWindow();
- QCOMPARE(content.width(), int(window.width() * window.devicePixelRatio()));
- QCOMPARE(content.height(), int(window.height() * window.devicePixelRatio()));
+ QCOMPARE(content.size(), window.size() * window.devicePixelRatio());
if (alpha) {
QCOMPARE((uint) content.convertToFormat(QImage::Format_ARGB32_Premultiplied).pixel(0, 0), (uint) 0x00000000);
} else {
@@ -1554,8 +1596,7 @@ void tst_qquickwindow::grab()
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
content = window.grabWindow();
- QCOMPARE(content.width(), int(window.width() * window.devicePixelRatio()));
- QCOMPARE(content.height(), int(window.height() * window.devicePixelRatio()));
+ QCOMPARE(content.size(), window.size() * window.devicePixelRatio());
if (alpha) {
QCOMPARE((uint) content.convertToFormat(QImage::Format_ARGB32_Premultiplied).pixel(0, 0), (uint) 0x00000000);
} else {
@@ -1564,6 +1605,40 @@ void tst_qquickwindow::grab()
}
}
+class Grabber : public QObject
+{
+ Q_OBJECT
+public:
+ Q_INVOKABLE void grab(QObject *obj) {
+ QQuickWindow *window = qobject_cast<QQuickWindow *>(obj);
+ images.append(window->grabWindow());
+ }
+ QVector<QImage> images;
+};
+
+void tst_qquickwindow::earlyGrab()
+{
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QSKIP("Skipping due to grabWindow not functional on offscreen/minimal platforms");
+
+ qmlRegisterType<Grabber>("Test", 1, 0, "Grabber");
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("earlyGrab.qml"));
+ QScopedPointer<QQuickWindow> window(qobject_cast<QQuickWindow *>(component.create()));
+ QVERIFY(!window.isNull());
+ window->setTitle(QTest::currentTestFunction());
+
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ Grabber *grabber = qobject_cast<Grabber *>(window->findChild<QObject *>("grabber"));
+ QVERIFY(grabber);
+ QCOMPARE(grabber->images.count(), 1);
+ QVERIFY(!grabber->images[0].isNull());
+ QCOMPARE(grabber->images[0].convertToFormat(QImage::Format_RGBX8888).pixel(10, 20), QColor(Qt::red).rgb());
+}
+
void tst_qquickwindow::multipleWindows()
{
QList<QQuickWindow *> windows;
@@ -1666,7 +1741,7 @@ void tst_qquickwindow::headless()
// Verify that the visual output is the same
QImage newContent = window->grabWindow();
QString errorMessage;
- QVERIFY2(QQuickVisualTestUtil::compareImages(newContent, originalContent, &errorMessage),
+ QVERIFY2(QQuickVisualTestUtils::compareImages(newContent, originalContent, &errorMessage),
qPrintable(errorMessage));
}
@@ -1701,7 +1776,7 @@ void tst_qquickwindow::destroyShowWithoutHide()
QImage newContent = window->grabWindow();
QString errorMessage;
- QVERIFY2(QQuickVisualTestUtil::compareImages(newContent, originalContent, &errorMessage),
+ QVERIFY2(QQuickVisualTestUtils::compareImages(newContent, originalContent, &errorMessage),
qPrintable(errorMessage));
}
@@ -2088,6 +2163,10 @@ void tst_qquickwindow::testExpose()
void tst_qquickwindow::requestActivate()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("tst_qquickwindow::requestActivate crashes on Android, see QTBUG-103078.");
+#endif
+
QQmlEngine engine;
QQmlComponent component(&engine);
component.loadUrl(testFileUrl("active.qml"));
@@ -2114,7 +2193,7 @@ void tst_qquickwindow::requestActivate()
QTRY_COMPARE(QGuiApplication::focusWindow(), window1.data());
QVERIFY(window1->isActive());
- QQuickItem *item = QQuickVisualTestUtil::findItem<QQuickItem>(window1->contentItem(), "item1");
+ QQuickItem *item = QQuickVisualTestUtils::findItem<QQuickItem>(window1->contentItem(), "item1");
QVERIFY(item);
//copied from src/qmltest/quicktestevent.cpp
@@ -2123,18 +2202,14 @@ void tst_qquickwindow::requestActivate()
{
QMouseEvent me(QEvent::MouseButtonPress, pos, window1->mapToGlobal(pos), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QSpontaneKeyEvent::setSpontaneous(&me);
- if (!qApp->notify(window1.data(), &me)) {
- QString warning = QString::fromLatin1("Mouse event MousePress not accepted by receiving window");
- QWARN(warning.toLatin1().data());
- }
+ if (!qApp->notify(window1.data(), &me))
+ qWarning("Mouse event MousePress not accepted by receiving window");
}
{
QMouseEvent me = QMouseEvent(QEvent::MouseButtonPress, pos, window1->mapToGlobal(pos), Qt::LeftButton, {}, Qt::NoModifier);
QSpontaneKeyEvent::setSpontaneous(&me);
- if (!qApp->notify(window1.data(), &me)) {
- QString warning = QString::fromLatin1("Mouse event MouseRelease not accepted by receiving window");
- QWARN(warning.toLatin1().data());
- }
+ if (!qApp->notify(window1.data(), &me))
+ qWarning("Mouse event MouseRelease not accepted by receiving window");
}
QTRY_COMPARE(QGuiApplication::focusWindow(), windows.at(0));
@@ -2143,6 +2218,10 @@ void tst_qquickwindow::requestActivate()
void tst_qquickwindow::testWindowVisibilityOrder()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("tst_qquickwindow::testWindowVisibilityOrder crashes on Android, see QTBUG-103078.");
+#endif
+
QQmlEngine engine;
QQmlComponent component(&engine);
component.loadUrl(testFileUrl("windoworder.qml"));
@@ -2260,6 +2339,10 @@ void tst_qquickwindow::unloadSubWindow()
// QTBUG-52573
void tst_qquickwindow::changeVisibilityInCompleted()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("tst_qquickwindow::changeVisibilityInCompleted crashes on Android, see QTBUG-103078.");
+#endif
+
QQmlEngine engine;
QQmlComponent component(&engine);
component.loadUrl(testFileUrl("changeVisibilityInCompleted.qml"));
@@ -3549,6 +3632,57 @@ void tst_qquickwindow::cleanupGrabsOnRelease()
QCOMPARE(parent->mouseUngrabEventCount, 1);
}
+void tst_qquickwindow::subclassWithPointerEventVirtualOverrides_data()
+{
+ QTest::addColumn<QPointingDevice::DeviceType>("deviceType");
+
+ QTest::newRow("mouse click") << QPointingDevice::DeviceType::Mouse;
+ QTest::newRow("touch tap") << QPointingDevice::DeviceType::TouchScreen;
+ QTest::newRow("stylus tap") << QPointingDevice::DeviceType::Stylus;
+}
+
+void tst_qquickwindow::subclassWithPointerEventVirtualOverrides() // QTBUG-97859
+{
+ QFETCH(QPointingDevice::DeviceType, deviceType);
+
+ PointerRecordingWindow window;
+ window.resize(250, 250);
+ window.setPosition(100, 100);
+ window.setTitle(QTest::currentTestFunction());
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ const qint64 stylusId = 1234567890;
+
+ const QPoint pos(120, 120);
+ switch (static_cast<QPointingDevice::DeviceType>(deviceType)) {
+ case QPointingDevice::DeviceType::Mouse:
+ QTest::mouseClick(&window, Qt::LeftButton, Qt::NoModifier, pos);
+ QTRY_COMPARE(window.m_mouseEvents.count(), 3); // separate move before press
+ QCOMPARE(window.m_events.count(), 3);
+ break;
+ case QPointingDevice::DeviceType::TouchScreen:
+ QTest::touchEvent(&window, touchDevice).press(0, pos, &window);
+ QTest::touchEvent(&window, touchDevice).release(0, pos, &window);
+ QTRY_COMPARE(window.m_touchEvents.count(), 2);
+ QCOMPARE(window.m_events.count(), 2);
+ break;
+ case QPointingDevice::DeviceType::Stylus:
+ // press (pressure is 0.8)
+ QWindowSystemInterface::handleTabletEvent(&window, pos, window.mapToGlobal(pos),
+ int(QInputDevice::DeviceType::Stylus), int(QPointingDevice::PointerType::Pen),
+ Qt::LeftButton, 0.8, 0, 0, 0, 0, 0, stylusId, Qt::NoModifier);
+ // release (pressure is 0)
+ QWindowSystemInterface::handleTabletEvent(&window, pos, window.mapToGlobal(pos),
+ int(QInputDevice::DeviceType::Stylus), int(QPointingDevice::PointerType::Pen),
+ Qt::NoButton, 0, 0, 0, 0, 0, 0, stylusId, Qt::NoModifier);
+ QTRY_COMPARE(window.m_tabletEvents.count(), 2);
+ QVERIFY(window.m_events.count() >= window.m_tabletEvents.count()); // tablet + synth-mouse events
+ break;
+ default:
+ break;
+ }
+}
+
#if QT_CONFIG(shortcut)
void tst_qquickwindow::testShortCut()
{
@@ -3688,8 +3822,7 @@ void tst_qquickwindow::rendererInterfaceWithRenderControl_data()
QTest::newRow("Vulkan") << QSGRendererInterface::VulkanRhi;
#endif
#ifdef Q_OS_WIN
- if (QOperatingSystemVersion::current() > QOperatingSystemVersion::Windows7)
- QTest::newRow("D3D11") << QSGRendererInterface::Direct3D11Rhi;
+ QTest::newRow("D3D11") << QSGRendererInterface::Direct3D11Rhi;
#endif
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
QTest::newRow("Metal") << QSGRendererInterface::MetalRhi;
diff --git a/tests/auto/quick/rendernode/CMakeLists.txt b/tests/auto/quick/rendernode/CMakeLists.txt
index 037ff85843..2c0ff2a5c2 100644
--- a/tests/auto/quick/rendernode/CMakeLists.txt
+++ b/tests/auto/quick/rendernode/CMakeLists.txt
@@ -12,16 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_rendernode
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_rendernode.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/rendernode/tst_rendernode.cpp b/tests/auto/quick/rendernode/tst_rendernode.cpp
index 98d0970ca0..1dd622a51d 100644
--- a/tests/auto/quick/rendernode/tst_rendernode.cpp
+++ b/tests/auto/quick/rendernode/tst_rendernode.cpp
@@ -35,7 +35,7 @@
#include <QtGui/qscreen.h>
#include <private/qsgrendernode_p.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class tst_rendernode: public QQmlDataTest
{
@@ -182,6 +182,7 @@ protected:
};
tst_rendernode::tst_rendernode()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qmlRegisterType<ClearItem>("Test", 1, 0, "ClearItem");
qmlRegisterType<MessUpItem>("Test", 1, 0, "MessUpItem");
diff --git a/tests/auto/quick/scenegraph/BLACKLIST b/tests/auto/quick/scenegraph/BLACKLIST
new file mode 100644
index 0000000000..80f39de9ab
--- /dev/null
+++ b/tests/auto/quick/scenegraph/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-102589
+[render]
+android
diff --git a/tests/auto/quick/scenegraph/CMakeLists.txt b/tests/auto/quick/scenegraph/CMakeLists.txt
index 046629ba04..05fd9dc9ec 100644
--- a/tests/auto/quick/scenegraph/CMakeLists.txt
+++ b/tests/auto/quick/scenegraph/CMakeLists.txt
@@ -4,23 +4,23 @@
## tst_scenegraph Test:
#####################################################################
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
qt_internal_add_test(tst_scenegraph
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_scenegraph.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
#### Keys ignored in scope 1:.:.:scenegraph.pro:<TRUE>:
diff --git a/tests/auto/quick/scenegraph/tst_scenegraph.cpp b/tests/auto/quick/scenegraph/tst_scenegraph.cpp
index 9803412703..96518dbcfa 100644
--- a/tests/auto/quick/scenegraph/tst_scenegraph.cpp
+++ b/tests/auto/quick/scenegraph/tst_scenegraph.cpp
@@ -45,13 +45,13 @@
#include <private/qsgrenderloop_p.h>
#include <private/qsgrhisupport_p.h>
-#include "../../shared/util.h"
-#include "../shared/visualtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/qpa/qplatformintegration.h>
-using namespace QQuickVisualTestUtil;
+using namespace QQuickVisualTestUtils;
class PerPixelRect : public QQuickItem
{
@@ -102,6 +102,9 @@ class tst_SceneGraph : public QQmlDataTest
{
Q_OBJECT
+public:
+ tst_SceneGraph();
+
private slots:
void initTestCase() override;
@@ -126,6 +129,11 @@ public:
~ScopedList() { qDeleteAll(*this); }
};
+tst_SceneGraph::tst_SceneGraph()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
void tst_SceneGraph::initTestCase()
{
qmlRegisterType<PerPixelRect>("SceneGraphTest", 1, 0, "PerPixelRect");
diff --git a/tests/auto/quick/shared/viewtestutil.cpp b/tests/auto/quick/shared/viewtestutil.cpp
deleted file mode 100644
index 5d9e6ba8dc..0000000000
--- a/tests/auto/quick/shared/viewtestutil.cpp
+++ /dev/null
@@ -1,531 +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 "viewtestutil.h"
-
-#include <QtCore/QRandomGenerator>
-#include <QtQuick/QQuickView>
-#include <QtQuick/QQuickView>
-#include <QtGui/QScreen>
-
-#include <QtTest/QTest>
-
-#include <QtQuick/private/qquickdeliveryagent_p_p.h>
-#include <QtQuick/private/qquickitemview_p_p.h>
-#include <QtQuick/private/qquickwindow_p.h>
-
-QT_BEGIN_NAMESPACE
-
-QQuickView *QQuickViewTestUtil::createView()
-{
- QQuickView *window = new QQuickView(0);
- const QSize size(240, 320);
- window->resize(size);
- QQuickViewTestUtil::centerOnScreen(window, size);
- return window;
-}
-
-void QQuickViewTestUtil::centerOnScreen(QQuickView *window, const QSize &size)
-{
- const QRect screenGeometry = window->screen()->availableGeometry();
- const QPoint offset = QPoint(size.width() / 2, size.height() / 2);
- window->setFramePosition(screenGeometry.center() - offset);
-}
-
-void QQuickViewTestUtil::centerOnScreen(QQuickView *window)
-{
- QQuickViewTestUtil::centerOnScreen(window, window->size());
-}
-
-void QQuickViewTestUtil::moveMouseAway(QQuickView *window)
-{
-#if QT_CONFIG(cursor) // Get the cursor out of the way.
- QCursor::setPos(window->geometry().topRight() + QPoint(100, 100));
-#else
- Q_UNUSED(window);
-#endif
-}
-
-void QQuickViewTestUtil::moveAndRelease(QQuickView *window, const QPoint &position)
-{
- QTest::mouseMove(window, position);
- QTest::mouseRelease(window, Qt::LeftButton, {}, position);
-}
-
-void QQuickViewTestUtil::moveAndPress(QQuickView *window, const QPoint &position)
-{
- QTest::mouseMove(window, position);
- QTest::mousePress(window, Qt::LeftButton, {}, position);
-}
-
-void QQuickViewTestUtil::flick(QQuickView *window, const QPoint &from, const QPoint &to, int duration)
-{
- const int pointCount = 5;
- QPoint diff = to - from;
-
- // send press, five equally spaced moves, and release.
- moveAndPress(window, from);
-
- for (int i = 0; i < pointCount; ++i)
- QTest::mouseMove(window, from + (i+1)*diff/pointCount, duration / pointCount);
-
- moveAndRelease(window, to);
- QTest::qWait(50);
-}
-
-QList<int> QQuickViewTestUtil::adjustIndexesForAddDisplaced(const QList<int> &indexes, int index, int count)
-{
- QList<int> result;
- for (int i=0; i<indexes.count(); i++) {
- int num = indexes[i];
- if (num >= index) {
- num += count;
- }
- result << num;
- }
- return result;
-}
-
-QList<int> QQuickViewTestUtil::adjustIndexesForMove(const QList<int> &indexes, int from, int to, int count)
-{
- QList<int> result;
- for (int i=0; i<indexes.count(); i++) {
- int num = indexes[i];
- if (from < to) {
- if (num >= from && num < from + count)
- num += (to - from); // target
- else if (num >= from && num < to + count)
- num -= count; // displaced
- } else if (from > to) {
- if (num >= from && num < from + count)
- num -= (from - to); // target
- else if (num >= to && num < from + count)
- num += count; // displaced
- }
- result << num;
- }
- return result;
-}
-
-QList<int> QQuickViewTestUtil::adjustIndexesForRemoveDisplaced(const QList<int> &indexes, int index, int count)
-{
- QList<int> result;
- for (int i=0; i<indexes.count(); i++) {
- int num = indexes[i];
- if (num >= index)
- num -= count;
- result << num;
- }
- return result;
-}
-
-QQuickViewTestUtil::QaimModel::QaimModel(QObject *parent)
- : QAbstractListModel(parent)
-{
-}
-
-int QQuickViewTestUtil::QaimModel::rowCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent);
- return list.count();
-}
-
-int QQuickViewTestUtil::QaimModel::columnCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent);
- return columns;
-}
-
-QHash<int,QByteArray> QQuickViewTestUtil::QaimModel::roleNames() const
-{
- QHash<int,QByteArray> roles = QAbstractListModel::roleNames();
- roles.insert(Name, "name");
- roles.insert(Number, "number");
- return roles;
-}
-
-QVariant QQuickViewTestUtil::QaimModel::data(const QModelIndex &index, int role) const
-{
- QVariant rv;
- if (role == Name)
- rv = list.at(index.row()).first;
- else if (role == Number)
- rv = list.at(index.row()).second;
-
- return rv;
-}
-
-int QQuickViewTestUtil::QaimModel::count() const
-{
- return rowCount() * columnCount();
-}
-
-QString QQuickViewTestUtil::QaimModel::name(int index) const
-{
- return list.at(index).first;
-}
-
-QString QQuickViewTestUtil::QaimModel::number(int index) const
-{
- return list.at(index).second;
-}
-
-void QQuickViewTestUtil::QaimModel::addItem(const QString &name, const QString &number)
-{
- emit beginInsertRows(QModelIndex(), list.count(), list.count());
- list.append(QPair<QString,QString>(name, number));
- emit endInsertRows();
-}
-
-void QQuickViewTestUtil::QaimModel::addItems(const QList<QPair<QString, QString> > &items)
-{
- emit beginInsertRows(QModelIndex(), list.count(), list.count()+items.count()-1);
- for (int i=0; i<items.count(); i++)
- list.append(QPair<QString,QString>(items[i].first, items[i].second));
- emit endInsertRows();
-}
-
-void QQuickViewTestUtil::QaimModel::insertItem(int index, const QString &name, const QString &number)
-{
- emit beginInsertRows(QModelIndex(), index, index);
- list.insert(index, QPair<QString,QString>(name, number));
- emit endInsertRows();
-}
-
-void QQuickViewTestUtil::QaimModel::insertItems(int index, const QList<QPair<QString, QString> > &items)
-{
- emit beginInsertRows(QModelIndex(), index, index+items.count()-1);
- for (int i=0; i<items.count(); i++)
- list.insert(index + i, QPair<QString,QString>(items[i].first, items[i].second));
- emit endInsertRows();
-}
-
-void QQuickViewTestUtil::QaimModel::removeItem(int index)
-{
- emit beginRemoveRows(QModelIndex(), index, index);
- list.removeAt(index);
- emit endRemoveRows();
-}
-
-void QQuickViewTestUtil::QaimModel::removeItems(int index, int count)
-{
- emit beginRemoveRows(QModelIndex(), index, index+count-1);
- while (count--)
- list.removeAt(index);
- emit endRemoveRows();
-}
-
-void QQuickViewTestUtil::QaimModel::moveItem(int from, int to)
-{
- emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
- list.move(from, to);
- emit endMoveRows();
-}
-
-void QQuickViewTestUtil::QaimModel::moveItems(int from, int to, int count)
-{
- emit beginMoveRows(QModelIndex(), from, from+count-1, QModelIndex(), to > from ? to+count : to);
- qquickmodelviewstestutil_move(from, to, count, &list);
- emit endMoveRows();
-}
-
-void QQuickViewTestUtil::QaimModel::modifyItem(int idx, const QString &name, const QString &number)
-{
- list[idx] = QPair<QString,QString>(name, number);
- emit dataChanged(index(idx,0), index(idx,0));
-}
-
-void QQuickViewTestUtil::QaimModel::clear()
-{
- int count = list.count();
- if (count > 0) {
- beginRemoveRows(QModelIndex(), 0, count-1);
- list.clear();
- endRemoveRows();
- }
-}
-
-void QQuickViewTestUtil::QaimModel::reset()
-{
- emit beginResetModel();
- emit endResetModel();
-}
-
-void QQuickViewTestUtil::QaimModel::resetItems(const QList<QPair<QString, QString> > &items)
-{
- beginResetModel();
- list = items;
- endResetModel();
-}
-
-class ScopedPrintable
-{
- Q_DISABLE_COPY_MOVE(ScopedPrintable)
-
-public:
- ScopedPrintable(const QString &string) : data(QTest::toString(string)) {}
- ~ScopedPrintable() { delete[] data; }
-
- operator const char*() const { return data; }
-
-private:
- const char *data;
-};
-
-void QQuickViewTestUtil::QaimModel::matchAgainst(const QList<QPair<QString, QString> > &other, const QString &error1, const QString &error2) {
- for (int i=0; i<other.count(); i++) {
- QVERIFY2(list.contains(other[i]),
- ScopedPrintable(other[i].first + QLatin1Char(' ') + other[i].second + QLatin1Char(' ') + error1));
- }
- for (int i=0; i<list.count(); i++) {
- QVERIFY2(other.contains(list[i]),
- ScopedPrintable(list[i].first + QLatin1Char(' ') + list[i].second + QLatin1Char(' ') + error2));
- }
-}
-
-
-
-QQuickViewTestUtil::ListRange::ListRange()
- : valid(false)
-{
-}
-
-QQuickViewTestUtil::ListRange::ListRange(const ListRange &other)
- : valid(other.valid)
-{
- indexes = other.indexes;
-}
-
-QQuickViewTestUtil::ListRange::ListRange(int start, int end)
- : valid(true)
-{
- for (int i=start; i<=end; i++)
- indexes << i;
-}
-
-QQuickViewTestUtil::ListRange::~ListRange()
-{
-}
-
-QQuickViewTestUtil::ListRange QQuickViewTestUtil::ListRange::operator+(const ListRange &other) const
-{
- if (other == *this)
- return *this;
- ListRange a(*this);
- a.indexes.append(other.indexes);
- return a;
-}
-
-bool QQuickViewTestUtil::ListRange::operator==(const ListRange &other) const
-{
- return QSet<int>(indexes.cbegin(), indexes.cend())
- == QSet<int>(other.indexes.cbegin(), other.indexes.cend());
-}
-
-bool QQuickViewTestUtil::ListRange::operator!=(const ListRange &other) const
-{
- return !(*this == other);
-}
-
-bool QQuickViewTestUtil::ListRange::isValid() const
-{
- return valid;
-}
-
-int QQuickViewTestUtil::ListRange::count() const
-{
- return indexes.count();
-}
-
-QList<QPair<QString,QString> > QQuickViewTestUtil::ListRange::getModelDataValues(const QaimModel &model)
-{
- QList<QPair<QString,QString> > data;
- if (!valid)
- return data;
- for (int i=0; i<indexes.count(); i++)
- data.append(qMakePair(model.name(indexes[i]), model.number(indexes[i])));
- return data;
-}
-
-QQuickViewTestUtil::StressTestModel::StressTestModel()
- : QAbstractListModel()
- , m_rowCount(20)
-{
- QTimer *t = new QTimer(this);
- t->setInterval(500);
- t->start();
-
- connect(t, &QTimer::timeout, this, &StressTestModel::updateModel);
-}
-
-int QQuickViewTestUtil::StressTestModel::rowCount(const QModelIndex &) const
-{
- return m_rowCount;
-}
-
-QVariant QQuickViewTestUtil::StressTestModel::data(const QModelIndex &, int) const
-{
- return QVariant();
-}
-
-void QQuickViewTestUtil::StressTestModel::updateModel()
-{
- if (m_rowCount > 10) {
- for (int i = 0; i < 10; ++i) {
- int rnum = QRandomGenerator::global()->bounded(m_rowCount);
- beginRemoveRows(QModelIndex(), rnum, rnum);
- m_rowCount--;
- endRemoveRows();
- }
- }
- if (m_rowCount < 20) {
- for (int i = 0; i < 10; ++i) {
- int rnum = QRandomGenerator::global()->bounded(m_rowCount);
- beginInsertRows(QModelIndex(), rnum, rnum);
- m_rowCount++;
- endInsertRows();
- }
- }
-}
-
-bool QQuickViewTestUtil::testVisibleItems(const QQuickItemViewPrivate *priv, bool *nonUnique, FxViewItem **failItem, int *expectedIdx)
-{
- QHash<QQuickItem*, int> uniqueItems;
-
- int skip = 0;
- for (int i = 0; i < priv->visibleItems.count(); ++i) {
- FxViewItem *item = priv->visibleItems.at(i);
- if (!item) {
- *failItem = nullptr;
- return false;
- }
-#if 0
- qDebug() << "\t" << item->index
- << item->item
- << item->position()
- << (!item->item || QQuickItemPrivate::get(item->item)->culled ? "hidden" : "visible");
-#endif
- if (item->index == -1) {
- ++skip;
- } else if (item->index != priv->visibleIndex + i - skip) {
- *nonUnique = false;
- *failItem = item;
- *expectedIdx = priv->visibleIndex + i - skip;
- return false;
- } else if (uniqueItems.contains(item->item)) {
- *nonUnique = true;
- *failItem = item;
- *expectedIdx = uniqueItems.find(item->item).value();
- return false;
- }
-
- uniqueItems.insert(item->item, item->index);
- }
-
- return true;
-}
-
-namespace QQuickTouchUtils {
-
- /* QQuickWindow does event compression and only delivers events just
- * before it is about to render the next frame. Since some tests
- * rely on events being delivered immediately AND that no other
- * event processing has occurred in the meanwhile, we flush the
- * event manually and immediately.
- */
- void flush(QQuickWindow *window) {
- if (!window)
- return;
- QQuickDeliveryAgentPrivate *da = QQuickWindowPrivate::get(window)->deliveryAgentPrivate();
- if (!da || !da->delayedTouch)
- return;
- da->deliverDelayedTouchEvent();
- }
-
-}
-
-namespace QQuickTest {
-
- /*! \internal
- Initialize \a view, set \a url, center in available geometry, move mouse away if desired.
- If \a errorMessage is given, QQuickView::errors() will be concatenated into it;
- otherwise, the QWARN messages are generally enough to debug the test.
-
- Returns \c false if the view fails to load the QML. That should be fatal in most tests,
- so normally the return value should be checked with QVERIFY.
- */
- bool initView(QQuickView &view, const QUrl &url, bool moveMouseOut, QByteArray *errorMessage)
- {
- view.setSource(url);
- while (view.status() == QQuickView::Loading)
- QTest::qWait(10);
- if (view.status() != QQuickView::Ready) {
- if (errorMessage) {
- for (const QQmlError &e : view.errors())
- errorMessage->append(e.toString().toLocal8Bit() + '\n');
- }
- return false;
- }
- const QRect screenGeometry = view.screen()->availableGeometry();
- const QSize size = view.size();
- const QPoint offset = QPoint(size.width() / 2, size.height() / 2);
- view.setFramePosition(screenGeometry.center() - offset);
- #if QT_CONFIG(cursor) // Get the cursor out of the way.
- if (moveMouseOut)
- QCursor::setPos(view.geometry().topRight() + QPoint(100, 100));
- #else
- Q_UNUSED(moveMouseOut);
- #endif
- return true;
- }
-
- /*! \internal
- Initialize \a view, set \a url, center in available geometry, move mouse away,
- show the \a view, wait for it to be exposed, and verify that its rootObject is not null.
-
- Returns \c false if anything fails, which should be fatal in most tests.
- The usual way to call this function is
- \code
- QQuickView window;
- QVERIFY(QQuickTest::showView(window, testFileUrl("myitems.qml")));
- \endcode
- */
- bool showView(QQuickView &view, const QUrl &url)
- {
- if (!initView(view, url))
- return false;
- view.show();
- if (!QTest::qWaitForWindowExposed(&view))
- return false;
- if (!view.rootObject())
- return false;
- return true;
- }
-}
-
-QT_END_NAMESPACE
diff --git a/tests/auto/quick/shared/viewtestutil.h b/tests/auto/quick/shared/viewtestutil.h
deleted file mode 100644
index 377296b095..0000000000
--- a/tests/auto/quick/shared/viewtestutil.h
+++ /dev/null
@@ -1,203 +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$
-**
-****************************************************************************/
-
-#ifndef QQUICKVIEWTESTUTIL_H
-#define QQUICKVIEWTESTUTIL_H
-
-#include <QtQuick/QQuickItem>
-#include <QtQml/QQmlExpression>
-#include <QtCore/QAbstractListModel>
-
-QT_FORWARD_DECLARE_CLASS(QQuickView)
-QT_FORWARD_DECLARE_CLASS(QQuickItemViewPrivate)
-QT_FORWARD_DECLARE_CLASS(FxViewItem)
-
-QT_BEGIN_NAMESPACE
-
-namespace QQuickViewTestUtil
-{
- QQuickView *createView();
-
- void flick(QQuickView *window, const QPoint &from, const QPoint &to, int duration);
- void centerOnScreen(QQuickView *window, const QSize &size);
- void centerOnScreen(QQuickView *window);
- void moveMouseAway(QQuickView *window);
- void moveAndPress(QQuickView *window, const QPoint &position);
- void moveAndRelease(QQuickView *window, const QPoint &position);
-
- QList<int> adjustIndexesForAddDisplaced(const QList<int> &indexes, int index, int count);
- QList<int> adjustIndexesForMove(const QList<int> &indexes, int from, int to, int count);
- QList<int> adjustIndexesForRemoveDisplaced(const QList<int> &indexes, int index, int count);
-
- struct ListChange {
- enum { Inserted, Removed, Moved, SetCurrent, SetContentY, Polish } type;
- int index;
- int count;
- int to; // Move
- qreal pos; // setContentY
-
- static ListChange insert(int index, int count = 1) { ListChange c = { Inserted, index, count, -1, 0.0 }; return c; }
- static ListChange remove(int index, int count = 1) { ListChange c = { Removed, index, count, -1, 0.0 }; return c; }
- static ListChange move(int index, int to, int count) { ListChange c = { Moved, index, count, to, 0.0 }; return c; }
- static ListChange setCurrent(int index) { ListChange c = { SetCurrent, index, -1, -1, 0.0 }; return c; }
- static ListChange setContentY(qreal pos) { ListChange c = { SetContentY, -1, -1, -1, pos }; return c; }
- static ListChange polish() { ListChange c = { Polish, -1, -1, -1, 0.0 }; return c; }
- };
-
- class QaimModel : public QAbstractListModel
- {
- Q_OBJECT
- public:
- enum Roles { Name = Qt::UserRole+1, Number = Qt::UserRole+2 };
-
- QaimModel(QObject *parent=0);
-
- 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;
- QHash<int,QByteArray> roleNames() const override;
-
- int count() const;
- QString name(int index) const;
- QString number(int index) const;
-
- Q_INVOKABLE void addItem(const QString &name, const QString &number);
- void addItems(const QList<QPair<QString, QString> > &items);
- void insertItem(int index, const QString &name, const QString &number);
- void insertItems(int index, const QList<QPair<QString, QString> > &items);
-
- Q_INVOKABLE void removeItem(int index);
- void removeItems(int index, int count);
-
- void moveItem(int from, int to);
- void moveItems(int from, int to, int count);
-
- void modifyItem(int idx, const QString &name, const QString &number);
-
- void clear();
- void reset();
- void resetItems(const QList<QPair<QString, QString> > &items);
-
- void matchAgainst(const QList<QPair<QString, QString> > &other, const QString &error1, const QString &error2);
-
- using QAbstractListModel::dataChanged;
-
- int columns = 1;
-
- private:
- QList<QPair<QString,QString> > list;
- };
-
- class ListRange
- {
- public:
- ListRange();
- ListRange(const ListRange &other);
- ListRange(int start, int end);
-
- ~ListRange();
-
- ListRange operator+(const ListRange &other) const;
- bool operator==(const ListRange &other) const;
- bool operator!=(const ListRange &other) const;
-
- bool isValid() const;
- int count() const;
-
- QList<QPair<QString,QString> > getModelDataValues(const QaimModel &model);
-
- QList<int> indexes;
- bool valid;
- };
-
- template<typename T>
- static void qquickmodelviewstestutil_move(int from, int to, int n, T *items)
- {
- if (from > to) {
- // Only move forwards - flip if backwards moving
- int tfrom = from;
- int tto = to;
- from = tto;
- to = tto+n;
- n = tfrom-tto;
- }
-
- T replaced;
- int i=0;
- typename T::ConstIterator it=items->begin(); it += from+n;
- for (; i<to-from; ++i,++it)
- replaced.append(*it);
- i=0;
- it=items->begin(); it += from;
- for (; i<n; ++i,++it)
- replaced.append(*it);
- typename T::ConstIterator f=replaced.begin();
- typename T::Iterator t=items->begin(); t += from;
- for (; f != replaced.end(); ++f, ++t)
- *t = *f;
- }
-
- class StressTestModel : public QAbstractListModel
- {
- Q_OBJECT
-
- public:
-
- StressTestModel();
-
- int rowCount(const QModelIndex &) const override;
- QVariant data(const QModelIndex &, int) const override;
-
- public Q_SLOTS:
- void updateModel();
-
- private:
- int m_rowCount;
- };
-
- bool testVisibleItems(const QQuickItemViewPrivate *priv, bool *nonUnique, FxViewItem **failItem, int *expectedIdx);
-}
-
-namespace QQuickTouchUtils {
- void flush(QQuickWindow *window);
-}
-
-namespace QQuickTest {
- bool initView(QQuickView &v, const QUrl &url, bool moveMouseOut = true, QByteArray *errorMessage = nullptr);
- bool showView(QQuickView &v, const QUrl &url);
-}
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QQuickViewTestUtil::QaimModel*)
-Q_DECLARE_METATYPE(QQuickViewTestUtil::ListChange)
-Q_DECLARE_METATYPE(QList<QQuickViewTestUtil::ListChange>)
-Q_DECLARE_METATYPE(QQuickViewTestUtil::ListRange)
-
-
-#endif // QQUICKVIEWTESTUTIL_H
diff --git a/tests/auto/quick/shared/visualtestutil.cpp b/tests/auto/quick/shared/visualtestutil.cpp
deleted file mode 100644
index 06f7386902..0000000000
--- a/tests/auto/quick/shared/visualtestutil.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** 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 "visualtestutil.h"
-
-#include <QtQuick/QQuickItem>
-#include <QtCore/QDebug>
-
-bool QQuickVisualTestUtil::delegateVisible(QQuickItem *item)
-{
- return item->isVisible() && !QQuickItemPrivate::get(item)->culled;
-}
-
-QQuickItem *QQuickVisualTestUtil::findVisibleChild(QQuickItem *parent, const QString &objectName)
-{
- QQuickItem *item = 0;
- QList<QQuickItem*> items = parent->findChildren<QQuickItem*>(objectName);
- for (int i = 0; i < items.count(); ++i) {
- if (items.at(i)->isVisible() && !QQuickItemPrivate::get(items.at(i))->culled) {
- item = items.at(i);
- break;
- }
- }
- return item;
-}
-
-void QQuickVisualTestUtil::dumpTree(QQuickItem *parent, int depth)
-{
- static QString padding(" ");
- for (int i = 0; i < parent->childItems().count(); ++i) {
- QQuickItem *item = qobject_cast<QQuickItem*>(parent->childItems().at(i));
- if (!item)
- continue;
- qDebug() << padding.left(depth*2) << item;
- dumpTree(item, depth+1);
- }
-}
-
-// A custom compare function to avoid issues such as:
-// When running on native Nvidia graphics cards on linux, the
-// distance field glyph pixels have a measurable, but not visible
-// pixel error. This was GT-216 with the ubuntu "nvidia-319" driver package.
-// llvmpipe does not show the same issue.
-
-bool QQuickVisualTestUtil::compareImages(const QImage &ia, const QImage &ib, QString *errorMessage)
-{
- if (ia.size() != ib.size()) {
- QDebug(errorMessage) << "Images are of different size:" << ia.size() << ib.size()
- << "DPR:" << ia.devicePixelRatio() << ib.devicePixelRatio();
- return false;
- }
- if (ia.format() != ib.format()) {
- QDebug(errorMessage) << "Images are of different formats:" << ia.format() << ib.format();
- return false;
- }
-
- int w = ia.width();
- int h = ia.height();
- const int tolerance = 5;
- for (int y=0; y<h; ++y) {
- const uint *as= (const uint *) ia.constScanLine(y);
- const uint *bs= (const uint *) ib.constScanLine(y);
- for (int x=0; x<w; ++x) {
- uint a = as[x];
- uint b = bs[x];
-
- // No tolerance for error in the alpha.
- if ((a & 0xff000000) != (b & 0xff000000)
- || qAbs(qRed(a) - qRed(b)) > tolerance
- || qAbs(qRed(a) - qRed(b)) > tolerance
- || qAbs(qRed(a) - qRed(b)) > tolerance) {
- QDebug(errorMessage) << "Mismatch at:" << x << y << ':'
- << Qt::hex << Qt::showbase << a << b;
- return false;
- }
- }
- }
- return true;
-}
diff --git a/tests/auto/quick/shared/visualtestutil.h b/tests/auto/quick/shared/visualtestutil.h
deleted file mode 100644
index c07cecfa47..0000000000
--- a/tests/auto/quick/shared/visualtestutil.h
+++ /dev/null
@@ -1,130 +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$
-**
-****************************************************************************/
-
-#ifndef QQUICKVISUALTESTUTIL_H
-#define QQUICKVISUALTESTUTIL_H
-
-#include <QtQuick/QQuickItem>
-#include <QtQml/QQmlExpression>
-
-#include <QtQuick/private/qquickitem_p.h>
-
-namespace QQuickVisualTestUtil
-{
- QQuickItem *findVisibleChild(QQuickItem *parent, const QString &objectName);
-
- void dumpTree(QQuickItem *parent, int depth = 0);
-
- bool delegateVisible(QQuickItem *item);
-
- /*
- Find an item with the specified objectName. If index is supplied then the
- item must also evaluate the {index} expression equal to index
- */
- template<typename T>
- T *findItem(QQuickItem *parent, const QString &objectName, int index = -1)
- {
- const QMetaObject &mo = T::staticMetaObject;
- for (int i = 0; i < parent->childItems().count(); ++i) {
- QQuickItem *item = qobject_cast<QQuickItem*>(parent->childItems().at(i));
- if (!item)
- continue;
- if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
- if (index != -1) {
- QQmlExpression e(qmlContext(item), item, "index");
- if (e.evaluate().toInt() == index)
- return static_cast<T*>(item);
- } else {
- return static_cast<T*>(item);
- }
- }
- item = findItem<T>(item, objectName, index);
- if (item)
- return static_cast<T*>(item);
- }
-
- return 0;
- }
-
- template<typename T>
- QList<T*> findItems(QQuickItem *parent, const QString &objectName, bool visibleOnly = true)
- {
- QList<T*> items;
- const QMetaObject &mo = T::staticMetaObject;
- for (int i = 0; i < parent->childItems().count(); ++i) {
- QQuickItem *item = qobject_cast<QQuickItem*>(parent->childItems().at(i));
- if (!item || (visibleOnly && (!item->isVisible() || QQuickItemPrivate::get(item)->culled)))
- continue;
- if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName))
- items.append(static_cast<T*>(item));
- items += findItems<T>(item, objectName);
- }
-
- return items;
- }
-
- template<typename T>
- QList<T*> findItems(QQuickItem *parent, const QString &objectName, const QList<int> &indexes)
- {
- QList<T*> items;
- for (int i=0; i<indexes.count(); i++)
- items << qobject_cast<QQuickItem*>(findItem<T>(parent, objectName, indexes[i]));
- return items;
- }
-
- bool compareImages(const QImage &ia, const QImage &ib, QString *errorMessage);
-
- struct SignalMultiSpy : public QObject
- {
- Q_OBJECT
- public:
- QList<QObject *> senders;
- QList<QByteArray> signalNames;
-
- template <typename Func1>
- QMetaObject::Connection connectToSignal(const typename QtPrivate::FunctionPointer<Func1>::Object *obj, Func1 signal,
- Qt::ConnectionType type = Qt::AutoConnection)
- {
- return connect(obj, signal, this, &SignalMultiSpy::receive, type);
- }
-
- void clear() {
- senders.clear();
- signalNames.clear();
- }
-
- public slots:
- void receive() {
- QMetaMethod m = sender()->metaObject()->method(senderSignalIndex());
- senders << sender();
- signalNames << m.name();
- }
- };
-}
-
-#endif // QQUICKVISUALTESTUTIL_H
diff --git a/tests/auto/quick/sharedimage/tst_sharedimage.cpp b/tests/auto/quick/sharedimage/tst_sharedimage.cpp
index afadb76ad0..c11ed7e180 100644
--- a/tests/auto/quick/sharedimage/tst_sharedimage.cpp
+++ b/tests/auto/quick/sharedimage/tst_sharedimage.cpp
@@ -49,6 +49,14 @@ void tst_sharedimage::initTestCase()
#if !QT_CONFIG(systemsemaphore)
QSKIP("Shared image not supported");
#endif
+
+#ifdef Q_OS_ANDROID
+ /*
+ * On Android, images are usually in resources, not in
+ * files on the file system.
+ */
+ QSKIP("Shared image not useful on Android, skipping test");
+#endif
}
void tst_sharedimage::compareToPlainLoad_data()
diff --git a/tests/auto/quick/touchmouse/CMakeLists.txt b/tests/auto/quick/touchmouse/CMakeLists.txt
index 703f4f7578..c0a9da1224 100644
--- a/tests/auto/quick/touchmouse/CMakeLists.txt
+++ b/tests/auto/quick/touchmouse/CMakeLists.txt
@@ -12,21 +12,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_touchmouse
SOURCES
- ../../shared/util.cpp ../../shared/util.h
- ../shared/geometrytestutil.cpp ../shared/geometrytestutil.h
- ../shared/viewtestutil.cpp ../shared/viewtestutil.h
- ../shared/visualtestutil.cpp ../shared/visualtestutil.h
tst_touchmouse.cpp
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quick/touchmouse/data/oneMouseArea.qml b/tests/auto/quick/touchmouse/data/oneMouseArea.qml
new file mode 100644
index 0000000000..dccc5792c8
--- /dev/null
+++ b/tests/auto/quick/touchmouse/data/oneMouseArea.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.0
+
+Item {
+ width: 320; height: 240
+
+ Rectangle {
+ width: parent.width / 2; height: parent.height; x: width
+ color: ma.containsPress ? "steelblue" : "lightsteelblue"
+ MouseArea {
+ id: ma
+ anchors.fill: parent
+ }
+ }
+}
diff --git a/tests/auto/quick/touchmouse/tst_touchmouse.cpp b/tests/auto/quick/touchmouse/tst_touchmouse.cpp
index ef0df0cddb..66dde3e26c 100644
--- a/tests/auto/quick/touchmouse/tst_touchmouse.cpp
+++ b/tests/auto/quick/touchmouse/tst_touchmouse.cpp
@@ -46,8 +46,8 @@
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlproperty.h>
-#include "../../shared/util.h"
-#include "../shared/viewtestutil.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
@@ -150,6 +150,12 @@ public:
++touchUngrabCount;
}
+ void dumpEventList()
+ {
+ for (const auto &event : eventList)
+ qDebug() << event;
+ }
+
bool event(QEvent *event) override {
return QQuickItem::event(event);
}
@@ -185,12 +191,22 @@ class GrabMonitor : public QObject
{
public:
QObject *exclusiveGrabber = nullptr;
+ int transitionCount = 0;
bool fromMouseEvent = false;
bool canceled = false;
+ void reset()
+ {
+ exclusiveGrabber = nullptr;
+ transitionCount = 0;
+ fromMouseEvent = false;
+ canceled = false;
+ }
+
void onGrabChanged(QObject *grabber, QPointingDevice::GrabTransition transition, const QPointerEvent *event, const QEventPoint &point)
{
qCDebug(lcTests) << grabber << transition << event << point << point.device();
+ ++transitionCount;
switch (transition) {
case QPointingDevice::GrabTransition::GrabExclusive:
exclusiveGrabber = grabber;
@@ -217,6 +233,7 @@ class tst_TouchMouse : public QQmlDataTest
Q_OBJECT
public:
tst_TouchMouse()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{}
private slots:
@@ -246,6 +263,11 @@ private slots:
void hoverEnabled();
void implicitUngrab();
+ void touchCancelWillCancelMousePress();
+
+ void oneTouchInsideAndOneOutside();
+
+ void strayTouchDoesntAutograb();
protected:
bool eventFilter(QObject *, QEvent *event) override
@@ -429,7 +451,7 @@ void tst_TouchMouse::testEventFilter()
// QScopedPointer<QQuickView> window(createView());
// window.setSource(testFileUrl("singleitem.qml"));
// window.show();
-// QQuickViewTestUtil::centerOnScreen(&window);
+// QQuickVisualTestUtils::centerOnScreen(&window);
// QVERIFY(QTest::qWaitForWindowActive(&window));
// QVERIFY(window->rootObject() != 0);
@@ -1545,6 +1567,117 @@ void tst_TouchMouse::implicitUngrab()
QCOMPARE(eventItem->eventList.at(0).type, QEvent::UngrabMouse);
QTest::touchEvent(&window, device).release(0, p1); // clean up potential state
}
+
+void tst_TouchMouse::touchCancelWillCancelMousePress()
+{
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("singleitem.qml")));
+ QQuickItem *root = window.rootObject();
+ QVERIFY(root != nullptr);
+
+ EventItem *eventItem = root->findChild<EventItem*>("eventItem1");
+ eventItem->acceptMouse = true;
+ eventItem->setAcceptTouchEvents(false);
+ QPoint p1(20, 20);
+
+ // Begin a new touch, that gets converted to a mouse press
+ QTest::touchEvent(&window, device).press(0, p1);
+ QCOMPARE(eventItem->eventList.count(), 1);
+ QCOMPARE(eventItem->eventList.at(0).type, QEvent::MouseButtonPress);
+
+ // Cancel it...
+ QTouchEvent cancelEvent(QEvent::TouchCancel, device);
+ QCoreApplication::sendEvent(&window, &cancelEvent);
+ QCOMPARE(eventItem->eventList.count(), 3);
+ QCOMPARE(eventItem->eventList.at(1).type, QEvent::TouchCancel);
+ QCOMPARE(eventItem->eventList.at(2).type, QEvent::UngrabMouse);
+
+ // Begin a second touch. Since the last one was cancelled, this
+ // should end up as a new mouse press on the target item.
+ QTest::touchEvent(&window, device).press(0, p1);
+ QVERIFY(eventItem->eventList.count() >= 5);
+ QCOMPARE(eventItem->eventList.at(3).type, QEvent::MouseButtonPress);
+
+ QTest::touchEvent(&window, device).release(0, p1); // clean up potential state
+}
+
+void tst_TouchMouse::oneTouchInsideAndOneOutside() // QTBUG-102996
+{
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("oneMouseArea.qml")));
+ QQuickItem *root = window.rootObject();
+ QVERIFY(root);
+ QQuickMouseArea *ma = root->findChild<QQuickMouseArea*>();
+ QVERIFY(ma);
+
+ // Press the MouseArea
+ QPoint p1 = ma->mapToScene(ma->boundingRect().center()).toPoint();
+ QTest::touchEvent(&window, device).press(1, p1);
+ QQuickTouchUtils::flush(&window);
+ QVERIFY(ma->pressed());
+
+ // Tap outside the MouseArea with a second finger
+ QPoint p2(100, 100);
+ QTest::touchEvent(&window, device).stationary(1).press(2, p2);
+ QQuickTouchUtils::flush(&window);
+ QTest::touchEvent(&window, device).stationary(1).release(2, p2);
+ QQuickTouchUtils::flush(&window);
+ QVERIFY(ma->pressed());
+
+ // Press again outside the MouseArea with a second finger
+ QTest::touchEvent(&window, device).stationary(1).press(2, p2);
+
+ // Release the first finger: MouseArea should be released
+ QTest::touchEvent(&window, device).release(1, p1).stationary(2);
+ QQuickTouchUtils::flush(&window);
+ QCOMPARE(ma->pressed(), false);
+
+ // Release the second finger
+ QTest::touchEvent(&window, device).release(2, p2);
+ QQuickTouchUtils::flush(&window);
+}
+
+void tst_TouchMouse::strayTouchDoesntAutograb() // QTBUG-107867
+{
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("singleitem.qml")));
+ QQuickItem *root = window.rootObject();
+ QVERIFY(root);
+ EventItem *eventItem = root->findChild<EventItem*>();
+ QVERIFY(eventItem);
+ // This item accepts (synth-)mouse events but NOT touch
+ eventItem->acceptMouse = true;
+ QCOMPARE(eventItem->acceptTouchEvents(), false); // the default in Qt 6
+ QPoint p1(6, 6);
+ grabMonitor.reset();
+
+ // Begin a new touch, that gets converted to a mouse press
+ QTest::touchEvent(&window, device).press(0, p1);
+ QQuickTouchUtils::flush(&window);
+ qCDebug(lcTests) << "after touch press:" << eventItem->eventList;
+ QCOMPARE(eventItem->eventList.size(), 1);
+ QCOMPARE(eventItem->eventList.at(0).type, QEvent::MouseButtonPress);
+ QCOMPARE(grabMonitor.exclusiveGrabber, eventItem);
+
+ // Drag
+ for (int i = 0; i < 3; ++i) {
+ QTest::touchEvent(&window, device).move(0, p1 + QPoint(i * 5, i * 5), &window);
+ QQuickTouchUtils::flush(&window);
+ QCOMPARE(grabMonitor.transitionCount, 1); // no new grab
+ QCOMPARE(eventItem->eventList.size(), i + 2);
+ QCOMPARE(eventItem->eventList.last().type, QEvent::MouseMove);
+ }
+
+ // Press an extra point: EventItem should see nothing
+ QTest::touchEvent(&window, device).stationary(0).press(1, p1);
+ QQuickTouchUtils::flush(&window);
+ qCDebug(lcTests) << "after press of second touchpoint:" << eventItem->eventList;
+ QCOMPARE(eventItem->eventList.size(), 4);
+ QCOMPARE(grabMonitor.transitionCount, 1); // no new grab
+
+ QTest::touchEvent(&window, device).release(0, p1).release(1, p1);
+}
+
QTEST_MAIN(tst_TouchMouse)
#include "tst_touchmouse.moc"
diff --git a/tests/auto/quickcontrols2/CMakeLists.txt b/tests/auto/quickcontrols2/CMakeLists.txt
new file mode 100644
index 0000000000..903732bf79
--- /dev/null
+++ b/tests/auto/quickcontrols2/CMakeLists.txt
@@ -0,0 +1,42 @@
+# Generated from auto.pro.
+
+add_subdirectory(accessibility)
+if(NOT ANDROID) # temporarily disabled until QTBUG-100991 is fixed
+add_subdirectory(controls)
+endif()
+add_subdirectory(cursor)
+add_subdirectory(customization)
+add_subdirectory(designer)
+if(NOT ANDROID) # QTBUG-100258
+add_subdirectory(focus)
+endif()
+add_subdirectory(font)
+add_subdirectory(palette)
+add_subdirectory(platform)
+add_subdirectory(pointerhandlers)
+add_subdirectory(pressandhold)
+add_subdirectory(qquickapplicationwindow)
+add_subdirectory(qquickcolor)
+add_subdirectory(qquickdrawer)
+add_subdirectory(qquickheaderview)
+add_subdirectory(qquickiconimage)
+add_subdirectory(qquickiconlabel)
+add_subdirectory(qquickimaginestyle)
+add_subdirectory(qquickmaterialstyle)
+add_subdirectory(qquickmaterialstyleconf)
+add_subdirectory(qquickmenu)
+add_subdirectory(qquickmenubar)
+add_subdirectory(qquickninepatchimage)
+add_subdirectory(qquickpopup)
+add_subdirectory(qquickstyle)
+add_subdirectory(qquickuniversalstyle)
+add_subdirectory(qquickuniversalstyleconf)
+add_subdirectory(revisions)
+if(NOT ANDROID) # QTBUG-100191
+add_subdirectory(sanity)
+add_subdirectory(snippets)
+endif()
+add_subdirectory(styleimports)
+add_subdirectory(styleimportscompiletimematerial)
+add_subdirectory(styleimportscompiletimeqmlonly)
+add_subdirectory(translation)
diff --git a/tests/auto/quickcontrols2/accessibility/BLACKLIST b/tests/auto/quickcontrols2/accessibility/BLACKLIST
new file mode 100644
index 0000000000..fe7a87f847
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/BLACKLIST
@@ -0,0 +1,2 @@
+[a11y:Label]
+opensuse-leap
diff --git a/tests/auto/quickcontrols2/accessibility/CMakeLists.txt b/tests/auto/quickcontrols2/accessibility/CMakeLists.txt
new file mode 100644
index 0000000000..704b2d45cd
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/CMakeLists.txt
@@ -0,0 +1,52 @@
+# Generated from accessibility.pro.
+
+if(NOT QT_FEATURE_accessibility)
+ return()
+endif()
+
+#####################################################################
+## tst_accessibility Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_accessibility
+ SOURCES
+ tst_accessibility.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:accessibility.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+# _REQUIREMENTS = "qtConfig(accessibility)"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_accessibility CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_accessibility CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/abstractbutton.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/abstractbutton.qml
new file mode 100644
index 0000000000..29d6b3c0a0
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/abstractbutton.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+AbstractButton {
+ text: "AbstractButton"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/busyindicator.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/busyindicator.qml
new file mode 100644
index 0000000000..baaa9ba80b
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/busyindicator.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+BusyIndicator { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/button.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/button.qml
new file mode 100644
index 0000000000..0359b3ac15
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/button.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Button {
+ text: "Button"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/checkbox.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/checkbox.qml
new file mode 100644
index 0000000000..c912be5791
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/checkbox.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+CheckBox {
+ text: "CheckBox"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/checkdelegate.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/checkdelegate.qml
new file mode 100644
index 0000000000..df62bc89d5
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/checkdelegate.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+CheckDelegate {
+ text: "CheckDelegate"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/combobox.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/combobox.qml
new file mode 100644
index 0000000000..bfeac723da
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/combobox.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+ComboBox {
+ model: ["ComboBox"]
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/container.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/container.qml
new file mode 100644
index 0000000000..7d29fec426
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/container.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Container { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/control.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/control.qml
new file mode 100644
index 0000000000..280cfd2962
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/control.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Control { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/dial.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/dial.qml
new file mode 100644
index 0000000000..d7e700b5df
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/dial.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Dial { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/dialog.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/dialog.qml
new file mode 100644
index 0000000000..d88fd36d8e
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/dialog.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Dialog {
+ title: "Dialog"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/drawer.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/drawer.qml
new file mode 100644
index 0000000000..60a35171b2
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/drawer.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Drawer { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/frame.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/frame.qml
new file mode 100644
index 0000000000..b70ccb556c
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/frame.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Frame { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/groupbox.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/groupbox.qml
new file mode 100644
index 0000000000..24f3a294b8
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/groupbox.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+GroupBox {
+ title: "GroupBox"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/itemdelegate.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/itemdelegate.qml
new file mode 100644
index 0000000000..5ec95fe07e
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/itemdelegate.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+ItemDelegate {
+ text: "ItemDelegate"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/label.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/label.qml
new file mode 100644
index 0000000000..5f6a98cd74
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/label.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Label {
+ text: "Label"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/menu.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/menu.qml
new file mode 100644
index 0000000000..07fef72849
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/menu.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Menu { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/menuitem.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/menuitem.qml
new file mode 100644
index 0000000000..194fa988c8
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/menuitem.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+MenuItem {
+ text: "MenuItem"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/page.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/page.qml
new file mode 100644
index 0000000000..cd1f78e170
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/page.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Page {
+ title: "Page"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/pageindicator.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/pageindicator.qml
new file mode 100644
index 0000000000..d64d565706
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/pageindicator.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+PageIndicator { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/pane.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/pane.qml
new file mode 100644
index 0000000000..765c98a394
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/pane.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Pane { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/popup.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/popup.qml
new file mode 100644
index 0000000000..c599bd4c0b
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/popup.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Popup { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/progressbar.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/progressbar.qml
new file mode 100644
index 0000000000..b3e287c33c
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/progressbar.qml
@@ -0,0 +1,8 @@
+import QtQuick
+import QtQuick.Controls
+
+ProgressBar {
+ from: 0
+ to: 100
+ value: 50
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/radiobutton.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/radiobutton.qml
new file mode 100644
index 0000000000..d796b37e17
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/radiobutton.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+RadioButton {
+ text: "RadioButton"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/radiodelegate.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/radiodelegate.qml
new file mode 100644
index 0000000000..d002b98532
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/radiodelegate.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+RadioDelegate {
+ text: "RadioDelegate"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/rangeslider.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/rangeslider.qml
new file mode 100644
index 0000000000..7bd364c443
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/rangeslider.qml
@@ -0,0 +1,11 @@
+import QtQuick
+import QtQuick.Controls
+
+RangeSlider {
+ from: 0
+ to: 100
+ first.value: 25
+ second.value: 75
+ stepSize: 1
+ orientation: Qt.Horizontal
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/roundbutton.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/roundbutton.qml
new file mode 100644
index 0000000000..6c78c0a47d
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/roundbutton.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+RoundButton {
+ text: "RoundButton"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/scrollbar.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/scrollbar.qml
new file mode 100644
index 0000000000..c36b1534b1
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/scrollbar.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+ScrollBar { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/scrollindicator.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/scrollindicator.qml
new file mode 100644
index 0000000000..5b2f44b674
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/scrollindicator.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+ScrollIndicator { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/slider.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/slider.qml
new file mode 100644
index 0000000000..fd60a19844
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/slider.qml
@@ -0,0 +1,10 @@
+import QtQuick
+import QtQuick.Controls
+
+Slider {
+ from: 0
+ to: 100
+ value: 50
+ stepSize: 1
+ orientation: Qt.Horizontal
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/spinbox.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/spinbox.qml
new file mode 100644
index 0000000000..159e1f4676
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/spinbox.qml
@@ -0,0 +1,9 @@
+import QtQuick
+import QtQuick.Controls
+
+SpinBox {
+ from: 0
+ to: 100
+ value: 50
+ stepSize: 1
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/stackview.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/stackview.qml
new file mode 100644
index 0000000000..bd540b91a0
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/stackview.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+StackView { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/swipedelegate.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/swipedelegate.qml
new file mode 100644
index 0000000000..d3724d4dc2
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/swipedelegate.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+SwipeDelegate {
+ text: "SwipeDelegate"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/swipeview.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/swipeview.qml
new file mode 100644
index 0000000000..9eb8221666
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/swipeview.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+SwipeView { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/switch.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/switch.qml
new file mode 100644
index 0000000000..00213086aa
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/switch.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Switch {
+ text: "Switch"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/switchdelegate.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/switchdelegate.qml
new file mode 100644
index 0000000000..9f71ed6848
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/switchdelegate.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+SwitchDelegate {
+ text: "SwitchDelegate"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/tabbar.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/tabbar.qml
new file mode 100644
index 0000000000..423bfea903
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/tabbar.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+TabBar { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/tabbutton.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/tabbutton.qml
new file mode 100644
index 0000000000..ab9ea8ae2c
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/tabbutton.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+TabButton {
+ text: "TabButton"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/textarea.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/textarea.qml
new file mode 100644
index 0000000000..9a1f31d029
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/textarea.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+TextArea {
+ text: "TextArea"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/textfield.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/textfield.qml
new file mode 100644
index 0000000000..42a16bae78
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/textfield.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+TextField {
+ text: "TextField"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/toolbar.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/toolbar.qml
new file mode 100644
index 0000000000..01b93d7d91
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/toolbar.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+ToolBar { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/toolbutton.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/toolbutton.qml
new file mode 100644
index 0000000000..40e1152edc
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/toolbutton.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+ToolButton {
+ text: "ToolButton"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/tooltip.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/tooltip.qml
new file mode 100644
index 0000000000..f1c3cebee5
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/tooltip.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+ToolTip {
+ text: "ToolTip"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/defaults/tumbler.qml b/tests/auto/quickcontrols2/accessibility/data/defaults/tumbler.qml
new file mode 100644
index 0000000000..e3db175bd2
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/defaults/tumbler.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Tumbler { }
diff --git a/tests/auto/quickcontrols2/accessibility/data/ordering/page.qml b/tests/auto/quickcontrols2/accessibility/data/ordering/page.qml
new file mode 100644
index 0000000000..8efafe3232
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/ordering/page.qml
@@ -0,0 +1,23 @@
+import QtQuick
+import QtQuick.Controls
+
+Page {
+ title: "Page"
+ Accessible.role: Accessible.Pane
+
+ header: Label {
+ text: "Header"
+ }
+
+ footer: Label {
+ text: "Footer"
+ }
+
+ Label {
+ text: "Content item 1"
+ }
+
+ Label {
+ text: "Content item 2"
+ }
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/abstractbutton.qml b/tests/auto/quickcontrols2/accessibility/data/override/abstractbutton.qml
new file mode 100644
index 0000000000..ac8efe2601
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/abstractbutton.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+AbstractButton {
+ text: "AbstractButton"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/busyindicator.qml b/tests/auto/quickcontrols2/accessibility/data/override/busyindicator.qml
new file mode 100644
index 0000000000..439788d121
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/busyindicator.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+BusyIndicator {
+ Accessible.name: "BusyIndicatorOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/button.qml b/tests/auto/quickcontrols2/accessibility/data/override/button.qml
new file mode 100644
index 0000000000..578af86c78
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/button.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+Button {
+ text: "Button"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/checkbox.qml b/tests/auto/quickcontrols2/accessibility/data/override/checkbox.qml
new file mode 100644
index 0000000000..5df735091e
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/checkbox.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+CheckBox {
+ text: "CheckBox"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/checkdelegate.qml b/tests/auto/quickcontrols2/accessibility/data/override/checkdelegate.qml
new file mode 100644
index 0000000000..43f65d5083
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/checkdelegate.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+CheckDelegate {
+ text: "CheckDelegate"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/combobox.qml b/tests/auto/quickcontrols2/accessibility/data/override/combobox.qml
new file mode 100644
index 0000000000..fa6ed3b4bf
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/combobox.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+ComboBox {
+ model: ["ComboBox"]
+ Accessible.name: model[0] + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/container.qml b/tests/auto/quickcontrols2/accessibility/data/override/container.qml
new file mode 100644
index 0000000000..4e73f341d6
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/container.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Container {
+ Accessible.name: "ContainerOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/control.qml b/tests/auto/quickcontrols2/accessibility/data/override/control.qml
new file mode 100644
index 0000000000..9c2be4617f
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/control.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Control {
+ Accessible.name: "ControlOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/dial.qml b/tests/auto/quickcontrols2/accessibility/data/override/dial.qml
new file mode 100644
index 0000000000..8dbf0e3764
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/dial.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Dial {
+ Accessible.name: "DialOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/dialog.qml b/tests/auto/quickcontrols2/accessibility/data/override/dialog.qml
new file mode 100644
index 0000000000..d1f3197196
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/dialog.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+Dialog {
+ title: "Dialog"
+ Accessible.name: title + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/drawer.qml b/tests/auto/quickcontrols2/accessibility/data/override/drawer.qml
new file mode 100644
index 0000000000..02e973e2cc
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/drawer.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Drawer {
+ Accessible.name: "DrawerOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/frame.qml b/tests/auto/quickcontrols2/accessibility/data/override/frame.qml
new file mode 100644
index 0000000000..55086b35c0
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/frame.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Frame {
+ Accessible.name: "FrameOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/groupbox.qml b/tests/auto/quickcontrols2/accessibility/data/override/groupbox.qml
new file mode 100644
index 0000000000..d09d0845c9
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/groupbox.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+GroupBox {
+ title: "GroupBox"
+ Accessible.name: title + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/itemdelegate.qml b/tests/auto/quickcontrols2/accessibility/data/override/itemdelegate.qml
new file mode 100644
index 0000000000..2f32cb7514
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/itemdelegate.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+ItemDelegate {
+ text: "ItemDelegate"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/label.qml b/tests/auto/quickcontrols2/accessibility/data/override/label.qml
new file mode 100644
index 0000000000..5c1310f875
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/label.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+Label {
+ text: "Label"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/menu.qml b/tests/auto/quickcontrols2/accessibility/data/override/menu.qml
new file mode 100644
index 0000000000..57a1b3d61f
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/menu.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Menu {
+ Accessible.name: "MenuOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/menuitem.qml b/tests/auto/quickcontrols2/accessibility/data/override/menuitem.qml
new file mode 100644
index 0000000000..e1c064f3b5
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/menuitem.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+MenuItem {
+ text: "MenuItem"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/page.qml b/tests/auto/quickcontrols2/accessibility/data/override/page.qml
new file mode 100644
index 0000000000..b3b87e8ab6
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/page.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+Page {
+ title: "Page"
+ Accessible.name: title + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/pageindicator.qml b/tests/auto/quickcontrols2/accessibility/data/override/pageindicator.qml
new file mode 100644
index 0000000000..f366464df7
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/pageindicator.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+PageIndicator {
+ Accessible.name: "PageIndicatorOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/pane.qml b/tests/auto/quickcontrols2/accessibility/data/override/pane.qml
new file mode 100644
index 0000000000..7b57e9a9f5
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/pane.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Pane {
+ Accessible.name: "PaneOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/popup.qml b/tests/auto/quickcontrols2/accessibility/data/override/popup.qml
new file mode 100644
index 0000000000..9d8d58550a
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/popup.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Popup {
+ Accessible.name: "PopupOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/progressbar.qml b/tests/auto/quickcontrols2/accessibility/data/override/progressbar.qml
new file mode 100644
index 0000000000..58bd2ae1bd
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/progressbar.qml
@@ -0,0 +1,10 @@
+import QtQuick
+import QtQuick.Controls
+
+ProgressBar {
+ from: 0
+ to: 100
+ value: 50
+
+ Accessible.name: "ProgressBarOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/radiobutton.qml b/tests/auto/quickcontrols2/accessibility/data/override/radiobutton.qml
new file mode 100644
index 0000000000..3c555256b8
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/radiobutton.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+RadioButton {
+ text: "RadioButton"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/radiodelegate.qml b/tests/auto/quickcontrols2/accessibility/data/override/radiodelegate.qml
new file mode 100644
index 0000000000..883f963c5c
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/radiodelegate.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+RadioDelegate {
+ text: "RadioDelegate"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/rangeslider.qml b/tests/auto/quickcontrols2/accessibility/data/override/rangeslider.qml
new file mode 100644
index 0000000000..675c34aad1
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/rangeslider.qml
@@ -0,0 +1,13 @@
+import QtQuick
+import QtQuick.Controls
+
+RangeSlider {
+ from: 0
+ to: 100
+ first.value: 25
+ second.value: 75
+ stepSize: 1
+ orientation: Qt.Horizontal
+
+ Accessible.name: "RangeSliderOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/roundbutton.qml b/tests/auto/quickcontrols2/accessibility/data/override/roundbutton.qml
new file mode 100644
index 0000000000..a793ee2833
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/roundbutton.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+RoundButton {
+ text: "RoundButton"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/scrollbar.qml b/tests/auto/quickcontrols2/accessibility/data/override/scrollbar.qml
new file mode 100644
index 0000000000..6b3e613c42
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/scrollbar.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+ScrollBar {
+ Accessible.name: "ScrollBarOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/scrollindicator.qml b/tests/auto/quickcontrols2/accessibility/data/override/scrollindicator.qml
new file mode 100644
index 0000000000..5cc1e5d4b8
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/scrollindicator.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+ScrollIndicator {
+ Accessible.name: "ScrollIndicatorOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/slider.qml b/tests/auto/quickcontrols2/accessibility/data/override/slider.qml
new file mode 100644
index 0000000000..9239f8db99
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/slider.qml
@@ -0,0 +1,11 @@
+import QtQuick
+import QtQuick.Controls
+
+Slider {
+ from: 0
+ to: 100
+ value: 50
+ stepSize: 1
+ orientation: Qt.Horizontal
+ Accessible.name: "SliderOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/spinbox.qml b/tests/auto/quickcontrols2/accessibility/data/override/spinbox.qml
new file mode 100644
index 0000000000..327f2a6d4a
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/spinbox.qml
@@ -0,0 +1,10 @@
+import QtQuick
+import QtQuick.Controls
+
+SpinBox {
+ from: 0
+ to: 100
+ value: 50
+ stepSize: 1
+ Accessible.name: "SpinBoxOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/stackview.qml b/tests/auto/quickcontrols2/accessibility/data/override/stackview.qml
new file mode 100644
index 0000000000..dd3b8342f7
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/stackview.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+StackView {
+ Accessible.name: "StackViewOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/swipedelegate.qml b/tests/auto/quickcontrols2/accessibility/data/override/swipedelegate.qml
new file mode 100644
index 0000000000..bc97fc93bc
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/swipedelegate.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+SwipeDelegate {
+ text: "SwipeDelegate"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/swipeview.qml b/tests/auto/quickcontrols2/accessibility/data/override/swipeview.qml
new file mode 100644
index 0000000000..809b536210
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/swipeview.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+SwipeView {
+ Accessible.name: "SwipeViewOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/switch.qml b/tests/auto/quickcontrols2/accessibility/data/override/switch.qml
new file mode 100644
index 0000000000..18e3eb70ce
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/switch.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+Switch {
+ text: "Switch"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/switchdelegate.qml b/tests/auto/quickcontrols2/accessibility/data/override/switchdelegate.qml
new file mode 100644
index 0000000000..0c66f9e9e9
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/switchdelegate.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+SwitchDelegate {
+ text: "SwitchDelegate"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/tabbar.qml b/tests/auto/quickcontrols2/accessibility/data/override/tabbar.qml
new file mode 100644
index 0000000000..a959f68cae
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/tabbar.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+TabBar {
+ Accessible.name: "TabBarOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/tabbutton.qml b/tests/auto/quickcontrols2/accessibility/data/override/tabbutton.qml
new file mode 100644
index 0000000000..1530a2d1bc
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/tabbutton.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+TabButton {
+ text: "TabButton"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/textarea.qml b/tests/auto/quickcontrols2/accessibility/data/override/textarea.qml
new file mode 100644
index 0000000000..2b1422252f
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/textarea.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+TextArea {
+ text: "TextArea"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/textfield.qml b/tests/auto/quickcontrols2/accessibility/data/override/textfield.qml
new file mode 100644
index 0000000000..42098b6640
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/textfield.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+TextField {
+ text: "TextField"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/toolbar.qml b/tests/auto/quickcontrols2/accessibility/data/override/toolbar.qml
new file mode 100644
index 0000000000..97406f8ca5
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/toolbar.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+ToolBar {
+ Accessible.name: "ToolBarOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/toolbutton.qml b/tests/auto/quickcontrols2/accessibility/data/override/toolbutton.qml
new file mode 100644
index 0000000000..5ecb427baf
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/toolbutton.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+ToolButton {
+ text: "ToolButton"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/tooltip.qml b/tests/auto/quickcontrols2/accessibility/data/override/tooltip.qml
new file mode 100644
index 0000000000..1a4c3a994f
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/tooltip.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+
+ToolTip {
+ text: "ToolTip"
+ Accessible.name: text + "Override"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/data/override/tumbler.qml b/tests/auto/quickcontrols2/accessibility/data/override/tumbler.qml
new file mode 100644
index 0000000000..947f66cd70
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/data/override/tumbler.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+
+Tumbler {
+ Accessible.name: "TumblerOverride"
+}
diff --git a/tests/auto/quickcontrols2/accessibility/tst_accessibility.cpp b/tests/auto/quickcontrols2/accessibility/tst_accessibility.cpp
new file mode 100644
index 0000000000..cd6c408230
--- /dev/null
+++ b/tests/auto/quickcontrols2/accessibility/tst_accessibility.cpp
@@ -0,0 +1,312 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p.h>
+
+#if QT_CONFIG(accessibility)
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/qpa/qplatformintegration.h>
+#include <QtGui/qpa/qplatformaccessibility.h>
+#include <QtQuick/private/qquickaccessibleattached_p.h>
+#endif
+
+class tst_accessibility : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_accessibility();
+
+private slots:
+ void a11y_data();
+ void a11y();
+
+ void override_data();
+ void override();
+
+ void ordering();
+private:
+ QQmlEngine engine;
+};
+
+#if QT_CONFIG(accessibility)
+static QPlatformAccessibility *platformAccessibility()
+{
+ QPlatformIntegration *pfIntegration = QGuiApplicationPrivate::platformIntegration();
+ return pfIntegration ? pfIntegration->accessibility() : nullptr;
+}
+#endif
+
+QString adjustFileBaseName(const QString &fileBaseName)
+{
+#if !QT_CONFIG(accessibility)
+ if (fileBaseName == QLatin1Literal("dayofweekrow")
+ || fileBaseName == QLatin1Literal("monthgrid")
+ || fileBaseName == QLatin1Literal("weeknumbercolumn"))
+ return fileBaseName += QLatin1Literal("-2");
+#else
+ return fileBaseName;
+#endif
+}
+
+QQuickItem *findItem(QObject *object)
+{
+ QQuickItem *item = qobject_cast<QQuickItem *>(object);
+ if (!item) {
+ QQuickPopup *popup = qobject_cast<QQuickPopup *>(object);
+ if (popup)
+ item = popup->popupItem();
+ }
+ return item;
+}
+
+tst_accessibility::tst_accessibility()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_accessibility::a11y_data()
+{
+ QTest::addColumn<QString>("fileBaseName");
+ QTest::addColumn<QAccessible::Role>("role");
+ QTest::addColumn<QString>("text");
+
+ QTest::newRow("AbstractButton") << "abstractbutton" << QAccessible::Button << "AbstractButton";
+ QTest::newRow("BusyIndicator") << "busyindicator" << QAccessible::Indicator << "";
+ QTest::newRow("Button") << "button" << QAccessible::Button << "Button";
+ QTest::newRow("CheckBox") << "checkbox" << QAccessible::CheckBox << "CheckBox";
+ QTest::newRow("CheckDelegate") << "checkdelegate" << QAccessible::CheckBox << "CheckDelegate";
+ QTest::newRow("ComboBox") << "combobox" << QAccessible::ComboBox << "ComboBox";
+ QTest::newRow("Container") << "container" << QAccessible::NoRole << "";
+ QTest::newRow("Control") << "control" << QAccessible::NoRole << "";
+ QTest::newRow("Dial") << "dial" << QAccessible::Dial << "";
+ QTest::newRow("Dialog") << "dialog" << QAccessible::Dialog << "Dialog";
+ QTest::newRow("Drawer") << "drawer" << QAccessible::Dialog << "";
+ QTest::newRow("Frame") << "frame" << QAccessible::Border << "";
+ QTest::newRow("GroupBox") << "groupbox" << QAccessible::Grouping << "GroupBox";
+ QTest::newRow("ItemDelegate") << "itemdelegate" << QAccessible::ListItem << "ItemDelegate";
+ QTest::newRow("Label") << "label" << QAccessible::StaticText << "Label";
+ QTest::newRow("Menu") << "menu" << QAccessible::PopupMenu << "";
+ QTest::newRow("MenuItem") << "menuitem" << QAccessible::MenuItem << "MenuItem";
+ QTest::newRow("Page") << "page" << QAccessible::PageTab << "Page";
+ QTest::newRow("PageIndicator") << "pageindicator" << QAccessible::Indicator << "";
+ QTest::newRow("Pane") << "pane" << QAccessible::Pane << "";
+ QTest::newRow("Popup") << "popup" << QAccessible::Dialog << "";
+ QTest::newRow("ProgressBar") << "progressbar" << QAccessible::ProgressBar << "";
+ QTest::newRow("RadioButton") << "radiobutton" << QAccessible::RadioButton << "RadioButton";
+ QTest::newRow("RadioDelegate") << "radiodelegate" << QAccessible::RadioButton << "RadioDelegate";
+ QTest::newRow("RangeSlider") << "rangeslider" << QAccessible::Slider << "";
+ QTest::newRow("RoundButton") << "roundbutton" << QAccessible::Button << "RoundButton";
+ QTest::newRow("ScrollBar") << "scrollbar" << QAccessible::ScrollBar << "";
+ QTest::newRow("ScrollIndicator") << "scrollindicator" << QAccessible::Indicator << "";
+ QTest::newRow("Slider") << "slider" << QAccessible::Slider << "";
+ QTest::newRow("SpinBox") << "spinbox" << QAccessible::SpinBox << "";
+ QTest::newRow("StackView") << "stackview" << QAccessible::LayeredPane << "";
+ QTest::newRow("SwipeDelegate") << "swipedelegate" << QAccessible::ListItem << "SwipeDelegate";
+ QTest::newRow("SwipeView") << "swipeview" << QAccessible::PageTabList << "";
+ QTest::newRow("Switch") << "switch" << QAccessible::CheckBox << "Switch";
+ QTest::newRow("SwitchDelegate") << "switchdelegate" << QAccessible::ListItem << "SwitchDelegate";
+ QTest::newRow("TabBar") << "tabbar" << QAccessible::PageTabList << "";
+ QTest::newRow("TabButton") << "tabbutton" << QAccessible::PageTab << "TabButton";
+ QTest::newRow("TextArea") << "textarea" << QAccessible::EditableText << "";
+ QTest::newRow("TextField") << "textfield" << QAccessible::EditableText << "";
+ QTest::newRow("ToolBar") << "toolbar" << QAccessible::ToolBar << "";
+ QTest::newRow("ToolButton") << "toolbutton" << QAccessible::Button << "ToolButton";
+ QTest::newRow("ToolTip") << "tooltip" << QAccessible::ToolTip << "ToolTip";
+ QTest::newRow("Tumbler") << "tumbler" << QAccessible::NoRole << ""; // TODO
+}
+
+void tst_accessibility::a11y()
+{
+ QFETCH(QString, fileBaseName);
+ QFETCH(QAccessible::Role, role);
+ QFETCH(QString, text);
+
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("defaults/" + adjustFileBaseName(fileBaseName) + ".qml"));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QQuickItem *item = findItem(object.data());
+ QVERIFY(item);
+
+#if QT_CONFIG(accessibility)
+ QQuickAccessibleAttached *attached = QQuickAccessibleAttached::attachedProperties(item);
+ if (QAccessible::isActive()) {
+ QVERIFY(attached);
+ } else {
+ QVERIFY(!attached);
+ QPlatformAccessibility *accessibility = platformAccessibility();
+ if (!accessibility)
+ QSKIP("No QPlatformAccessibility available.");
+ accessibility->setActive(true);
+ attached = QQuickAccessibleAttached::attachedProperties(item);
+ }
+ QVERIFY(attached);
+ QCOMPARE(attached->role(), role);
+ QCOMPARE(attached->name(), text);
+#else
+ Q_UNUSED(role);
+ Q_UNUSED(text);
+#endif
+}
+
+void tst_accessibility::override_data()
+{
+ QTest::addColumn<QAccessible::Role>("role");
+
+ QTest::newRow("AbstractButton") << QAccessible::Button;
+ QTest::newRow("BusyIndicator") << QAccessible::Indicator;
+ QTest::newRow("Button") << QAccessible::Button;
+ QTest::newRow("CheckBox") << QAccessible::CheckBox;
+ QTest::newRow("CheckDelegate") << QAccessible::CheckBox;
+ QTest::newRow("ComboBox") << QAccessible::ComboBox;
+ QTest::newRow("Container") << QAccessible::NoRole;
+ QTest::newRow("Control") << QAccessible::NoRole;
+ QTest::newRow("Dial") << QAccessible::Dial;
+ QTest::newRow("Dialog") << QAccessible::Dialog;
+ QTest::newRow("Drawer") << QAccessible::Dialog;
+ QTest::newRow("Frame") << QAccessible::Border;
+ QTest::newRow("GroupBox") << QAccessible::Grouping;
+ QTest::newRow("ItemDelegate") << QAccessible::ListItem;
+ QTest::newRow("Label") << QAccessible::StaticText;
+ QTest::newRow("Menu") << QAccessible::PopupMenu;
+ QTest::newRow("MenuItem") << QAccessible::MenuItem;
+ QTest::newRow("Page") << QAccessible::PageTab;
+ QTest::newRow("PageIndicator") << QAccessible::Indicator;
+ QTest::newRow("Pane") << QAccessible::Pane;
+ QTest::newRow("Popup") << QAccessible::Dialog;
+ QTest::newRow("ProgressBar") << QAccessible::ProgressBar;
+ QTest::newRow("RadioButton") << QAccessible::RadioButton;
+ QTest::newRow("RadioDelegate") << QAccessible::RadioButton;
+ QTest::newRow("RangeSlider") << QAccessible::Slider;
+ QTest::newRow("RoundButton") << QAccessible::Button;
+ QTest::newRow("ScrollBar") << QAccessible::ScrollBar;
+ QTest::newRow("ScrollIndicator") << QAccessible::Indicator;
+ QTest::newRow("Slider") << QAccessible::Slider;
+ QTest::newRow("SpinBox") << QAccessible::SpinBox;
+ QTest::newRow("StackView") << QAccessible::LayeredPane;
+ QTest::newRow("SwipeDelegate") << QAccessible::ListItem;
+ QTest::newRow("SwipeView") << QAccessible::PageTabList;
+ QTest::newRow("Switch") << QAccessible::CheckBox;
+ QTest::newRow("SwitchDelegate") << QAccessible::ListItem;
+ QTest::newRow("TabBar") << QAccessible::PageTabList;
+ QTest::newRow("TabButton") << QAccessible::PageTab;
+ QTest::newRow("TextArea") << QAccessible::EditableText;
+ QTest::newRow("TextField") << QAccessible::EditableText;
+ QTest::newRow("ToolBar") << QAccessible::ToolBar;
+ QTest::newRow("ToolButton") << QAccessible::Button;
+ QTest::newRow("ToolTip") << QAccessible::ToolTip;
+ QTest::newRow("Tumbler") << QAccessible::NoRole;
+}
+
+void tst_accessibility::override()
+{
+ QFETCH(QAccessible::Role, role);
+
+ const QString name = QTest::currentDataTag();
+ const QString fileBaseName = name.toLower();
+
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("override/" + adjustFileBaseName(fileBaseName) + ".qml"));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QQuickItem *item = findItem(object.data());
+ QVERIFY(item);
+
+#if QT_CONFIG(accessibility)
+ QQuickAccessibleAttached *attached = QQuickAccessibleAttached::attachedProperties(item);
+ if (QAccessible::isActive()) {
+ QVERIFY(attached);
+ } else {
+ QPlatformAccessibility *accessibility = platformAccessibility();
+ if (!accessibility)
+ QSKIP("No QPlatformAccessibility available.");
+ accessibility->setActive(true);
+ if (!attached)
+ attached = QQuickAccessibleAttached::attachedProperties(item);
+ }
+
+ QVERIFY(attached);
+ QCOMPARE(attached->role(), role);
+ QCOMPARE(attached->name(), name + "Override");
+#else
+ Q_UNUSED(role);
+ Q_UNUSED(text);
+#endif
+}
+template <typename Predicate>
+void a11yDescendants(QAccessibleInterface *iface, Predicate pred)
+{
+ for (int i = 0; i < iface->childCount(); ++i) {
+ if (QAccessibleInterface *child = iface->child(i)) {
+ pred(child);
+ a11yDescendants(child, pred);
+ }
+ }
+}
+
+void tst_accessibility::ordering()
+{
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("ordering/page.qml"));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+#if QT_CONFIG(accessibility)
+ QQuickItem *item = findItem(object.data());
+ QVERIFY(item);
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(item);
+ QVERIFY(iface);
+ QStringList strings;
+ a11yDescendants(iface, [&](QAccessibleInterface *iface) {strings << iface->text(QAccessible::Name);});
+ QCOMPARE(strings.join(QLatin1String(", ")), "Header, Content item 1, Content item 2, Footer");
+#endif
+}
+
+QTEST_MAIN(tst_accessibility)
+
+#include "tst_accessibility.moc"
diff --git a/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.10.0.linux-gcc-amd64.txt b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.10.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..1b41ce037f
--- /dev/null
+++ b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.10.0.linux-gcc-amd64.txt
@@ -0,0 +1,10983 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7fba168d6720) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7fba16930ea0) 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 (0x0x7fba1645e120) 0 empty
+
+Class std::__do_is_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_default_constructible_impl (0x0x7fba1645e360) 0 empty
+
+Class std::__do_is_static_castable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_static_castable_impl (0x0x7fba1645e5a0) 0 empty
+
+Class std::__do_is_direct_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_direct_constructible_impl (0x0x7fba1645e720) 0 empty
+
+Class std::__do_is_nary_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nary_constructible_impl (0x0x7fba1645eae0) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7fba165172a0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7fba16517360) 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 (0x0x7fba165176c0) 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 (0x0x7fba16517780) 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 (0x0x7fba16517840) 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 (0x0x7fba16517900) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7fba16517ba0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7fba16517d80) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7fba16595240) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7fba165952a0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7fba165cff00) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7fba165cff60) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7fba16547340) 0 empty
+ std::input_iterator_tag (0x0x7fba165fe000) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7fba165473a8) 0 empty
+ std::forward_iterator_tag (0x0x7fba16547410) 0 empty
+ std::input_iterator_tag (0x0x7fba165fe060) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7fba16547478) 0 empty
+ std::bidirectional_iterator_tag (0x0x7fba165474e0) 0 empty
+ std::forward_iterator_tag (0x0x7fba16547548) 0 empty
+ std::input_iterator_tag (0x0x7fba165fe0c0) 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 (0x0x7fba165fed20) 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 (0x0x7fba165fed80) 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 (0x0x7fba165fede0) 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 (0x0x7fba165fee40) 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 (0x0x7fba165feea0) 0 empty
+
+Class wait
+ size=4 align=4
+ base size=4 base align=4
+wait (0x0x7fba162c19c0) 0
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7fba162c1c00) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7fba162c1cc0) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7fba162c1d20) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7fba162c1de0) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7fba162c1e40) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7fba16365300) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7fba16365360) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5u 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 (0x0x7fba163653c0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16u)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5u 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 (0x0x7fba16547a90) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16u)
+ std::exception (0x0x7fba16365420) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7fba16547a90)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7fba16365480) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4u 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 (0x0x7fba163654e0) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16u)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5u 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 (0x0x7fba16547c98) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16u)
+ std::exception (0x0x7fba16365900) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fba16547c98)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5u 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 (0x0x7fba16547d00) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16u)
+ std::bad_alloc (0x0x7fba16547d68) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7fba16547d00)
+ std::exception (0x0x7fba16365960) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fba16547d68)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7fba163659c0) 0 empty
+
+Class __exception
+ size=40 align=8
+ base size=40 base align=8
+__exception (0x0x7fba160da600) 0
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7fba15eec300) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7fba15eec360) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16u)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7fba15f8d240) 0
+
+Class __sched_param
+ size=4 align=4
+ base size=4 base align=4
+__sched_param (0x0x7fba15f8d2a0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7fba15f8d360) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7fba15f8d3c0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7fba15f8d420) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7fba15f8d480) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7fba15f8d5a0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7fba15f8d600) 0
+
+Class _IO_marker
+ size=24 align=8
+ base size=24 base align=8
+_IO_marker (0x0x7fba15f8da20) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7fba15f8da80) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7fba15aac2a0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7fba15aac300) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7fba15b7d2a0) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7fba159350c0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7fba15ac6af8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fba15935180) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7fba15ac6b60) 0
+ std::_Bit_iterator_base (0x0x7fba15ac6bc8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fba159351e0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7fba15ac6c30) 0
+ std::_Bit_iterator_base (0x0x7fba15ac6c98) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fba15935240) 0 empty
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7fba15756060) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7fba15756de0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7fba15756d80) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7fba1549fd80) 0
+
+Class qIsNull(double)::U
+ size=8 align=8
+ base size=8 base align=8
+qIsNull(double)::U (0x0x7fba140858a0) 0
+
+Class qIsNull(float)::U
+ size=4 align=4
+ base size=4 base align=4
+qIsNull(float)::U (0x0x7fba14085900) 0
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7fba1416e3c0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7fba1416e420) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7fba1416e480) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7fba1416e4e0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7fba1416e780) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7fba1416ecc0) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7fba1415f9c0) 0
+ std::__atomic_flag_base (0x0x7fba1416ed20) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7fba13d91138) 0
+ QAtomicInteger<int> (0x0x7fba13d911a0) 0
+ QBasicAtomicInteger<int> (0x0x7fba13d0e480) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7fba13bc5a20) 0 empty
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7fba139c7a80) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7fba139c7ba0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7fba13b97bc8) 0
+ QGenericArgument (0x0x7fba139c7c00) 0
+
+Class QMetaObject
+ size=48 align=8
+ base size=48 base align=8
+QMetaObject (0x0x7fba139c7d80) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7fba139c7e40) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7fba13681ea0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7fba13681f00) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7fba1372b1e0) 0
+
+Class QArrayData
+ size=24 align=8
+ base size=24 base align=8
+QArrayData (0x0x7fba1372b240) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7fba1372b5a0) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7fba1372b600) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4u 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 (0x0x7fba1372b660) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16u)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7fba1372b6c0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7fba1372b720) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7fba1372bae0) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5u 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 (0x0x7fba1342f138) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16u)
+ std::exception (0x0x7fba1372bba0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fba1342f138)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5u 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 (0x0x7fba1342f1a0) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16u)
+ std::logic_error (0x0x7fba1342f208) 0
+ primary-for std::domain_error (0x0x7fba1342f1a0)
+ std::exception (0x0x7fba1372bc00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fba1342f208)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5u 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 (0x0x7fba1342f270) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16u)
+ std::logic_error (0x0x7fba1342f2d8) 0
+ primary-for std::invalid_argument (0x0x7fba1342f270)
+ std::exception (0x0x7fba1372bc60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fba1342f2d8)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5u 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 (0x0x7fba1342f340) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16u)
+ std::logic_error (0x0x7fba1342f3a8) 0
+ primary-for std::length_error (0x0x7fba1342f340)
+ std::exception (0x0x7fba1372bcc0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fba1342f3a8)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5u 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 (0x0x7fba1342f410) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16u)
+ std::logic_error (0x0x7fba1342f478) 0
+ primary-for std::out_of_range (0x0x7fba1342f410)
+ std::exception (0x0x7fba1372bd20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fba1342f478)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5u 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 (0x0x7fba1342f4e0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16u)
+ std::exception (0x0x7fba1372bd80) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fba1342f4e0)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5u 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 (0x0x7fba1342f548) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16u)
+ std::runtime_error (0x0x7fba1342f5b0) 0
+ primary-for std::range_error (0x0x7fba1342f548)
+ std::exception (0x0x7fba1372bde0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fba1342f5b0)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5u 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 (0x0x7fba1342f618) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16u)
+ std::runtime_error (0x0x7fba1342f680) 0
+ primary-for std::overflow_error (0x0x7fba1342f618)
+ std::exception (0x0x7fba1372be40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fba1342f680)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5u 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 (0x0x7fba1342f6e8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16u)
+ std::runtime_error (0x0x7fba1342f750) 0
+ primary-for std::underflow_error (0x0x7fba1342f6e8)
+ std::exception (0x0x7fba1372bea0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fba1342f750)
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0u
+24 0u
+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 (0x0x7fba1346e060) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16u)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7fba1346e2a0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7fba1346e420) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5u 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 (0x0x7fba1342fc30) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16u)
+ std::runtime_error (0x0x7fba1342fc98) 0
+ primary-for std::system_error (0x0x7fba1342fc30)
+ std::exception (0x0x7fba1346e660) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fba1342fc98)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5u 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 (0x0x7fba134cc888) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16u)
+ std::system_error (0x0x7fba134cc8f0) 0
+ primary-for std::ios_base::failure (0x0x7fba134cc888)
+ std::runtime_error (0x0x7fba134cc958) 0
+ primary-for std::system_error (0x0x7fba134cc8f0)
+ std::exception (0x0x7fba1346e960) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fba134cc958)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7fba1346e9c0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7fba1346ea20) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7fba1346ea80) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4u 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 (0x0x7fba1346e900) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16u)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7fba131a2240) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7fba131a2900) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2u entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24u)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64u)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2u entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64u)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2u entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24u)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64u)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2u entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64u)
+
+Construction vtable for std::basic_istream<char> (0x0x7fba1318e208 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10u entries
+0 24u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0u
+32 0u
+40 18446744073709551592u
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0u
+72 0u
+
+Construction vtable for std::basic_ostream<char> (0x0x7fba1318e2d8 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10u entries
+0 8u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0u
+32 0u
+40 18446744073709551608u
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0u
+72 0u
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7u entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24u)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24u)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64u)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24u)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64u)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104u)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64u)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7fba1318e680 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10u entries
+0 24u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0u
+32 0u
+40 18446744073709551592u
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0u
+72 0u
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7fba1318e750 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10u entries
+0 8u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0u
+32 0u
+40 18446744073709551608u
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0u
+72 0u
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7u entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24u)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64u)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24u)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64u)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104u)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64u)
+
+Class QByteArrayDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QByteArrayDataPtr (0x0x7fba12ddd180) 0
+
+Class QByteArray
+ size=8 align=8
+ base size=8 base align=8
+QByteArray (0x0x7fba12ddd1e0) 0
+
+Class QByteRef
+ size=16 align=8
+ base size=12 base align=8
+QByteRef (0x0x7fba12edb540) 0
+
+Class QStringDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QStringDataPtr (0x0x7fba12edb8a0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7fba12edbd20) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7fba12c09ba0) 0
+
+Class QString::Null
+ size=1 align=1
+ base size=0 base align=1
+QString::Null (0x0x7fba12c98240) 0 empty
+
+Class QString
+ size=8 align=8
+ base size=8 base align=8
+QString (0x0x7fba12c981e0) 0
+
+Class QCharRef
+ size=16 align=8
+ base size=12 base align=8
+QCharRef (0x0x7fba12a41300) 0
+
+Class QStringRef
+ size=16 align=8
+ base size=16 base align=8
+QStringRef (0x0x7fba12a41f00) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7fba1283fb40) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7fba1283fba0) 0 empty
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7fba1283fc00) 0
+
+Class QListData::NotArrayCompatibleLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotArrayCompatibleLayout (0x0x7fba12676000) 0 empty
+
+Class QListData::NotIndirectLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotIndirectLayout (0x0x7fba12676060) 0 empty
+
+Class QListData::ArrayCompatibleLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::ArrayCompatibleLayout (0x0x7fba125bd1a0) 0 empty
+ QListData::NotIndirectLayout (0x0x7fba126760c0) 0 empty
+
+Class QListData::InlineWithPaddingLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::InlineWithPaddingLayout (0x0x7fba12679150) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7fba12676120) 0 empty
+ QListData::NotIndirectLayout (0x0x7fba12676180) 0 empty
+
+Class QListData::IndirectLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::IndirectLayout (0x0x7fba125bd208) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7fba126761e0) 0 empty
+
+Class QListData::Data
+ size=24 align=8
+ base size=24 base align=8
+QListData::Data (0x0x7fba12676240) 0
+
+Class QListData
+ size=8 align=8
+ base size=8 base align=8
+QListData (0x0x7fba1283ff60) 0
+
+Class QRegExp
+ size=8 align=8
+ base size=8 base align=8
+QRegExp (0x0x7fba126766c0) 0
+
+Class QStringMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QStringMatcher::Data (0x0x7fba12420900) 0
+
+Class QStringMatcher
+ size=1048 align=8
+ base size=1048 base align=8
+QStringMatcher (0x0x7fba124208a0) 0
+
+Class QStringList
+ size=8 align=8
+ base size=8 base align=8
+QStringList (0x0x7fba1241fc30) 0
+ QList<QString> (0x0x7fba1241fc98) 0
+ QListSpecialMethods<QString> (0x0x7fba12420ae0) 0 empty
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7fba12420f00) 0 empty
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7fba124c2a20) 0
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7fba122c70c0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7fba122c7240) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7fba122c7300) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7fba1249c5b0) 0
+ std::__uses_alloc_base (0x0x7fba122c72a0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7fba11fb7360) 0 empty
+
+Class QtPrivate::AbstractDebugStreamFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::AbstractDebugStreamFunction (0x0x7fba11fb75a0) 0
+
+Class QtPrivate::AbstractComparatorFunction
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::AbstractComparatorFunction (0x0x7fba11fb7660) 0
+
+Class QtPrivate::AbstractConverterFunction
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::AbstractConverterFunction (0x0x7fba11fb7780) 0
+
+Class QMetaType
+ size=80 align=8
+ base size=80 base align=8
+QMetaType (0x0x7fba11fb7900) 0
+
+Class QtMetaTypePrivate::VariantData
+ size=24 align=8
+ base size=20 base align=8
+QtMetaTypePrivate::VariantData (0x0x7fba11fb7d20) 0
+
+Class QtMetaTypePrivate::VectorBoolElements
+ size=1 align=1
+ base size=0 base align=1
+QtMetaTypePrivate::VectorBoolElements (0x0x7fba11fb7e40) 0 empty
+
+Class QtMetaTypePrivate::QSequentialIterableImpl
+ size=104 align=8
+ base size=104 base align=8
+QtMetaTypePrivate::QSequentialIterableImpl (0x0x7fba1211c7e0) 0
+
+Class QtMetaTypePrivate::QAssociativeIterableImpl
+ size=112 align=8
+ base size=112 base align=8
+QtMetaTypePrivate::QAssociativeIterableImpl (0x0x7fba1211cc00) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7fba1211cf00) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7fba11c0a780) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7fba11d59600) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=48 align=8
+ base size=48 base align=8
+QObjectData (0x0x7fba11d59660) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16u)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7fba11d59840) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14u 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 (0x0x7fba11d597e0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16u)
+
+Vtable for QObjectUserData
+QObjectUserData::_ZTV15QObjectUserData: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QObjectUserData)
+16 (int (*)(...))QObjectUserData::~QObjectUserData
+24 (int (*)(...))QObjectUserData::~QObjectUserData
+
+Class QObjectUserData
+ size=8 align=8
+ base size=8 base align=8
+QObjectUserData (0x0x7fba11a1fae0) 0 nearly-empty
+ vptr=((& QObjectUserData::_ZTV15QObjectUserData) + 16u)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7fba11a1fb40) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7fba11a1fc00) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0u
+48 0u
+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 (0x0x7fba11a487b8) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16u)
+ QObject (0x0x7fba11a1fba0) 0
+ primary-for QAbstractAnimation (0x0x7fba11a487b8)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7fba11a1fcc0) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18u 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 (0x0x7fba11a48820) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16u)
+ QObject (0x0x7fba11a1fc60) 0
+ primary-for QAnimationDriver (0x0x7fba11a48820)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7fba11a1fd80) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14u 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 (0x0x7fba11a48888) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16u)
+ QObject (0x0x7fba11a1fd20) 0
+ primary-for QEventLoop (0x0x7fba11a48888)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7fba11a1ff60) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7fba11ad8060) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7fba11ad80c0) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 28u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QAbstractEventDispatcher::startingUp
+216 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7fba11a489c0) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16u)
+ QObject (0x0x7fba11ad8000) 0
+ primary-for QAbstractEventDispatcher (0x0x7fba11a489c0)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8u 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 (0x0x7fba11ad8360) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16u)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5u 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 (0x0x7fba11a48bc8) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16u)
+ std::exception (0x0x7fba11ad83c0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7fba11a48bc8)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5u 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 (0x0x7fba11a48c30) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16u)
+ std::exception (0x0x7fba11ad8420) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7fba11a48c30)
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5u 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 (0x0x7fba11799ea0) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16u)
+ std::exception (0x0x7fba118714e0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7fba11799ea0)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7fba118715a0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7fba11871600) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7fba11871720) 0
+
+Class QMapNodeBase
+ size=24 align=8
+ base size=24 base align=8
+QMapNodeBase (0x0x7fba11871c00) 0
+
+Class QMapDataBase
+ size=40 align=8
+ base size=40 base align=8
+QMapDataBase (0x0x7fba11923180) 0
+
+Class QHashData::Node
+ size=16 align=8
+ base size=16 base align=8
+QHashData::Node (0x0x7fba11923540) 0
+
+Class QHashData
+ size=48 align=8
+ base size=44 base align=8
+QHashData (0x0x7fba119234e0) 0
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7fba119235a0) 0 empty
+
+Class QVariant::PrivateShared
+ size=16 align=8
+ base size=12 base align=8
+QVariant::PrivateShared (0x0x7fba11923e40) 0
+
+Class QVariant::Private::Data
+ size=8 align=8
+ base size=8 base align=8
+QVariant::Private::Data (0x0x7fba11923f00) 0
+
+Class QVariant::Private
+ size=16 align=8
+ base size=12 base align=8
+QVariant::Private (0x0x7fba11923ea0) 0
+
+Class QVariant::Handler
+ size=72 align=8
+ base size=72 base align=8
+QVariant::Handler (0x0x7fba11923f60) 0
+
+Class QVariant
+ size=16 align=8
+ base size=16 base align=8
+QVariant (0x0x7fba11923de0) 0
+
+Class QVariantComparisonHelper
+ size=8 align=8
+ base size=8 base align=8
+QVariantComparisonHelper (0x0x7fba11400a80) 0
+
+Class QSequentialIterable::const_iterator
+ size=112 align=8
+ base size=112 base align=8
+QSequentialIterable::const_iterator (0x0x7fba114a8120) 0
+
+Class QSequentialIterable
+ size=104 align=8
+ base size=104 base align=8
+QSequentialIterable (0x0x7fba114a80c0) 0
+
+Class QAssociativeIterable::const_iterator
+ size=120 align=8
+ base size=120 base align=8
+QAssociativeIterable::const_iterator (0x0x7fba114a81e0) 0
+
+Class QAssociativeIterable
+ size=112 align=8
+ base size=112 base align=8
+QAssociativeIterable (0x0x7fba114a8180) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7fba111c24e0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7fba111c2ba0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7fba10f97300) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractItemModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractItemModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7fba10f81c30) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16u)
+ QObject (0x0x7fba10f972a0) 0
+ primary-for QAbstractItemModel (0x0x7fba10f81c30)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7fba10f97660) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractTableModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractTableModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7fba10f81e38) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16u)
+ QAbstractItemModel (0x0x7fba10f81ea0) 0
+ primary-for QAbstractTableModel (0x0x7fba10f81e38)
+ QObject (0x0x7fba10f97600) 0
+ primary-for QAbstractItemModel (0x0x7fba10f81ea0)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7fba10f97720) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractListModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7fba10f81f08) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16u)
+ QAbstractItemModel (0x0x7fba10f81f70) 0
+ primary-for QAbstractListModel (0x0x7fba10f81f08)
+ QObject (0x0x7fba10f976c0) 0
+ primary-for QAbstractItemModel (0x0x7fba10f81f70)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7fba10f979c0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16u)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7fba10f97a80) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 53u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QAbstractProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QAbstractProxyModel::setSourceModel
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))__cxa_pure_virtual
+408 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+416 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7fba1106e0d0) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16u)
+ QAbstractItemModel (0x0x7fba1106e138) 0
+ primary-for QAbstractProxyModel (0x0x7fba1106e0d0)
+ QObject (0x0x7fba10f97a20) 0
+ primary-for QAbstractItemModel (0x0x7fba1106e138)
+
+Class QAbstractState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractState::QPrivateSignal (0x0x7fba10f97b40) 0 empty
+
+Vtable for QAbstractState
+QAbstractState::_ZTV14QAbstractState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QAbstractState)
+16 (int (*)(...))QAbstractState::metaObject
+24 (int (*)(...))QAbstractState::qt_metacast
+32 (int (*)(...))QAbstractState::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractState
+ size=16 align=8
+ base size=16 base align=8
+QAbstractState (0x0x7fba1106e1a0) 0
+ vptr=((& QAbstractState::_ZTV14QAbstractState) + 16u)
+ QObject (0x0x7fba10f97ae0) 0
+ primary-for QAbstractState (0x0x7fba1106e1a0)
+
+Class QAbstractTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTransition::QPrivateSignal (0x0x7fba10f97c00) 0 empty
+
+Vtable for QAbstractTransition
+QAbstractTransition::_ZTV19QAbstractTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTransition)
+16 (int (*)(...))QAbstractTransition::metaObject
+24 (int (*)(...))QAbstractTransition::qt_metacast
+32 (int (*)(...))QAbstractTransition::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractTransition
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTransition (0x0x7fba1106e208) 0
+ vptr=((& QAbstractTransition::_ZTV19QAbstractTransition) + 16u)
+ QObject (0x0x7fba10f97ba0) 0
+ primary-for QAbstractTransition (0x0x7fba1106e208)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7fba10f97cc0) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0u
+48 0u
+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 (0x0x7fba1106e270) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16u)
+ QAbstractAnimation (0x0x7fba1106e2d8) 0
+ primary-for QAnimationGroup (0x0x7fba1106e270)
+ QObject (0x0x7fba10f97c60) 0
+ primary-for QAbstractAnimation (0x0x7fba1106e2d8)
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7fba1110fa20) 0
+
+Class QBitArray
+ size=8 align=8
+ base size=8 base align=8
+QBitArray (0x0x7fba1110fcc0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=12 base align=8
+QBitRef (0x0x7fba1110fd80) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7fba10da20c0) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 30u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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 (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7fba1106e958) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16u)
+ QObject (0x0x7fba10da2060) 0
+ primary-for QIODevice (0x0x7fba1106e958)
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7fba10da2300) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 30u 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 (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7fba1106ea90) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16u)
+ QIODevice (0x0x7fba1106eaf8) 0
+ primary-for QBuffer (0x0x7fba1106ea90)
+ QObject (0x0x7fba10da22a0) 0
+ primary-for QIODevice (0x0x7fba1106eaf8)
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7fba10da23c0) 0
+
+Class QByteArrayMatcher
+ size=1040 align=8
+ base size=1040 base align=8
+QByteArrayMatcher (0x0x7fba10da2360) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7fba10da24e0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7fba10da2480) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7fba10da26c0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7fba10da28a0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7fba10da2ea0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7fba10da2f60) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7fba10b89f60) 0
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+
+Class QEvent
+ size=24 align=8
+ base size=20 base align=8
+QEvent (0x0x7fba10bc0420) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16u)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+
+Class QTimerEvent
+ size=24 align=8
+ base size=24 base align=8
+QTimerEvent (0x0x7fba10c19000) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16u)
+ QEvent (0x0x7fba10bc0480) 0
+ primary-for QTimerEvent (0x0x7fba10c19000)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+
+Class QChildEvent
+ size=32 align=8
+ base size=32 base align=8
+QChildEvent (0x0x7fba10c19068) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16u)
+ QEvent (0x0x7fba10bc04e0) 0
+ primary-for QChildEvent (0x0x7fba10c19068)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+
+Class QDynamicPropertyChangeEvent
+ size=32 align=8
+ base size=32 base align=8
+QDynamicPropertyChangeEvent (0x0x7fba10c195b0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16u)
+ QEvent (0x0x7fba10bc09c0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7fba10c195b0)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=24 base align=8
+QDeferredDeleteEvent (0x0x7fba10c19618) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16u)
+ QEvent (0x0x7fba10bc0a20) 0
+ primary-for QDeferredDeleteEvent (0x0x7fba10c19618)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7fba10bc0ae0) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16u 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 (0x0x7fba10c19680) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16u)
+ QObject (0x0x7fba10bc0a80) 0
+ primary-for QCoreApplication (0x0x7fba10c19680)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7fba10bc0b40) 0
+
+Class QContiguousCacheData
+ size=24 align=4
+ base size=24 base align=4
+QContiguousCacheData (0x0x7fba10bc0ba0) 0
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7fba10caa1e0) 0
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7fba10caa240) 0
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7fba10caa300) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7fba10caa7e0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7fba10caaa80) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7fba1097d240) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7fba1097d2a0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7fba1097d1e0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7fba10a263c0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7fba10a268a0) 0
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4u 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 (0x0x7fba10744840) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16u)
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7fba10744ae0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7fba10744d20) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7fba10744ea0) 0
+
+Class QDebug::Stream
+ size=80 align=8
+ base size=76 base align=8
+QDebug::Stream (0x0x7fba1088f420) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7fba1088f3c0) 0
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7fba105e1900) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7fba105e19c0) 0 empty
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7fba106b1b40) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFileDevice::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7fba106c75b0) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16u)
+ QIODevice (0x0x7fba106c7618) 0
+ primary-for QFileDevice (0x0x7fba106c75b0)
+ QObject (0x0x7fba106b1ae0) 0
+ primary-for QIODevice (0x0x7fba106c7618)
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7fba106b1d80) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7fba106c7750) 0
+ vptr=((& QFile::_ZTV5QFile) + 16u)
+ QFileDevice (0x0x7fba106c77b8) 0
+ primary-for QFile (0x0x7fba106c7750)
+ QIODevice (0x0x7fba106c7820) 0
+ primary-for QFileDevice (0x0x7fba106c77b8)
+ QObject (0x0x7fba106b1d20) 0
+ primary-for QIODevice (0x0x7fba106c7820)
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7fba106b1f60) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7fba103633c0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7fba10363d80) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7fba10458000) 0
+
+Class QEventTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventTransition::QPrivateSignal (0x0x7fba104e5420) 0 empty
+
+Vtable for QEventTransition
+QEventTransition::_ZTV16QEventTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QEventTransition)
+16 (int (*)(...))QEventTransition::metaObject
+24 (int (*)(...))QEventTransition::qt_metacast
+32 (int (*)(...))QEventTransition::qt_metacall
+40 (int (*)(...))QEventTransition::~QEventTransition
+48 (int (*)(...))QEventTransition::~QEventTransition
+56 (int (*)(...))QEventTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QEventTransition::eventTest
+120 (int (*)(...))QEventTransition::onTransition
+
+Class QEventTransition
+ size=16 align=8
+ base size=16 base align=8
+QEventTransition (0x0x7fba104d8a28) 0
+ vptr=((& QEventTransition::_ZTV16QEventTransition) + 16u)
+ QAbstractTransition (0x0x7fba104d8a90) 0
+ primary-for QEventTransition (0x0x7fba104d8a28)
+ QObject (0x0x7fba104e53c0) 0
+ primary-for QAbstractTransition (0x0x7fba104d8a90)
+
+Vtable for QException
+QException::_ZTV10QException: 7u 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 (0x0x7fba104d8af8) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16u)
+ std::exception (0x0x7fba104e5480) 0 nearly-empty
+ primary-for QException (0x0x7fba104d8af8)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7u 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=8 align=8
+ base size=8 base align=8
+QUnhandledException (0x0x7fba104d8b60) 0 nearly-empty
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16u)
+ QException (0x0x7fba104d8bc8) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7fba104d8b60)
+ std::exception (0x0x7fba104e54e0) 0 nearly-empty
+ primary-for QException (0x0x7fba104d8bc8)
+
+Class QtPrivate::ExceptionHolder
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionHolder (0x0x7fba104e5540) 0
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7fba104e5600) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7fba104e5660) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16u)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7fba104e5780) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14u 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 (0x0x7fba104d8c30) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16u)
+ QObject (0x0x7fba104e5720) 0
+ primary-for QFileSelector (0x0x7fba104d8c30)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7fba104e5840) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14u 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 (0x0x7fba104d8c98) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16u)
+ QObject (0x0x7fba104e57e0) 0
+ primary-for QFileSystemWatcher (0x0x7fba104d8c98)
+
+Class QFinalState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFinalState::QPrivateSignal (0x0x7fba104e5900) 0 empty
+
+Vtable for QFinalState
+QFinalState::_ZTV11QFinalState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFinalState)
+16 (int (*)(...))QFinalState::metaObject
+24 (int (*)(...))QFinalState::qt_metacast
+32 (int (*)(...))QFinalState::qt_metacall
+40 (int (*)(...))QFinalState::~QFinalState
+48 (int (*)(...))QFinalState::~QFinalState
+56 (int (*)(...))QFinalState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFinalState::onEntry
+120 (int (*)(...))QFinalState::onExit
+
+Class QFinalState
+ size=16 align=8
+ base size=16 base align=8
+QFinalState (0x0x7fba104d8d00) 0
+ vptr=((& QFinalState::_ZTV11QFinalState) + 16u)
+ QAbstractState (0x0x7fba104d8d68) 0
+ primary-for QFinalState (0x0x7fba104d8d00)
+ QObject (0x0x7fba104e58a0) 0
+ primary-for QAbstractState (0x0x7fba104d8d68)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0u
+32 0u
+
+Class QRunnable
+ size=16 align=8
+ base size=12 base align=8
+QRunnable (0x0x7fba104e5960) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16u)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7fba104e59c0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7fba104d8ea0) 0
+ QBasicMutex (0x0x7fba104e5ba0) 0
+
+Class QMutexLocker
+ size=8 align=8
+ base size=8 base align=8
+QMutexLocker (0x0x7fba104e5c00) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7fba104e5c60) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7fba104e5cc0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4u 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 (0x0x7fba104e5de0) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16u)
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4u 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 (0x0x7fba10268660) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16u)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7fba10268e40) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0u
+48 0u
+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 (0x0x7fba10316000) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16u)
+ QObject (0x0x7fba10268de0) 0
+ primary-for QFutureWatcherBase (0x0x7fba10316000)
+
+Class QHistoryState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHistoryState::QPrivateSignal (0x0x7fba0ff46480) 0 empty
+
+Vtable for QHistoryState
+QHistoryState::_ZTV13QHistoryState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QHistoryState)
+16 (int (*)(...))QHistoryState::metaObject
+24 (int (*)(...))QHistoryState::qt_metacast
+32 (int (*)(...))QHistoryState::qt_metacall
+40 (int (*)(...))QHistoryState::~QHistoryState
+48 (int (*)(...))QHistoryState::~QHistoryState
+56 (int (*)(...))QHistoryState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHistoryState::onEntry
+120 (int (*)(...))QHistoryState::onExit
+
+Class QHistoryState
+ size=16 align=8
+ base size=16 base align=8
+QHistoryState (0x0x7fba103168f0) 0
+ vptr=((& QHistoryState::_ZTV13QHistoryState) + 16u)
+ QAbstractState (0x0x7fba10316958) 0
+ primary-for QHistoryState (0x0x7fba103168f0)
+ QObject (0x0x7fba0ff46420) 0
+ primary-for QAbstractState (0x0x7fba10316958)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7fba0ff46540) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 53u 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QIdentityProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QIdentityProxyModel::insertRows
+264 (int (*)(...))QIdentityProxyModel::insertColumns
+272 (int (*)(...))QIdentityProxyModel::removeRows
+280 (int (*)(...))QIdentityProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QIdentityProxyModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QIdentityProxyModel::setSourceModel
+392 (int (*)(...))QIdentityProxyModel::mapToSource
+400 (int (*)(...))QIdentityProxyModel::mapFromSource
+408 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+416 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7fba103169c0) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16u)
+ QAbstractProxyModel (0x0x7fba10316a28) 0
+ primary-for QIdentityProxyModel (0x0x7fba103169c0)
+ QAbstractItemModel (0x0x7fba10316a90) 0
+ primary-for QAbstractProxyModel (0x0x7fba10316a28)
+ QObject (0x0x7fba0ff464e0) 0
+ primary-for QAbstractItemModel (0x0x7fba10316a90)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7fba0ff465a0) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7fba0ff46c60) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20u 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 (0x0x7fba0ffb52d8) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16u)
+ QObject (0x0x7fba0ff46c00) 0
+ primary-for QItemSelectionModel (0x0x7fba0ffb52d8)
+
+Class QItemSelection
+ size=8 align=8
+ base size=8 base align=8
+QItemSelection (0x0x7fba0ffb54e0) 0
+ QList<QItemSelectionRange> (0x0x7fba0ffb5548) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7fba0ff46f60) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=20 base align=8
+QJsonValue (0x0x7fba1003f480) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=12 base align=8
+QJsonValueRef (0x0x7fba0fdb3ba0) 0
+
+Class QJsonValuePtr
+ size=24 align=8
+ base size=24 base align=8
+QJsonValuePtr (0x0x7fba0fe18120) 0
+
+Class QJsonValueRefPtr
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRefPtr (0x0x7fba0fe18180) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::iterator (0x0x7fba0fe18360) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::const_iterator (0x0x7fba0fe183c0) 0
+
+Class QJsonArray
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray (0x0x7fba0fe18300) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7fba0fed4600) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7fba0fed4660) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::iterator (0x0x7fba0fed4cc0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::const_iterator (0x0x7fba0fed4d20) 0
+
+Class QJsonObject
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject (0x0x7fba0fed4c60) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7fba0fc1e000) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14u 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=32 align=8
+ base size=25 base align=8
+QLibrary (0x0x7fba0fbdc888) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16u)
+ QObject (0x0x7fba0fbc2f60) 0
+ primary-for QLibrary (0x0x7fba0fbdc888)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7fba0fc1e6c0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7fba0fc1e1e0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7fba0fc1eba0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7fba0fc1ec00) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7fba0fc1eea0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7fba0f926180) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7fba0f926ae0) 0
+
+Class QLinkedListData
+ size=32 align=8
+ base size=25 base align=8
+QLinkedListData (0x0x7fba0f9b4480) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7fba0f9b47e0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7fba0f9b4960) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7fba0f9b4900) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7fba0f9b4ae0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7fba0f9b4d80) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7fba0f739420) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=12 base align=8
+QMetaMethod (0x0x7fba0f739480) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=12 base align=8
+QMetaEnum (0x0x7fba0f739a80) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7fba0f739d80) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=12 base align=8
+QMetaClassInfo (0x0x7fba0f739de0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7fba0f7ef120) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17u 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 (0x0x7fba0f756af8) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16u)
+ QObject (0x0x7fba0f7ef0c0) 0
+ primary-for QMimeData (0x0x7fba0f756af8)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7fba0f7ef180) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7fba0f7ef480) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7fba0f7ef540) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14u 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=24 align=8
+ base size=24 base align=8
+QObjectCleanupHandler (0x0x7fba0f756d00) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16u)
+ QObject (0x0x7fba0f7ef4e0) 0
+ primary-for QObjectCleanupHandler (0x0x7fba0f756d00)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7fba0f7ef5a0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7fba0f7efd20) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18u 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 (0x0x7fba0f851410) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16u)
+ QAnimationGroup (0x0x7fba0f851478) 0
+ primary-for QParallelAnimationGroup (0x0x7fba0f851410)
+ QAbstractAnimation (0x0x7fba0f8514e0) 0
+ primary-for QAnimationGroup (0x0x7fba0f851478)
+ QObject (0x0x7fba0f7efcc0) 0
+ primary-for QAbstractAnimation (0x0x7fba0f8514e0)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7fba0f7efde0) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18u 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 (0x0x7fba0f851548) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16u)
+ QAbstractAnimation (0x0x7fba0f8515b0) 0
+ primary-for QPauseAnimation (0x0x7fba0f851548)
+ QObject (0x0x7fba0f7efd80) 0
+ primary-for QAbstractAnimation (0x0x7fba0f8515b0)
+
+Class QStaticPlugin
+ size=16 align=8
+ base size=16 base align=8
+QStaticPlugin (0x0x7fba0f8a2000) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7fba0f8a2300) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14u 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 (0x0x7fba0f8517b8) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16u)
+ QObject (0x0x7fba0f8a22a0) 0
+ primary-for QPluginLoader (0x0x7fba0f8517b8)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7fba0f8a2360) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7fba0f8a2a20) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 31u 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 (*)(...))QProcess::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QProcess::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QProcess::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QProcess::writeData
+240 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7fba0f851e38) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16u)
+ QIODevice (0x0x7fba0f851ea0) 0
+ primary-for QProcess (0x0x7fba0f851e38)
+ QObject (0x0x7fba0f8a29c0) 0
+ primary-for QIODevice (0x0x7fba0f851ea0)
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7fba0f8a2ae0) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20u 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 (0x0x7fba0f851f08) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16u)
+ QAbstractAnimation (0x0x7fba0f851f70) 0
+ primary-for QVariantAnimation (0x0x7fba0f851f08)
+ QObject (0x0x7fba0f8a2a80) 0
+ primary-for QAbstractAnimation (0x0x7fba0f851f70)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7fba0f8a2ba0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20u 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 (0x0x7fba0f52a068) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16u)
+ QVariantAnimation (0x0x7fba0f52a0d0) 0
+ primary-for QPropertyAnimation (0x0x7fba0f52a068)
+ QAbstractAnimation (0x0x7fba0f52a138) 0
+ primary-for QVariantAnimation (0x0x7fba0f52a0d0)
+ QObject (0x0x7fba0f8a2b40) 0
+ primary-for QAbstractAnimation (0x0x7fba0f52a138)
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7fba0f8a2cc0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7fba0f8a2c60) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7fba0f5ca410) 0
+ QRandomGenerator (0x0x7fba0f5adc60) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7fba0f5add20) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7fba0f66a000) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7fba0f66a0c0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7fba0f66a180) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7fba0f66a420) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7fba0f66a6c0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7fba0f66a960) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7fba0f66ac00) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7fba0f46a240) 0
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7fba0f46a540) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7fba0f46a840) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7fba0f46a9c0) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 34u 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 (*)(...))QSaveFile::writeData
+240 (int (*)(...))QSaveFile::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7fba0f441618) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16u)
+ QFileDevice (0x0x7fba0f441680) 0
+ primary-for QSaveFile (0x0x7fba0f441618)
+ QIODevice (0x0x7fba0f4416e8) 0
+ primary-for QFileDevice (0x0x7fba0f441680)
+ QObject (0x0x7fba0f46a960) 0
+ primary-for QIODevice (0x0x7fba0f4416e8)
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7fba0f46aa80) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7fba0f46aae0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7fba0f1ee120) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18u 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 (0x0x7fba0f1d0f08) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16u)
+ QAnimationGroup (0x0x7fba0f1d0f70) 0
+ primary-for QSequentialAnimationGroup (0x0x7fba0f1d0f08)
+ QAbstractAnimation (0x0x7fba0f1f1000) 0
+ primary-for QAnimationGroup (0x0x7fba0f1d0f70)
+ QObject (0x0x7fba0f1ee0c0) 0
+ primary-for QAbstractAnimation (0x0x7fba0f1f1000)
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7fba0f1ee1e0) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14u 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 (0x0x7fba0f1f1068) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16u)
+ QObject (0x0x7fba0f1ee180) 0
+ primary-for QSettings (0x0x7fba0f1f1068)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7fba0f1ee2a0) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14u 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 (0x0x7fba0f1f10d0) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16u)
+ QObject (0x0x7fba0f1ee240) 0
+ primary-for QSharedMemory (0x0x7fba0f1f10d0)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7fba0f1ee360) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14u 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 (0x0x7fba0f1f1138) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16u)
+ QObject (0x0x7fba0f1ee300) 0
+ primary-for QSignalMapper (0x0x7fba0f1f1138)
+
+Class QSignalTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalTransition::QPrivateSignal (0x0x7fba0f1ee420) 0 empty
+
+Vtable for QSignalTransition
+QSignalTransition::_ZTV17QSignalTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSignalTransition)
+16 (int (*)(...))QSignalTransition::metaObject
+24 (int (*)(...))QSignalTransition::qt_metacast
+32 (int (*)(...))QSignalTransition::qt_metacall
+40 (int (*)(...))QSignalTransition::~QSignalTransition
+48 (int (*)(...))QSignalTransition::~QSignalTransition
+56 (int (*)(...))QSignalTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSignalTransition::eventTest
+120 (int (*)(...))QSignalTransition::onTransition
+
+Class QSignalTransition
+ size=16 align=8
+ base size=16 base align=8
+QSignalTransition (0x0x7fba0f1f11a0) 0
+ vptr=((& QSignalTransition::_ZTV17QSignalTransition) + 16u)
+ QAbstractTransition (0x0x7fba0f1f1208) 0
+ primary-for QSignalTransition (0x0x7fba0f1f11a0)
+ QObject (0x0x7fba0f1ee3c0) 0
+ primary-for QAbstractTransition (0x0x7fba0f1f1208)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7fba0f1ee4e0) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14u 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 (0x0x7fba0f1f1270) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16u)
+ QObject (0x0x7fba0f1ee480) 0
+ primary-for QSocketNotifier (0x0x7fba0f1f1270)
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7fba0f1ee5a0) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 56u 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 (*)(...))QSortFilterProxyModel::mimeTypes
+216 (int (*)(...))QSortFilterProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QSortFilterProxyModel::dropMimeData
+240 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QSortFilterProxyModel::insertRows
+264 (int (*)(...))QSortFilterProxyModel::insertColumns
+272 (int (*)(...))QSortFilterProxyModel::removeRows
+280 (int (*)(...))QSortFilterProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QSortFilterProxyModel::fetchMore
+312 (int (*)(...))QSortFilterProxyModel::canFetchMore
+320 (int (*)(...))QSortFilterProxyModel::flags
+328 (int (*)(...))QSortFilterProxyModel::sort
+336 (int (*)(...))QSortFilterProxyModel::buddy
+344 (int (*)(...))QSortFilterProxyModel::match
+352 (int (*)(...))QSortFilterProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QSortFilterProxyModel::setSourceModel
+392 (int (*)(...))QSortFilterProxyModel::mapToSource
+400 (int (*)(...))QSortFilterProxyModel::mapFromSource
+408 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+416 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+424 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+432 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+440 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7fba0f1f12d8) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16u)
+ QAbstractProxyModel (0x0x7fba0f1f1340) 0
+ primary-for QSortFilterProxyModel (0x0x7fba0f1f12d8)
+ QAbstractItemModel (0x0x7fba0f1f13a8) 0
+ primary-for QAbstractProxyModel (0x0x7fba0f1f1340)
+ QObject (0x0x7fba0f1ee540) 0
+ primary-for QAbstractItemModel (0x0x7fba0f1f13a8)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7fba0f1ee660) 0 empty
+
+Class QState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QState::QPrivateSignal (0x0x7fba0f1ee8a0) 0 empty
+
+Vtable for QState
+QState::_ZTV6QState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QState)
+16 (int (*)(...))QState::metaObject
+24 (int (*)(...))QState::qt_metacast
+32 (int (*)(...))QState::qt_metacall
+40 (int (*)(...))QState::~QState
+48 (int (*)(...))QState::~QState
+56 (int (*)(...))QState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QState::onEntry
+120 (int (*)(...))QState::onExit
+
+Class QState
+ size=16 align=8
+ base size=16 base align=8
+QState (0x0x7fba0f1f1548) 0
+ vptr=((& QState::_ZTV6QState) + 16u)
+ QAbstractState (0x0x7fba0f1f15b0) 0
+ primary-for QState (0x0x7fba0f1f1548)
+ QObject (0x0x7fba0f1ee840) 0
+ primary-for QAbstractState (0x0x7fba0f1f15b0)
+
+Class QStateMachine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStateMachine::QPrivateSignal (0x0x7fba0f1ee9c0) 0 empty
+
+Vtable for QStateMachine::SignalEvent
+QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine11SignalEventE)
+16 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+24 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+
+Class QStateMachine::SignalEvent
+ size=48 align=8
+ base size=48 base align=8
+QStateMachine::SignalEvent (0x0x7fba0f1f1750) 0
+ vptr=((& QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE) + 16u)
+ QEvent (0x0x7fba0f1eea20) 0
+ primary-for QStateMachine::SignalEvent (0x0x7fba0f1f1750)
+
+Vtable for QStateMachine::WrappedEvent
+QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine12WrappedEventE)
+16 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+24 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+
+Class QStateMachine::WrappedEvent
+ size=40 align=8
+ base size=40 base align=8
+QStateMachine::WrappedEvent (0x0x7fba0f1f17b8) 0
+ vptr=((& QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE) + 16u)
+ QEvent (0x0x7fba0f1eea80) 0
+ primary-for QStateMachine::WrappedEvent (0x0x7fba0f1f17b8)
+
+Vtable for QStateMachine
+QStateMachine::_ZTV13QStateMachine: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStateMachine)
+16 (int (*)(...))QStateMachine::metaObject
+24 (int (*)(...))QStateMachine::qt_metacast
+32 (int (*)(...))QStateMachine::qt_metacall
+40 (int (*)(...))QStateMachine::~QStateMachine
+48 (int (*)(...))QStateMachine::~QStateMachine
+56 (int (*)(...))QStateMachine::event
+64 (int (*)(...))QStateMachine::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStateMachine::onEntry
+120 (int (*)(...))QStateMachine::onExit
+128 (int (*)(...))QStateMachine::beginSelectTransitions
+136 (int (*)(...))QStateMachine::endSelectTransitions
+144 (int (*)(...))QStateMachine::beginMicrostep
+152 (int (*)(...))QStateMachine::endMicrostep
+
+Class QStateMachine
+ size=16 align=8
+ base size=16 base align=8
+QStateMachine (0x0x7fba0f1f1618) 0
+ vptr=((& QStateMachine::_ZTV13QStateMachine) + 16u)
+ QState (0x0x7fba0f1f1680) 0
+ primary-for QStateMachine (0x0x7fba0f1f1618)
+ QAbstractState (0x0x7fba0f1f16e8) 0
+ primary-for QState (0x0x7fba0f1f1680)
+ QObject (0x0x7fba0f1ee960) 0
+ primary-for QAbstractState (0x0x7fba0f1f16e8)
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7fba0f1eeae0) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7fba0ef37a20) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7fba0efad540) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 48u 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 (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QStringListModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStringListModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QStringListModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStringListModel::flags
+328 (int (*)(...))QStringListModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStringListModel
+ size=24 align=8
+ base size=24 base align=8
+QStringListModel (0x0x7fba0ef55c98) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16u)
+ QAbstractListModel (0x0x7fba0ef55d00) 0
+ primary-for QStringListModel (0x0x7fba0ef55c98)
+ QAbstractItemModel (0x0x7fba0ef55d68) 0
+ primary-for QAbstractListModel (0x0x7fba0ef55d00)
+ QObject (0x0x7fba0efad4e0) 0
+ primary-for QAbstractItemModel (0x0x7fba0ef55d68)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7fba0efad5a0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7fba0efad660) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7fba0efad780) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QTemporaryFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7fba0ef55dd0) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16u)
+ QFile (0x0x7fba0ef55e38) 0
+ primary-for QTemporaryFile (0x0x7fba0ef55dd0)
+ QFileDevice (0x0x7fba0ef55ea0) 0
+ primary-for QFile (0x0x7fba0ef55e38)
+ QIODevice (0x0x7fba0ef55f08) 0
+ primary-for QFileDevice (0x0x7fba0ef55ea0)
+ QObject (0x0x7fba0efad720) 0
+ primary-for QIODevice (0x0x7fba0ef55f08)
+
+Class QTextBoundaryFinder
+ size=48 align=8
+ base size=48 base align=8
+QTextBoundaryFinder (0x0x7fba0efad7e0) 0
+
+Class QTextCodec::ConverterState
+ size=32 align=8
+ base size=32 base align=8
+QTextCodec::ConverterState (0x0x7fba0efada20) 0
+
+Vtable for QTextCodec
+QTextCodec::_ZTV10QTextCodec: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextCodec)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))QTextCodec::aliases
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 0u
+64 0u
+
+Class QTextCodec
+ size=8 align=8
+ base size=8 base align=8
+QTextCodec (0x0x7fba0efad9c0) 0 nearly-empty
+ vptr=((& QTextCodec::_ZTV10QTextCodec) + 16u)
+
+Class QTextEncoder
+ size=40 align=8
+ base size=40 base align=8
+QTextEncoder (0x0x7fba0efadc00) 0
+
+Class QTextDecoder
+ size=40 align=8
+ base size=40 base align=8
+QTextDecoder (0x0x7fba0efadc60) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7fba0efadcc0) 0
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7fba0efadd20) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7fba0f033138) 0
+ std::__mutex_base (0x0x7fba0efadd80) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7fba0f0331a0) 0
+ std::__recursive_mutex_base (0x0x7fba0efadde0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7fba0f0bff50) 0
+ std::__mutex_base (0x0x7fba0efadf00) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7fba0efadf60) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7fba0f0d6bd0) 0
+ std::__recursive_mutex_base (0x0x7fba0f0e2060) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7fba0f0e20c0) 0 empty
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7fba0f0e2120) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7fba0f0e2180) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7fba0f0e21e0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7fba0f0e2420) 0
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5u 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 (0x0x7fba0f0332d8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16u)
+ std::exception (0x0x7fba0f0e24e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7fba0f0332d8)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5u 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 (0x0x7fba0f033340) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16u)
+ std::exception (0x0x7fba0f0e25a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7fba0f033340)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5u 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 (0x0x7fba0f0333a8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16u)
+ std::exception (0x0x7fba0f0e2660) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7fba0f0333a8)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5u 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 (0x0x7fba0f033478) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16u)
+ std::exception (0x0x7fba0f0e2720) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7fba0f033478)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7fba0f0e27e0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7fba0f0e2840) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7fba0f0e28a0) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7fba0f0e2900) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5u 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 (0x0x7fba0f033750) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16u)
+ std::exception (0x0x7fba0f0e2c60) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7fba0f033750)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7fba0ee304e0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7fba0ee30cc0) 0
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7fba0ee30ea0) 0
+
+Vtable for std::thread::_Impl_base
+std::thread::_Impl_base::_ZTVNSt6thread10_Impl_baseE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread10_Impl_baseE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_Impl_base
+ size=24 align=8
+ base size=24 base align=8
+std::thread::_Impl_base (0x0x7fba0ee30f00) 0
+ vptr=((& std::thread::_Impl_base::_ZTVNSt6thread10_Impl_baseE) + 16u)
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7fba0ee30e40) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7fba0ecddb40) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7fba0ecddc00) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7fba0ecddc60) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7fba0e9ca300) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5u 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 (0x0x7fba0e9c5a90) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16u)
+ std::logic_error (0x0x7fba0e9c5af8) 0
+ primary-for std::future_error (0x0x7fba0e9c5a90)
+ std::exception (0x0x7fba0e9ca420) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fba0e9c5af8)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7fba0e9ca540) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0u
+32 0u
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7fba0e9ca4e0) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16u)
+
+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 (0x0x7fba0e707a80) 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 (0x0x7fba0e7280d0) 0
+ std::__at_thread_exit_elt (0x0x7fba0e707b40) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6u 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 (0x0x7fba0e9ca6c0) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16u)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7fba0e9ca480) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6u 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 (0x0x7fba0e470c98) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16u)
+ std::__future_base::_State_baseV2 (0x0x7fba0e472a20) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7fba0e470c98)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7fba0e0f3180) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15u 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 (0x0x7fba0e4d4750) 0
+ vptr=((& QThread::_ZTV7QThread) + 16u)
+ QObject (0x0x7fba0e0f3120) 0
+ primary-for QThread (0x0x7fba0e4d4750)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7fba0e0f32a0) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14u 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 (0x0x7fba0e4d47b8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16u)
+ QObject (0x0x7fba0e0f3240) 0
+ primary-for QThreadPool (0x0x7fba0e4d47b8)
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7fba0e0f3300) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7fba0e0f3420) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15u 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 (0x0x7fba0e4d4820) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16u)
+ QObject (0x0x7fba0e0f33c0) 0
+ primary-for QTimeLine (0x0x7fba0e4d4820)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7fba0e0f34e0) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14u 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=32 align=8
+ base size=29 base align=8
+QTimer (0x0x7fba0e4d4888) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16u)
+ QObject (0x0x7fba0e0f3480) 0
+ primary-for QTimer (0x0x7fba0e4d4888)
+
+Class QTimeZone::OffsetData
+ size=32 align=8
+ base size=28 base align=8
+QTimeZone::OffsetData (0x0x7fba0e0f3ba0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7fba0e0f3b40) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7fba0e1c3180) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16u 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 (0x0x7fba0e1bc2d8) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16u)
+ QObject (0x0x7fba0e1c3120) 0
+ primary-for QTranslator (0x0x7fba0e1bc2d8)
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7fba0e1c32a0) 0
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7fba0e2da960) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7fba0df79000) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7fba0df79600) 0
+
+Class QXmlStreamStringRef
+ size=16 align=8
+ base size=16 base align=8
+QXmlStreamStringRef (0x0x7fba0df79660) 0
+
+Class QXmlStreamAttribute
+ size=80 align=8
+ base size=73 base align=8
+QXmlStreamAttribute (0x0x7fba0df79960) 0
+
+Class QXmlStreamAttributes
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamAttributes (0x0x7fba0df78dd0) 0
+ QVector<QXmlStreamAttribute> (0x0x7fba0df79d20) 0
+
+Class QXmlStreamNamespaceDeclaration
+ size=40 align=8
+ base size=40 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7fba0df79d80) 0
+
+Class QXmlStreamNotationDeclaration
+ size=56 align=8
+ base size=56 base align=8
+QXmlStreamNotationDeclaration (0x0x7fba0e064060) 0
+
+Class QXmlStreamEntityDeclaration
+ size=88 align=8
+ base size=88 base align=8
+QXmlStreamEntityDeclaration (0x0x7fba0e064300) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6u 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 (0x0x7fba0e0645a0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16u)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7fba0e064600) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7fba0dd12060) 0
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7fba0dd12180) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7fba0dd12420) 0
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7fba0dd12de0) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7fba0dd12d80) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7fba0decb180) 0
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7fba0db656c0) 0
+
+Class QTouchDevice
+ size=8 align=8
+ base size=8 base align=8
+QTouchDevice (0x0x7fba0db65960) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+
+Class QInputEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputEvent (0x0x7fba0db64bc8) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16u)
+ QEvent (0x0x7fba0db65b40) 0
+ primary-for QInputEvent (0x0x7fba0db64bc8)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+
+Class QEnterEvent
+ size=72 align=8
+ base size=72 base align=8
+QEnterEvent (0x0x7fba0db64c30) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16u)
+ QEvent (0x0x7fba0db65ba0) 0
+ primary-for QEnterEvent (0x0x7fba0db64c30)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+
+Class QMouseEvent
+ size=104 align=8
+ base size=100 base align=8
+QMouseEvent (0x0x7fba0db64c98) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16u)
+ QInputEvent (0x0x7fba0db64d00) 0
+ primary-for QMouseEvent (0x0x7fba0db64c98)
+ QEvent (0x0x7fba0db65c00) 0
+ primary-for QInputEvent (0x0x7fba0db64d00)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+
+Class QHoverEvent
+ size=64 align=8
+ base size=64 base align=8
+QHoverEvent (0x0x7fba0db64d68) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16u)
+ QInputEvent (0x0x7fba0db64dd0) 0
+ primary-for QHoverEvent (0x0x7fba0db64d68)
+ QEvent (0x0x7fba0db65c60) 0
+ primary-for QInputEvent (0x0x7fba0db64dd0)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7fba0db64e38) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16u)
+ QInputEvent (0x0x7fba0db64ea0) 0
+ primary-for QWheelEvent (0x0x7fba0db64e38)
+ QEvent (0x0x7fba0db65cc0) 0
+ primary-for QInputEvent (0x0x7fba0db64ea0)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+
+Class QTabletEvent
+ size=128 align=8
+ base size=128 base align=8
+QTabletEvent (0x0x7fba0db64f08) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16u)
+ QInputEvent (0x0x7fba0db64f70) 0
+ primary-for QTabletEvent (0x0x7fba0db64f08)
+ QEvent (0x0x7fba0db65d20) 0
+ primary-for QInputEvent (0x0x7fba0db64f70)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7fba0dc6f000) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16u)
+ QInputEvent (0x0x7fba0dc6f068) 0
+ primary-for QNativeGestureEvent (0x0x7fba0dc6f000)
+ QEvent (0x0x7fba0db65d80) 0
+ primary-for QInputEvent (0x0x7fba0dc6f068)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+
+Class QKeyEvent
+ size=64 align=8
+ base size=59 base align=8
+QKeyEvent (0x0x7fba0dc6f0d0) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16u)
+ QInputEvent (0x0x7fba0dc6f138) 0
+ primary-for QKeyEvent (0x0x7fba0dc6f0d0)
+ QEvent (0x0x7fba0db65de0) 0
+ primary-for QInputEvent (0x0x7fba0dc6f138)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+
+Class QFocusEvent
+ size=24 align=8
+ base size=24 base align=8
+QFocusEvent (0x0x7fba0dc6f1a0) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16u)
+ QEvent (0x0x7fba0db65e40) 0
+ primary-for QFocusEvent (0x0x7fba0dc6f1a0)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+
+Class QPaintEvent
+ size=56 align=8
+ base size=49 base align=8
+QPaintEvent (0x0x7fba0dc6f208) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16u)
+ QEvent (0x0x7fba0db65ea0) 0
+ primary-for QPaintEvent (0x0x7fba0dc6f208)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+
+Class QMoveEvent
+ size=40 align=8
+ base size=36 base align=8
+QMoveEvent (0x0x7fba0dc6f270) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16u)
+ QEvent (0x0x7fba0db65f00) 0
+ primary-for QMoveEvent (0x0x7fba0dc6f270)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+
+Class QExposeEvent
+ size=32 align=8
+ base size=32 base align=8
+QExposeEvent (0x0x7fba0dc6f2d8) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16u)
+ QEvent (0x0x7fba0db65f60) 0
+ primary-for QExposeEvent (0x0x7fba0dc6f2d8)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=24 base align=8
+QPlatformSurfaceEvent (0x0x7fba0dc6f340) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16u)
+ QEvent (0x0x7fba0dca4000) 0
+ primary-for QPlatformSurfaceEvent (0x0x7fba0dc6f340)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+
+Class QResizeEvent
+ size=40 align=8
+ base size=36 base align=8
+QResizeEvent (0x0x7fba0dc6f3a8) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16u)
+ QEvent (0x0x7fba0dca4060) 0
+ primary-for QResizeEvent (0x0x7fba0dc6f3a8)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+
+Class QCloseEvent
+ size=24 align=8
+ base size=20 base align=8
+QCloseEvent (0x0x7fba0dc6f410) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16u)
+ QEvent (0x0x7fba0dca40c0) 0
+ primary-for QCloseEvent (0x0x7fba0dc6f410)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+
+Class QIconDragEvent
+ size=24 align=8
+ base size=20 base align=8
+QIconDragEvent (0x0x7fba0dc6f478) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16u)
+ QEvent (0x0x7fba0dca4120) 0
+ primary-for QIconDragEvent (0x0x7fba0dc6f478)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+
+Class QShowEvent
+ size=24 align=8
+ base size=20 base align=8
+QShowEvent (0x0x7fba0dc6f4e0) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16u)
+ QEvent (0x0x7fba0dca4180) 0
+ primary-for QShowEvent (0x0x7fba0dc6f4e0)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+
+Class QHideEvent
+ size=24 align=8
+ base size=20 base align=8
+QHideEvent (0x0x7fba0dc6f548) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16u)
+ QEvent (0x0x7fba0dca41e0) 0
+ primary-for QHideEvent (0x0x7fba0dc6f548)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+
+Class QContextMenuEvent
+ size=56 align=8
+ base size=49 base align=8
+QContextMenuEvent (0x0x7fba0dc6f5b0) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16u)
+ QInputEvent (0x0x7fba0dc6f618) 0
+ primary-for QContextMenuEvent (0x0x7fba0dc6f5b0)
+ QEvent (0x0x7fba0dca4240) 0
+ primary-for QInputEvent (0x0x7fba0dc6f618)
+
+Class QInputMethodEvent::Attribute
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodEvent::Attribute (0x0x7fba0dca4300) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+
+Class QInputMethodEvent
+ size=56 align=8
+ base size=56 base align=8
+QInputMethodEvent (0x0x7fba0dc6f680) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16u)
+ QEvent (0x0x7fba0dca42a0) 0
+ primary-for QInputMethodEvent (0x0x7fba0dc6f680)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=24 align=8
+ base size=24 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7fba0dca4780) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+
+Class QInputMethodQueryEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodQueryEvent (0x0x7fba0dc6f9c0) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16u)
+ QEvent (0x0x7fba0dca4720) 0
+ primary-for QInputMethodQueryEvent (0x0x7fba0dc6f9c0)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+
+Class QDropEvent
+ size=72 align=8
+ base size=72 base align=8
+QDropEvent (0x0x7fba0dc6fc98) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16u)
+ QEvent (0x0x7fba0dca4ae0) 0
+ primary-for QDropEvent (0x0x7fba0dc6fc98)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+
+Class QDragMoveEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragMoveEvent (0x0x7fba0dc6fd00) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16u)
+ QDropEvent (0x0x7fba0dc6fd68) 0
+ primary-for QDragMoveEvent (0x0x7fba0dc6fd00)
+ QEvent (0x0x7fba0dca4b40) 0
+ primary-for QDropEvent (0x0x7fba0dc6fd68)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+
+Class QDragEnterEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragEnterEvent (0x0x7fba0dc6fdd0) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16u)
+ QDragMoveEvent (0x0x7fba0dc6fe38) 0
+ primary-for QDragEnterEvent (0x0x7fba0dc6fdd0)
+ QDropEvent (0x0x7fba0dc6fea0) 0
+ primary-for QDragMoveEvent (0x0x7fba0dc6fe38)
+ QEvent (0x0x7fba0dca4ba0) 0
+ primary-for QDropEvent (0x0x7fba0dc6fea0)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+
+Class QDragLeaveEvent
+ size=24 align=8
+ base size=20 base align=8
+QDragLeaveEvent (0x0x7fba0dc6ff08) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16u)
+ QEvent (0x0x7fba0dca4c00) 0
+ primary-for QDragLeaveEvent (0x0x7fba0dc6ff08)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+
+Class QHelpEvent
+ size=40 align=8
+ base size=36 base align=8
+QHelpEvent (0x0x7fba0dc6ff70) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16u)
+ QEvent (0x0x7fba0dca4c60) 0
+ primary-for QHelpEvent (0x0x7fba0dc6ff70)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+
+Class QStatusTipEvent
+ size=32 align=8
+ base size=32 base align=8
+QStatusTipEvent (0x0x7fba0d972000) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16u)
+ QEvent (0x0x7fba0dca4cc0) 0
+ primary-for QStatusTipEvent (0x0x7fba0d972000)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+
+Class QWhatsThisClickedEvent
+ size=32 align=8
+ base size=32 base align=8
+QWhatsThisClickedEvent (0x0x7fba0d972068) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16u)
+ QEvent (0x0x7fba0dca4d20) 0
+ primary-for QWhatsThisClickedEvent (0x0x7fba0d972068)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+
+Class QActionEvent
+ size=40 align=8
+ base size=40 base align=8
+QActionEvent (0x0x7fba0d9720d0) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16u)
+ QEvent (0x0x7fba0dca4d80) 0
+ primary-for QActionEvent (0x0x7fba0d9720d0)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+
+Class QFileOpenEvent
+ size=40 align=8
+ base size=40 base align=8
+QFileOpenEvent (0x0x7fba0d972138) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16u)
+ QEvent (0x0x7fba0dca4de0) 0
+ primary-for QFileOpenEvent (0x0x7fba0d972138)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QToolBarChangeEvent (0x0x7fba0d9721a0) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16u)
+ QEvent (0x0x7fba0dca4e40) 0
+ primary-for QToolBarChangeEvent (0x0x7fba0d9721a0)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+
+Class QShortcutEvent
+ size=40 align=8
+ base size=40 base align=8
+QShortcutEvent (0x0x7fba0d972208) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16u)
+ QEvent (0x0x7fba0dca4ea0) 0
+ primary-for QShortcutEvent (0x0x7fba0d972208)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+
+Class QWindowStateChangeEvent
+ size=32 align=8
+ base size=25 base align=8
+QWindowStateChangeEvent (0x0x7fba0d972270) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16u)
+ QEvent (0x0x7fba0dca4f00) 0
+ primary-for QWindowStateChangeEvent (0x0x7fba0d972270)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7fba0dca4f60) 0
+
+Class QTouchEvent::TouchPoint
+ size=8 align=8
+ base size=8 base align=8
+QTouchEvent::TouchPoint (0x0x7fba0d9a0660) 0
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+
+Class QTouchEvent
+ size=72 align=8
+ base size=72 base align=8
+QTouchEvent (0x0x7fba0d9728f0) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16u)
+ QInputEvent (0x0x7fba0d972958) 0
+ primary-for QTouchEvent (0x0x7fba0d9728f0)
+ QEvent (0x0x7fba0d9a0600) 0
+ primary-for QInputEvent (0x0x7fba0d972958)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+
+Class QScrollPrepareEvent
+ size=112 align=8
+ base size=112 base align=8
+QScrollPrepareEvent (0x0x7fba0da831a0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16u)
+ QEvent (0x0x7fba0da6acc0) 0
+ primary-for QScrollPrepareEvent (0x0x7fba0da831a0)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+
+Class QScrollEvent
+ size=64 align=8
+ base size=60 base align=8
+QScrollEvent (0x0x7fba0da83208) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16u)
+ QEvent (0x0x7fba0da6ad20) 0
+ primary-for QScrollEvent (0x0x7fba0da83208)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+
+Class QScreenOrientationChangeEvent
+ size=40 align=8
+ base size=36 base align=8
+QScreenOrientationChangeEvent (0x0x7fba0da83270) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16u)
+ QEvent (0x0x7fba0da6ad80) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7fba0da83270)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=24 base align=8
+QApplicationStateChangeEvent (0x0x7fba0da832d8) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16u)
+ QEvent (0x0x7fba0da6ade0) 0
+ primary-for QApplicationStateChangeEvent (0x0x7fba0da832d8)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7fba0da6ae40) 0
+
+Class QPolygon
+ size=8 align=8
+ base size=8 base align=8
+QPolygon (0x0x7fba0d751068) 0
+ QVector<QPoint> (0x0x7fba0d71bb40) 0
+
+Class QPolygonF
+ size=8 align=8
+ base size=8 base align=8
+QPolygonF (0x0x7fba0d751410) 0
+ QVector<QPointF> (0x0x7fba0d7cf000) 0
+
+Class QMatrix
+ size=48 align=8
+ base size=48 base align=8
+QMatrix (0x0x7fba0d7cf3c0) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7fba0d7cf6c0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7fba0d7cf660) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7fba0d89f0c0) 0
+
+Class QTransform
+ size=88 align=8
+ base size=88 base align=8
+QTransform (0x0x7fba0d89f1e0) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0u
+24 0u
+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=24 align=8
+ base size=24 base align=8
+QPaintDevice (0x0x7fba0d89f900) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16u)
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7fba0d89f960) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10u 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=32 align=8
+ base size=32 base align=8
+QImage (0x0x7fba0d5c72d8) 0
+ vptr=((& QImage::_ZTV6QImage) + 16u)
+ QPaintDevice (0x0x7fba0d5c2420) 0
+ primary-for QImage (0x0x7fba0d5c72d8)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10u 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=32 align=8
+ base size=32 base align=8
+QPixmap (0x0x7fba0d68ae38) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16u)
+ QPaintDevice (0x0x7fba0d6953c0) 0
+ primary-for QPixmap (0x0x7fba0d68ae38)
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7fba0d6956c0) 0
+
+Class QBrushData
+ size=112 align=8
+ base size=112 base align=8
+QBrushData (0x0x7fba0d695e40) 0
+
+Class QGradient
+ size=64 align=8
+ base size=64 base align=8
+QGradient (0x0x7fba0d695ea0) 0
+
+Class QLinearGradient
+ size=64 align=8
+ base size=64 base align=8
+QLinearGradient (0x0x7fba0d1f27b8) 0
+ QGradient (0x0x7fba0d26f180) 0
+
+Class QRadialGradient
+ size=64 align=8
+ base size=64 base align=8
+QRadialGradient (0x0x7fba0d1f2820) 0
+ QGradient (0x0x7fba0d26f1e0) 0
+
+Class QConicalGradient
+ size=64 align=8
+ base size=64 base align=8
+QConicalGradient (0x0x7fba0d1f2888) 0
+ QGradient (0x0x7fba0d26f240) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7fba0d26f2a0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7fba0d3174e0) 0
+
+Class QTextOption
+ size=32 align=8
+ base size=32 base align=8
+QTextOption (0x0x7fba0d317480) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7fba0d317c60) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7fba0d39e3c0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7fba0d013958) 0
+ QTextFormat (0x0x7fba0d06f240) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7fba0d013b60) 0
+ QTextFormat (0x0x7fba0d06f4e0) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7fba0d013dd0) 0
+ QTextFormat (0x0x7fba0d06f780) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7fba0d0130d0) 0
+ QTextCharFormat (0x0x7fba0d013270) 0
+ QTextFormat (0x0x7fba0d06fa20) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7fba0d12f0d0) 0
+ QTextFormat (0x0x7fba0d06fcc0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7fba0d12f2d8) 0
+ QTextFrameFormat (0x0x7fba0d12f340) 0
+ QTextFormat (0x0x7fba0d06ff60) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7fba0d12f548) 0
+ QTextCharFormat (0x0x7fba0d12f5b0) 0
+ QTextFormat (0x0x7fba0d16b2a0) 0
+
+Class QFontDatabase
+ size=8 align=8
+ base size=8 base align=8
+QFontDatabase (0x0x7fba0d16b540) 0
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7fba0d16b5a0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7fba0d16ba80) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7fba0d16bd80) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7fba0ce5b0c0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7fba0ce5b180) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7fba0ce5b120) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7fba0ce5bba0) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6u 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 (0x0x7fba0ce5bc00) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16u)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7fba0ce5bcc0) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17u 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 (0x0x7fba0ceb78f0) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16u)
+ QObject (0x0x7fba0ce5bc60) 0
+ primary-for QTextDocument (0x0x7fba0ceb78f0)
+
+Class QPalette::Data
+ size=4 align=4
+ base size=4 base align=4
+QPalette::Data (0x0x7fba0ce5bf00) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7fba0ce5bea0) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7fba0cc12000) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7fba0cc12060) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=64 align=8
+ base size=64 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7fba0cc120c0) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7fba0cbed618) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16u)
+ QObject (0x0x7fba0cfcdf60) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fba0cbed618)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7fba0cc12660) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16u)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7fba0cc12780) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7fba0cc127e0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16u)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7fba0cc12720) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0u
+24 0u
+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 (0x0x7fba0cc129c0) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16u)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0u
+24 0u
+32 (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 (0x0x7fba0cc12a20) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16u)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0u
+24 0u
+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 (0x0x7fba0cc12a80) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16u)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0u
+24 0u
+32 (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 (0x0x7fba0cc12ae0) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16u)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0u
+24 0u
+32 (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 (0x0x7fba0cc12b40) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16u)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0u
+24 0u
+32 (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 (0x0x7fba0cc12ba0) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16u)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0u
+24 0u
+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 (0x0x7fba0cc12c00) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16u)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0u
+24 0u
+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 (0x0x7fba0cc12c60) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16u)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5u 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 (0x0x7fba0cc12cc0) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16u)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5u 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 (0x0x7fba0cd13068) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7fba0cd0d240) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7fba0cd13068)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5u 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 (0x0x7fba0cd130d0) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16u)
+ QAccessibleEvent (0x0x7fba0cd0d2a0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fba0cd130d0)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5u 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 (0x0x7fba0cd13138) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7fba0cd131a0) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7fba0cd13138)
+ QAccessibleEvent (0x0x7fba0cd0d300) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fba0cd131a0)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTextInsertEvent (0x0x7fba0cd13208) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7fba0cd13270) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7fba0cd13208)
+ QAccessibleEvent (0x0x7fba0cd0d360) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fba0cd13270)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTextRemoveEvent (0x0x7fba0cd132d8) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7fba0cd13340) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7fba0cd132d8)
+ QAccessibleEvent (0x0x7fba0cd0d3c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fba0cd13340)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=56 align=8
+ base size=56 base align=8
+QAccessibleTextUpdateEvent (0x0x7fba0cd133a8) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7fba0cd13410) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7fba0cd133a8)
+ QAccessibleEvent (0x0x7fba0cd0d420) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fba0cd13410)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleValueChangeEvent (0x0x7fba0cd13478) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7fba0cd0d480) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7fba0cd13478)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5u 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 (0x0x7fba0cd134e0) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7fba0cd0d4e0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7fba0cd134e0)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7fba0cd0d5a0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16u)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7fba0cd0d660) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7fba0cd13548) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16u)
+ QObject (0x0x7fba0cd0d600) 0
+ primary-for QAccessibleBridgePlugin (0x0x7fba0cd13548)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0u
+24 0u
+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 (0x0x7fba0cd135b0) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16u)
+ QAccessibleInterface (0x0x7fba0cd0d6c0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fba0cd135b0)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23u 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 (0x0x7fba0cd13618) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16u)
+ QAccessibleObject (0x0x7fba0cd13680) 0
+ primary-for QAccessibleApplication (0x0x7fba0cd13618)
+ QAccessibleInterface (0x0x7fba0cd0d720) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fba0cd13680)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7fba0cd0d7e0) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7fba0cd136e8) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16u)
+ QObject (0x0x7fba0cd0d780) 0
+ primary-for QAccessiblePlugin (0x0x7fba0cd136e8)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7fba0cd0d840) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0u
+24 0u
+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 (0x0x7fba0cd0da20) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16u)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7fba0cd0dba0) 0
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7fba0cacbf60) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7fba0cb7f5a0) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 45u 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::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI7QWindow)
+312 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+320 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7fba0cb8a150) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16u)
+ QObject (0x0x7fba0cb7f4e0) 0
+ primary-for QWindow (0x0x7fba0cb8a150)
+ QSurface (0x0x7fba0cb7f540) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 312u)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7fba0cb7f6c0) 0
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10u 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=32 align=8
+ base size=32 base align=8
+QBitmap (0x0x7fba0cb78750) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16u)
+ QPixmap (0x0x7fba0cb787b8) 0
+ primary-for QBitmap (0x0x7fba0cb78750)
+ QPaintDevice (0x0x7fba0cb7f780) 0
+ primary-for QPixmap (0x0x7fba0cb787b8)
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7fba0cb7fae0) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14u 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 (0x0x7fba0cb78a28) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16u)
+ QObject (0x0x7fba0cb7fa80) 0
+ primary-for QClipboard (0x0x7fba0cb78a28)
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7fba0cb7fb40) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7fba0cb7fc00) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14u 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 (0x0x7fba0cb78a90) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16u)
+ QObject (0x0x7fba0cb7fba0) 0
+ primary-for QDrag (0x0x7fba0cb78a90)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7fba0cb7fc60) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7fba0cb7ff00) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7fba0c84e240) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7fba0c91d9c0) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7fba0c8815b0) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16u)
+ QObject (0x0x7fba0c91d960) 0
+ primary-for QGenericPlugin (0x0x7fba0c8815b0)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7fba0c91da20) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7fba0c91dae0) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14u 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 (0x0x7fba0c881618) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16u)
+ QObject (0x0x7fba0c91da80) 0
+ primary-for QInputMethod (0x0x7fba0c881618)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7fba0c91dba0) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16u 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 (0x0x7fba0c881680) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16u)
+ QCoreApplication (0x0x7fba0c8816e8) 0
+ primary-for QGuiApplication (0x0x7fba0c881680)
+ QObject (0x0x7fba0c91db40) 0
+ primary-for QCoreApplication (0x0x7fba0c8816e8)
+
+Class QIconEngine::AvailableSizesArgument
+ size=16 align=8
+ base size=16 base align=8
+QIconEngine::AvailableSizesArgument (0x0x7fba0c603120) 0
+
+Class QIconEngine::ScaledPixmapArgument
+ size=56 align=8
+ base size=56 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7fba0c6032a0) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0u
+24 0u
+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::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7fba0c6030c0) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16u)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7fba0c603360) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7fba0c881d00) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16u)
+ QObject (0x0x7fba0c603300) 0
+ primary-for QIconEnginePlugin (0x0x7fba0c881d00)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0u
+24 0u
+32 (int (*)(...))QImageIOHandler::name
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QImageIOHandler::write
+64 (int (*)(...))QImageIOHandler::option
+72 (int (*)(...))QImageIOHandler::setOption
+80 (int (*)(...))QImageIOHandler::supportsOption
+88 (int (*)(...))QImageIOHandler::jumpToNextImage
+96 (int (*)(...))QImageIOHandler::jumpToImage
+104 (int (*)(...))QImageIOHandler::loopCount
+112 (int (*)(...))QImageIOHandler::imageCount
+120 (int (*)(...))QImageIOHandler::nextImageDelay
+128 (int (*)(...))QImageIOHandler::currentImageNumber
+136 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7fba0c6033c0) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16u)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7fba0c603540) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7fba0c881d68) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16u)
+ QObject (0x0x7fba0c6034e0) 0
+ primary-for QImageIOPlugin (0x0x7fba0c881d68)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7fba0c603720) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7fba0c603780) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7fba0c6037e0) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7fba0c603a80) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7fba0c603d20) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7fba0c7b5360) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7fba0c7b5ae0) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14u 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 (0x0x7fba0c72ff08) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16u)
+ QObject (0x0x7fba0c7b5a80) 0
+ primary-for QMovie (0x0x7fba0c72ff08)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7fba0c7b5c00) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26u 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 (0x0x7fba0c4fae00) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16u)
+ QObject (0x0x7fba0c7b5b40) 0
+ primary-for QOffscreenSurface (0x0x7fba0c4fae00)
+ QSurface (0x0x7fba0c7b5ba0) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160u)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7fba0c7b5cc0) 0
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7fba0c7b5ea0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7fba0bea89c0) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7fba0bea8a20) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7fba0bea8a80) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5u 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 (0x0x7fba0bea8ae0) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16u)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7fba0bea8ba0) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7fba0bec21a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bea8b40) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7fba0bea8cc0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7fba0bec2208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bea8c60) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7fba0bea8de0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7fba0bec2270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bea8d80) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7fba0bea8f00) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7fba0bec22d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bea8ea0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7fba0bf090c0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7fba0bec2340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09060) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7fba0bf091e0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7fba0bec23a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09180) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7fba0bf09300) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7fba0bec2410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf092a0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7fba0bf09420) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7fba0bec2478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf093c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7fba0bf09540) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7fba0bec24e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf094e0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7fba0bf09660) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7fba0bec2548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09600) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7fba0bf09780) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7fba0bec25b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09720) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7fba0bf098a0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7fba0bec2618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09840) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7fba0bf099c0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7fba0bec2680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09960) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7fba0bf09ae0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7fba0bec26e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09a80) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7fba0bf09c00) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7fba0bec2750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09ba0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7fba0bf09d20) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7fba0bec27b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09cc0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7fba0bf09e40) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7fba0bec2820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09de0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7fba0bc01000) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7fba0bec2888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bf09f60) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7fba0bc01120) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7fba0bec28f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc010c0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7fba0bc01240) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7fba0bec2958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc011e0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7fba0bc01360) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7fba0bec29c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc01300) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7fba0bc01480) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7fba0bec2a28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc01420) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7fba0bc015a0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7fba0bec2a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc01540) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7fba0bc016c0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7fba0bec2af8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc01660) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7fba0bc017e0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7fba0bec2b60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc01780) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7fba0bc01900) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7fba0bec2bc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc018a0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7fba0bc01a20) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7fba0bec2c30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fba0bc019c0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7fba0bc01ae0) 0
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7fba0bd0d4e0) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14u 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 (0x0x7fba0bd03680) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16u)
+ QObject (0x0x7fba0bd0d480) 0
+ primary-for QOpenGLContextGroup (0x0x7fba0bd03680)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7fba0bd0d5a0) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14u 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 (0x0x7fba0bd036e8) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16u)
+ QObject (0x0x7fba0bd0d540) 0
+ primary-for QOpenGLContext (0x0x7fba0bd036e8)
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7fba0bd0d600) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7fba0bd0dde0) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14u 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 (0x0x7fba0bd03b60) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16u)
+ QObject (0x0x7fba0bd0dd80) 0
+ primary-for QOpenGLDebugLogger (0x0x7fba0bd03b60)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7fba0bd0df60) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7fba0ba5b1e0) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7fba0ba5b180) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7fba0bd03dd0) 0
+ QOpenGLFunctions (0x0x7fba0bb7f900) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7fba0bb7f9c0) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7fba0bd03e38) 0
+ QOpenGLFunctionsPrivate (0x0x7fba0bb7f960) 0
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4u 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 (0x0x7fba0b5e20c0) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16u)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7fba0b5e21e0) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11u 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=32 align=8
+ base size=32 base align=8
+QOpenGLPaintDevice (0x0x7fba0b9b1138) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16u)
+ QPaintDevice (0x0x7fba0b5e2240) 0
+ primary-for QOpenGLPaintDevice (0x0x7fba0b9b1138)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7fba0b5e2360) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7fba0b5e26c0) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14u 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 (0x0x7fba0b9b1340) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16u)
+ QObject (0x0x7fba0b5e2660) 0
+ primary-for QOpenGLShader (0x0x7fba0b9b1340)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7fba0b5e2900) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15u 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 (0x0x7fba0b9b1478) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16u)
+ QObject (0x0x7fba0b5e28a0) 0
+ primary-for QOpenGLShaderProgram (0x0x7fba0b9b1478)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7fba0b5e2960) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7fba0b5e2c00) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7fba0b5e2d80) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14u 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 (0x0x7fba0b9b15b0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16u)
+ QObject (0x0x7fba0b5e2d20) 0
+ primary-for QOpenGLTimerQuery (0x0x7fba0b9b15b0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7fba0b5e2e40) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14u 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 (0x0x7fba0b9b1618) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16u)
+ QObject (0x0x7fba0b5e2de0) 0
+ primary-for QOpenGLTimeMonitor (0x0x7fba0b9b1618)
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7fba0b5e2f00) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7fba0b5e2f60) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14u 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 (0x0x7fba0b9b1680) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16u)
+ QObject (0x0x7fba0b5e2ea0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7fba0b9b1680)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7fba0b7b7120) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 58u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QPaintDeviceWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))-16
+328 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+336 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+384 (int (*)(...))-40
+392 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+400 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+416 (int (*)(...))QPaintDevice::devType
+424 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+440 (int (*)(...))QPaintDevice::initPainter
+448 (int (*)(...))QPaintDevice::redirected
+456 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=64 align=8
+ base size=64 base align=8
+QPaintDeviceWindow (0x0x7fba0b7b0850) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16u)
+ QWindow (0x0x7fba0b7b08c0) 0
+ primary-for QPaintDeviceWindow (0x0x7fba0b7b0850)
+ QObject (0x0x7fba0b7b7000) 0
+ primary-for QWindow (0x0x7fba0b7b08c0)
+ QSurface (0x0x7fba0b7b7060) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 336u)
+ QPaintDevice (0x0x7fba0b7b70c0) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 400u)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7fba0b7b72a0) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 64u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QOpenGLWindow::paintEvent
+304 (int (*)(...))QOpenGLWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QOpenGLWindow::initializeGL
+328 (int (*)(...))QOpenGLWindow::resizeGL
+336 (int (*)(...))QOpenGLWindow::paintGL
+344 (int (*)(...))QOpenGLWindow::paintUnderGL
+352 (int (*)(...))QOpenGLWindow::paintOverGL
+360 (int (*)(...))QOpenGLWindow::redirected
+368 (int (*)(...))-16
+376 (int (*)(...))(& _ZTI13QOpenGLWindow)
+384 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+400 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+432 (int (*)(...))-40
+440 (int (*)(...))(& _ZTI13QOpenGLWindow)
+448 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+464 (int (*)(...))QPaintDevice::devType
+472 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+480 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QPaintDevice::initPainter
+496 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+504 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLWindow (0x0x7fba0b9b1750) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16u)
+ QPaintDeviceWindow (0x0x7fba0b7b0e00) 0
+ primary-for QOpenGLWindow (0x0x7fba0b9b1750)
+ QWindow (0x0x7fba0b7b0e70) 0
+ primary-for QPaintDeviceWindow (0x0x7fba0b7b0e00)
+ QObject (0x0x7fba0b7b7180) 0
+ primary-for QWindow (0x0x7fba0b7b0e70)
+ QSurface (0x0x7fba0b7b71e0) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 384u)
+ QPaintDevice (0x0x7fba0b7b7240) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 448u)
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7fba0b7b7300) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7fba0b7b7cc0) 0
+
+Class QPagedPaintDevice::Margins
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice::Margins (0x0x7fba0b45d720) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0u
+24 0u
+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::setPageSize
+96 (int (*)(...))QPagedPaintDevice::setPageSizeMM
+104 (int (*)(...))QPagedPaintDevice::setMargins
+
+Class QPagedPaintDevice
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice (0x0x7fba0b460478) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16u)
+ QPaintDevice (0x0x7fba0b45d6c0) 0
+ primary-for QPagedPaintDevice (0x0x7fba0b460478)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7fba0b45d7e0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7fba0b45d780) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7fba0b5bd600) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0u
+24 0u
+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
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7fba0b5bd8a0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16u)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7fba0b5bdb40) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7fba0b5bdf60) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 34u 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::setPageSize
+128 (int (*)(...))QPdfWriter::setPageSizeMM
+136 (int (*)(...))QPdfWriter::setMargins
+144 (int (*)(...))QPdfWriter::paintEngine
+152 (int (*)(...))QPdfWriter::metric
+160 (int (*)(...))-16
+168 (int (*)(...))(& _ZTI10QPdfWriter)
+176 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+184 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+192 (int (*)(...))QPaintDevice::devType
+200 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+208 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+216 (int (*)(...))QPaintDevice::initPainter
+224 (int (*)(...))QPaintDevice::redirected
+232 (int (*)(...))QPaintDevice::sharedPainter
+240 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+248 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter11setPageSizeEN17QPagedPaintDevice8PageSizeE
+256 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter13setPageSizeMMERK6QSizeF
+264 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter10setMarginsERKN17QPagedPaintDevice7MarginsE
+
+Class QPdfWriter
+ size=48 align=8
+ base size=48 base align=8
+QPdfWriter (0x0x7fba0b34d230) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16u)
+ QObject (0x0x7fba0b5bdea0) 0
+ primary-for QPdfWriter (0x0x7fba0b34d230)
+ QPagedPaintDevice (0x0x7fba0b26c4e0) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 176u)
+ QPaintDevice (0x0x7fba0b5bdf00) 16
+ primary-for QPagedPaintDevice (0x0x7fba0b26c4e0)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11u 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=32 align=8
+ base size=32 base align=8
+QPicture (0x0x7fba0b26c548) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16u)
+ QPaintDevice (0x0x7fba0b36c120) 0
+ primary-for QPicture (0x0x7fba0b26c548)
+
+Class QPictureIO
+ size=8 align=8
+ base size=8 base align=8
+QPictureIO (0x0x7fba0b36c420) 0
+
+Class QPictureFormatPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPictureFormatPlugin::QPrivateSignal (0x0x7fba0b36c4e0) 0 empty
+
+Vtable for QPictureFormatPlugin
+QPictureFormatPlugin::_ZTV20QPictureFormatPlugin: 17u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QPictureFormatPlugin)
+16 (int (*)(...))QPictureFormatPlugin::metaObject
+24 (int (*)(...))QPictureFormatPlugin::qt_metacast
+32 (int (*)(...))QPictureFormatPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPictureFormatPlugin::loadPicture
+120 (int (*)(...))QPictureFormatPlugin::savePicture
+128 (int (*)(...))__cxa_pure_virtual
+
+Class QPictureFormatPlugin
+ size=16 align=8
+ base size=16 base align=8
+QPictureFormatPlugin (0x0x7fba0b26c750) 0
+ vptr=((& QPictureFormatPlugin::_ZTV20QPictureFormatPlugin) + 16u)
+ QObject (0x0x7fba0b36c480) 0
+ primary-for QPictureFormatPlugin (0x0x7fba0b26c750)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7fba0b36c5a0) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7fba0b36c540) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7fba0b028720) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 59u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QRasterWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QRasterWindow::redirected
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI13QRasterWindow)
+344 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+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 (*)(...))(& _ZTI13QRasterWindow)
+408 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=64 align=8
+ base size=64 base align=8
+QRasterWindow (0x0x7fba0b020e38) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16u)
+ QPaintDeviceWindow (0x0x7fba0b02d930) 0
+ primary-for QRasterWindow (0x0x7fba0b020e38)
+ QWindow (0x0x7fba0b02d9a0) 0
+ primary-for QPaintDeviceWindow (0x0x7fba0b02d930)
+ QObject (0x0x7fba0b028600) 0
+ primary-for QWindow (0x0x7fba0b02d9a0)
+ QSurface (0x0x7fba0b028660) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 344u)
+ QPaintDevice (0x0x7fba0b0286c0) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 408u)
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7fba0b0287e0) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14u 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 (0x0x7fba0b020f08) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16u)
+ QObject (0x0x7fba0b028780) 0
+ primary-for QScreen (0x0x7fba0b020f08)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7fba0b0288a0) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14u 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 (0x0x7fba0b020f70) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16u)
+ QObject (0x0x7fba0b028840) 0
+ primary-for QSessionManager (0x0x7fba0b020f70)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::setData
+48 (int (*)(...))QStandardItem::clone
+56 (int (*)(...))QStandardItem::type
+64 (int (*)(...))QStandardItem::read
+72 (int (*)(...))QStandardItem::write
+80 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7fba0b028900) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16u)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7fba0b13c060) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 48u 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 (*)(...))QStandardItemModel::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::mimeTypes
+216 (int (*)(...))QStandardItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QStandardItemModel::dropMimeData
+240 (int (*)(...))QStandardItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStandardItemModel::insertRows
+264 (int (*)(...))QStandardItemModel::insertColumns
+272 (int (*)(...))QStandardItemModel::removeRows
+280 (int (*)(...))QStandardItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStandardItemModel::flags
+328 (int (*)(...))QStandardItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7fba0b0b8618) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16u)
+ QAbstractItemModel (0x0x7fba0b0b8680) 0
+ primary-for QStandardItemModel (0x0x7fba0b0b8618)
+ QObject (0x0x7fba0b13c000) 0
+ primary-for QAbstractItemModel (0x0x7fba0b0b8680)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7fba0b13c0c0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7fba0b13c540) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14u 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 (0x0x7fba0b0b8888) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16u)
+ QObject (0x0x7fba0b13c4e0) 0
+ primary-for QStyleHints (0x0x7fba0b0b8888)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7fba0b13c600) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14u 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 (0x0x7fba0b0b88f0) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16u)
+ QObject (0x0x7fba0b13c5a0) 0
+ primary-for QTextObject (0x0x7fba0b0b88f0)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7fba0b13c6c0) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17u 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 (0x0x7fba0b0b8958) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16u)
+ QTextObject (0x0x7fba0b0b89c0) 0
+ primary-for QTextBlockGroup (0x0x7fba0b0b8958)
+ QObject (0x0x7fba0b13c660) 0
+ primary-for QTextObject (0x0x7fba0b0b89c0)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4u 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 (0x0x7fba0b13c720) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16u)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7fba0b13c7e0) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7fba0b13c840) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14u 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 (0x0x7fba0b0b8a28) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16u)
+ QTextObject (0x0x7fba0b0b8a90) 0
+ primary-for QTextFrame (0x0x7fba0b0b8a28)
+ QObject (0x0x7fba0b13c780) 0
+ primary-for QTextObject (0x0x7fba0b0b8a90)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4u 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 (0x0x7fba0b13cae0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16u)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7fba0b13cba0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7fba0b13cb40) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7fba0ae2f0c0) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7fba0ae2f3c0) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7fba0ae451a0) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16u)
+ QObject (0x0x7fba0ae2f360) 0
+ primary-for QSyntaxHighlighter (0x0x7fba0ae451a0)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7fba0ae2f420) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7fba0ae2f480) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7fba0ae2f540) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17u 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 (0x0x7fba0ae45208) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16u)
+ QTextBlockGroup (0x0x7fba0ae45270) 0
+ primary-for QTextList (0x0x7fba0ae45208)
+ QTextObject (0x0x7fba0ae452d8) 0
+ primary-for QTextBlockGroup (0x0x7fba0ae45270)
+ QObject (0x0x7fba0ae2f4e0) 0
+ primary-for QTextObject (0x0x7fba0ae452d8)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7fba0ae2f5a0) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7fba0ae2f660) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14u 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 (0x0x7fba0ae45340) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16u)
+ QTextFrame (0x0x7fba0ae453a8) 0
+ primary-for QTextTable (0x0x7fba0ae45340)
+ QTextObject (0x0x7fba0ae45410) 0
+ primary-for QTextFrame (0x0x7fba0ae453a8)
+ QObject (0x0x7fba0ae2f600) 0
+ primary-for QTextObject (0x0x7fba0ae45410)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7fba0ae2f720) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7fba0ae45478) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16u)
+ QObject (0x0x7fba0ae2f6c0) 0
+ primary-for QValidator (0x0x7fba0ae45478)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7fba0ae2f7e0) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 17u 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
+128 (int (*)(...))QIntValidator::setRange
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7fba0ae454e0) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16u)
+ QValidator (0x0x7fba0ae45548) 0
+ primary-for QIntValidator (0x0x7fba0ae454e0)
+ QObject (0x0x7fba0ae2f780) 0
+ primary-for QValidator (0x0x7fba0ae45548)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7fba0ae2f8a0) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 17u 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
+128 (int (*)(...))QDoubleValidator::setRange
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7fba0ae455b0) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16u)
+ QValidator (0x0x7fba0ae45618) 0
+ primary-for QDoubleValidator (0x0x7fba0ae455b0)
+ QObject (0x0x7fba0ae2f840) 0
+ primary-for QValidator (0x0x7fba0ae45618)
+
+Class QRegExpValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegExpValidator::QPrivateSignal (0x0x7fba0ae2f9c0) 0 empty
+
+Vtable for QRegExpValidator
+QRegExpValidator::_ZTV16QRegExpValidator: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QRegExpValidator)
+16 (int (*)(...))QRegExpValidator::metaObject
+24 (int (*)(...))QRegExpValidator::qt_metacast
+32 (int (*)(...))QRegExpValidator::qt_metacall
+40 (int (*)(...))QRegExpValidator::~QRegExpValidator
+48 (int (*)(...))QRegExpValidator::~QRegExpValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegExpValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegExpValidator
+ size=24 align=8
+ base size=24 base align=8
+QRegExpValidator (0x0x7fba0ae45680) 0
+ vptr=((& QRegExpValidator::_ZTV16QRegExpValidator) + 16u)
+ QValidator (0x0x7fba0ae456e8) 0
+ primary-for QRegExpValidator (0x0x7fba0ae45680)
+ QObject (0x0x7fba0ae2f960) 0
+ primary-for QValidator (0x0x7fba0ae456e8)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7fba0ae2fa80) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16u 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 (0x0x7fba0ae45750) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16u)
+ QValidator (0x0x7fba0ae457b8) 0
+ primary-for QRegularExpressionValidator (0x0x7fba0ae45750)
+ QObject (0x0x7fba0ae2fa20) 0
+ primary-for QValidator (0x0x7fba0ae457b8)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7fba0ae2fae0) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7fba0af2b060) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7fba0af2b720) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7fba0af57000) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16u)
+ QObject (0x0x7fba0af2b6c0) 0
+ primary-for QAbstractNetworkCache (0x0x7fba0af57000)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7fba0af2b7e0) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7fba0af57068) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16u)
+ QIODevice (0x0x7fba0af570d0) 0
+ primary-for QAbstractSocket (0x0x7fba0af57068)
+ QObject (0x0x7fba0af2b780) 0
+ primary-for QIODevice (0x0x7fba0af570d0)
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7fba0af2bd80) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7fba0af2bde0) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7fba0ac2f120) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7fba0ac2f420) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7fba0ac2f720) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7fba0ac2fa20) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7fba0ac2fd80) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14u 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 (0x0x7fba0af57af8) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16u)
+ QObject (0x0x7fba0ac2fd20) 0
+ primary-for QDnsLookup (0x0x7fba0af57af8)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7fba0ac2fde0) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7fba0ac2fe40) 0
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7fba0acdb660) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7fba0acdbb40) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7fba0ada8360) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7fba0ada86c0) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14u 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 (0x0x7fba0ad15d68) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16u)
+ QObject (0x0x7fba0ada8660) 0
+ primary-for QHttpMultiPart (0x0x7fba0ad15d68)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7fba0ada8780) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17u 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 (0x0x7fba0ad15dd0) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16u)
+ QObject (0x0x7fba0ada8720) 0
+ primary-for QLocalServer (0x0x7fba0ad15dd0)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7fba0ada89c0) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 30u 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::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7fba0ad15f70) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16u)
+ QIODevice (0x0x7fba0aa23000) 0
+ primary-for QLocalSocket (0x0x7fba0ad15f70)
+ QObject (0x0x7fba0ada8960) 0
+ primary-for QIODevice (0x0x7fba0aa23000)
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7fba0ada8a80) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7fba0aa23068) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16u)
+ QAbstractSocket (0x0x7fba0aa230d0) 0
+ primary-for QTcpSocket (0x0x7fba0aa23068)
+ QIODevice (0x0x7fba0aa23138) 0
+ primary-for QAbstractSocket (0x0x7fba0aa230d0)
+ QObject (0x0x7fba0ada8a20) 0
+ primary-for QIODevice (0x0x7fba0aa23138)
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7fba0ada8c60) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7fba0aab20c0) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7fba0aab2a20) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 41u 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::writeData
+240 (int (*)(...))QSslSocket::resume
+248 (int (*)(...))QSslSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QSslSocket::disconnectFromHost
+272 (int (*)(...))QSslSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QSslSocket::setSocketDescriptor
+296 (int (*)(...))QSslSocket::setSocketOption
+304 (int (*)(...))QSslSocket::socketOption
+312 (int (*)(...))QSslSocket::waitForConnected
+320 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7fba0aa23af8) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16u)
+ QTcpSocket (0x0x7fba0aa23b60) 0
+ primary-for QSslSocket (0x0x7fba0aa23af8)
+ QAbstractSocket (0x0x7fba0aa23bc8) 0
+ primary-for QTcpSocket (0x0x7fba0aa23b60)
+ QIODevice (0x0x7fba0aa23c30) 0
+ primary-for QAbstractSocket (0x0x7fba0aa23bc8)
+ QObject (0x0x7fba0aab29c0) 0
+ primary-for QIODevice (0x0x7fba0aa23c30)
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7fba0aab2a80) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7fba0ab6d240) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7fba0ab6db40) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 15u 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::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7fba0ab698f0) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16u)
+ QObject (0x0x7fba0ab6dae0) 0
+ primary-for QNetworkAccessManager (0x0x7fba0ab698f0)
+
+Class QNetworkConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QNetworkConfiguration (0x0x7fba0ab6dba0) 0
+
+Class QNetworkConfigurationManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkConfigurationManager::QPrivateSignal (0x0x7fba0a7fa060) 0 empty
+
+Vtable for QNetworkConfigurationManager
+QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QNetworkConfigurationManager)
+16 (int (*)(...))QNetworkConfigurationManager::metaObject
+24 (int (*)(...))QNetworkConfigurationManager::qt_metacast
+32 (int (*)(...))QNetworkConfigurationManager::qt_metacall
+40 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+48 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkConfigurationManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkConfigurationManager (0x0x7fba0ab69af8) 0
+ vptr=((& QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager) + 16u)
+ QObject (0x0x7fba0a7fa000) 0
+ primary-for QNetworkConfigurationManager (0x0x7fba0ab69af8)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7fba0a7fa3c0) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7fba0a7faba0) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20u 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 (0x0x7fba0a877340) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16u)
+ QObject (0x0x7fba0a7fab40) 0
+ primary-for QNetworkCookieJar (0x0x7fba0a877340)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7fba0a7fac00) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7fba0a910c00) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23u 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 (0x0x7fba0a915d68) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16u)
+ QAbstractNetworkCache (0x0x7fba0a915dd0) 0
+ primary-for QNetworkDiskCache (0x0x7fba0a915d68)
+ QObject (0x0x7fba0a910ba0) 0
+ primary-for QAbstractNetworkCache (0x0x7fba0a915dd0)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7fba0a910c60) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7fba0a966360) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7fba0a966a80) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7fba0a5fc120) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7fba0a5fc900) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16u)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7fba0a5fcae0) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 36u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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 (*)(...))QNetworkReply::writeData
+240 (int (*)(...))QNetworkReply::setReadBufferSize
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))QNetworkReply::ignoreSslErrors
+264 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+272 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7fba0a623478) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16u)
+ QIODevice (0x0x7fba0a6234e0) 0
+ primary-for QNetworkReply (0x0x7fba0a623478)
+ QObject (0x0x7fba0a5fca80) 0
+ primary-for QIODevice (0x0x7fba0a6234e0)
+
+Class QNetworkSession::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkSession::QPrivateSignal (0x0x7fba0a5fccc0) 0 empty
+
+Vtable for QNetworkSession
+QNetworkSession::_ZTV15QNetworkSession: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QNetworkSession)
+16 (int (*)(...))QNetworkSession::metaObject
+24 (int (*)(...))QNetworkSession::qt_metacast
+32 (int (*)(...))QNetworkSession::qt_metacall
+40 (int (*)(...))QNetworkSession::~QNetworkSession
+48 (int (*)(...))QNetworkSession::~QNetworkSession
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QNetworkSession::connectNotify
+104 (int (*)(...))QNetworkSession::disconnectNotify
+
+Class QNetworkSession
+ size=24 align=8
+ base size=24 base align=8
+QNetworkSession (0x0x7fba0a623548) 0
+ vptr=((& QNetworkSession::_ZTV15QNetworkSession) + 16u)
+ QObject (0x0x7fba0a5fcc60) 0
+ primary-for QNetworkSession (0x0x7fba0a623548)
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7fba0a6c22a0) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17u 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 (0x0x7fba0a623680) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16u)
+ QObject (0x0x7fba0a6c2240) 0
+ primary-for QTcpServer (0x0x7fba0a623680)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7fba0a6c2300) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7fba0a6c2600) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7fba0a6c2de0) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7fba0a7b3900) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7fba0a3e6060) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7fba0a3e63c0) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7fba0a7bec30) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16u)
+ QAbstractSocket (0x0x7fba0a7bec98) 0
+ primary-for QUdpSocket (0x0x7fba0a7bec30)
+ QIODevice (0x0x7fba0a7bed00) 0
+ primary-for QAbstractSocket (0x0x7fba0a7bec98)
+ QObject (0x0x7fba0a3e6360) 0
+ primary-for QIODevice (0x0x7fba0a7bed00)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7fba0a3e6420) 0
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7fba0a3e6720) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14u 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 (0x0x7fba0a7bee38) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16u)
+ QObject (0x0x7fba0a3e66c0) 0
+ primary-for QJSEngine (0x0x7fba0a7bee38)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7fba0a3e6900) 0
+
+Class QQmlPrivate::RegisterType
+ size=128 align=8
+ base size=124 base align=8
+QQmlPrivate::RegisterType (0x0x7fba0a3e6de0) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::RegisterInterface (0x0x7fba0a3e6e40) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7fba0a3e6ea0) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=64 align=8
+ base size=64 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7fba0a3e6f00) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7fba0a3e6f60) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7fba0a4e5000) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7fba0a4e5060) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7fba0a4e50c0) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7fba0a4e5120) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16u)
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7fba0a4e51e0) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16u)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7fba0a4e5300) 0
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7fba0a4e5960) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16u)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7fba0a4e59c0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7fba0a4e5c60) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlImageProviderBase
+ size=8 align=8
+ base size=8 base align=8
+QQmlImageProviderBase (0x0x7fba0a4e5cc0) 0 nearly-empty
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16u)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7fba0a4e5f00) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14u 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 (0x0x7fba0a4cb478) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16u)
+ QJSEngine (0x0x7fba0a4cb4e0) 0
+ primary-for QQmlEngine (0x0x7fba0a4cb478)
+ QObject (0x0x7fba0a4e5ea0) 0
+ primary-for QJSEngine (0x0x7fba0a4cb4e0)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7fba0a241000) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14u 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 (0x0x7fba0a4cb548) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16u)
+ QQmlEngine (0x0x7fba0a4cb5b0) 0
+ primary-for QQmlApplicationEngine (0x0x7fba0a4cb548)
+ QJSEngine (0x0x7fba0a4cb618) 0
+ primary-for QQmlEngine (0x0x7fba0a4cb5b0)
+ QObject (0x0x7fba0a4e5f60) 0
+ primary-for QJSEngine (0x0x7fba0a4cb618)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7fba0a2410c0) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17u 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 (0x0x7fba0a4cb680) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16u)
+ QObject (0x0x7fba0a241060) 0
+ primary-for QQmlComponent (0x0x7fba0a4cb680)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7fba0a241900) 0 empty
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14u 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 (0x0x7fba0a4cbbc8) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16u)
+ QObject (0x0x7fba0a2418a0) 0
+ primary-for QQmlContext (0x0x7fba0a4cbbc8)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7fba0a241a80) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7fba0a241cc0) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14u 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 (0x0x7fba0a4cbc30) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16u)
+ QObject (0x0x7fba0a241c60) 0
+ primary-for QQmlExpression (0x0x7fba0a4cbc30)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7fba0a241d20) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16u)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7fba0a4cbc98) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16u)
+ QQmlTypesExtensionInterface (0x0x7fba0a241d80) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7fba0a4cbc98)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7fba0a241f60) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::initializeEngine
+128 (int (*)(...))-16
+136 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+144 0u
+152 0u
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7fba0a2ea7e0) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16u)
+ QObject (0x0x7fba0a241ea0) 0
+ primary-for QQmlExtensionPlugin (0x0x7fba0a2ea7e0)
+ QQmlExtensionInterface (0x0x7fba0a4cbd00) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 144u)
+ QQmlTypesExtensionInterface (0x0x7fba0a241f00) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7fba0a4cbd00)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7fba0a302000) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7fba0a3020c0) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14u 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 (0x0x7fba0a4cbdd0) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16u)
+ QObject (0x0x7fba0a302060) 0
+ primary-for QQmlFileSelector (0x0x7fba0a4cbdd0)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6u 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 (0x0x7fba0a302120) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16u)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5u 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 (0x0x7fba0a302180) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16u)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7fba0a4cbe38) 0
+ QDebug (0x0x7fba0a3021e0) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7fba0a3b60c0) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16u)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7fba0a3b6120) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7fba0a3b6c60) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15u 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 (0x0x7fba0a3d9680) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16u)
+ QObject (0x0x7fba0a3b6c00) 0
+ primary-for QQmlPropertyMap (0x0x7fba0a3d9680)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7fba0a3b6d20) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7fba0a3d96e8) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16u)
+ QObject (0x0x7fba0a3b6cc0) 0
+ primary-for QQuickTransform (0x0x7fba0a3d96e8)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7fba0a3b6e40) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7fba0a3b6ea0) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7fba0a3b6f00) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 55u 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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickItem::updatePaintNode
+376 (int (*)(...))QQuickItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI10QQuickItem)
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7fba09ff45b0) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16u)
+ QObject (0x0x7fba0a3b6d80) 0
+ primary-for QQuickItem (0x0x7fba09ff45b0)
+ QQmlParserStatus (0x0x7fba0a3b6de0) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 408u)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7fba0a05a720) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0u
+24 0u
+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 (0x0x7fba0a05a780) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16u)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 56u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0u
+48 0u
+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 (*)(...))QQuickItem::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickFramebufferObject::geometryChanged
+368 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+376 (int (*)(...))QQuickFramebufferObject::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+416 0u
+424 0u
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7fba0a3d9820) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16u)
+ QQuickItem (0x0x7fba0a0a3bd0) 0
+ primary-for QQuickFramebufferObject (0x0x7fba0a3d9820)
+ QObject (0x0x7fba0a05a660) 0
+ primary-for QQuickItem (0x0x7fba0a0a3bd0)
+ QQmlParserStatus (0x0x7fba0a05a6c0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 416u)
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7fba0a3d9888) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16u)
+ QObject (0x0x7fba0a05a7e0) 0
+ primary-for QQuickTextureFactory (0x0x7fba0a3d9888)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7fba0a05a8a0) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7fba0a3d98f0) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16u)
+ QObject (0x0x7fba0a05a840) 0
+ primary-for QQuickImageResponse (0x0x7fba0a3d98f0)
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+24 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageProvider (0x0x7fba0a3d9958) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16u)
+ QQmlImageProviderBase (0x0x7fba0a05a900) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7fba0a3d9958)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 0u
+24 0u
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickAsyncImageProvider (0x0x7fba0a3d99c0) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16u)
+ QQuickImageProvider (0x0x7fba0a3d9a28) 0
+ primary-for QQuickAsyncImageProvider (0x0x7fba0a3d99c0)
+ QQmlImageProviderBase (0x0x7fba0a05a960) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7fba0a3d9a28)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7fba0a05aa20) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14u 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 (0x0x7fba0a3d9a90) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16u)
+ QObject (0x0x7fba0a05a9c0) 0
+ primary-for QQuickItemGrabResult (0x0x7fba0a3d9a90)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7fba0a05ab40) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 56u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0u
+48 0u
+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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickPaintedItem::updatePaintNode
+376 (int (*)(...))QQuickPaintedItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+416 0u
+424 0u
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7fba0a3d9af8) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16u)
+ QQuickItem (0x0x7fba0a0d5e00) 0
+ primary-for QQuickPaintedItem (0x0x7fba0a3d9af8)
+ QObject (0x0x7fba0a05aa80) 0
+ primary-for QQuickItem (0x0x7fba0a0d5e00)
+ QQmlParserStatus (0x0x7fba0a05aae0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 416u)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7fba0a05ad80) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15u 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 (0x0x7fba0a3d9c98) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16u)
+ QObject (0x0x7fba0a05ad20) 0
+ primary-for QQuickRenderControl (0x0x7fba0a3d9c98)
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7fba0a05ae40) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14u 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 (0x0x7fba0a3d9d00) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16u)
+ QObject (0x0x7fba0a05ade0) 0
+ primary-for QQuickTextDocument (0x0x7fba0a3d9d00)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7fba0a1741e0) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7fba0a174240) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7fba0a1742a0) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7fba0a174300) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7fba0a174360) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4u 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 (0x0x7fba0a174180) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16u)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6u 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=80 align=8
+ base size=80 base align=8
+QSGNode (0x0x7fba0a174840) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16u)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6u 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=112 align=8
+ base size=112 base align=8
+QSGBasicGeometryNode (0x0x7fba0a1aa410) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16u)
+ QSGNode (0x0x7fba0a174c00) 0
+ primary-for QSGBasicGeometryNode (0x0x7fba0a1aa410)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6u 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=144 align=8
+ base size=144 base align=8
+QSGGeometryNode (0x0x7fba0a1aa478) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16u)
+ QSGBasicGeometryNode (0x0x7fba0a1aa4e0) 0
+ primary-for QSGGeometryNode (0x0x7fba0a1aa478)
+ QSGNode (0x0x7fba0a174c60) 0
+ primary-for QSGBasicGeometryNode (0x0x7fba0a1aa4e0)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6u 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=152 align=8
+ base size=152 base align=8
+QSGClipNode (0x0x7fba0a1aa548) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16u)
+ QSGBasicGeometryNode (0x0x7fba0a1aa5b0) 0
+ primary-for QSGClipNode (0x0x7fba0a1aa548)
+ QSGNode (0x0x7fba0a174cc0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fba0a1aa5b0)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6u 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=216 align=8
+ base size=216 base align=8
+QSGTransformNode (0x0x7fba0a1aa618) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16u)
+ QSGNode (0x0x7fba0a174d20) 0
+ primary-for QSGTransformNode (0x0x7fba0a1aa618)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6u 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=88 align=8
+ base size=88 base align=8
+QSGRootNode (0x0x7fba0a1aa680) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16u)
+ QSGNode (0x0x7fba0a174d80) 0
+ primary-for QSGRootNode (0x0x7fba0a1aa680)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6u 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=96 align=8
+ base size=96 base align=8
+QSGOpacityNode (0x0x7fba0a1aa820) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16u)
+ QSGNode (0x0x7fba0a174f00) 0
+ primary-for QSGOpacityNode (0x0x7fba0a1aa820)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14u 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 (0x0x7fba0a174f60) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16u)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0u
+24 0u
+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 (0x0x7fba09efb000) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16u)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7fba09efb420) 0 empty
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 45u 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickWindow::keyPressEvent
+216 (int (*)(...))QQuickWindow::keyReleaseEvent
+224 (int (*)(...))QQuickWindow::mousePressEvent
+232 (int (*)(...))QQuickWindow::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickWindow::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI12QQuickWindow)
+312 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+320 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7fba0a1aaa28) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16u)
+ QWindow (0x0x7fba09f37e00) 0
+ primary-for QQuickWindow (0x0x7fba0a1aaa28)
+ QObject (0x0x7fba09efb360) 0
+ primary-for QWindow (0x0x7fba09f37e00)
+ QSurface (0x0x7fba09efb3c0) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 312u)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7fba09efb7e0) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 45u 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickView::keyPressEvent
+216 (int (*)(...))QQuickView::keyReleaseEvent
+224 (int (*)(...))QQuickView::mousePressEvent
+232 (int (*)(...))QQuickView::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickView::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI10QQuickView)
+312 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+320 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7fba0a1aab60) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16u)
+ QQuickWindow (0x0x7fba0a1aabc8) 0
+ primary-for QQuickView (0x0x7fba0a1aab60)
+ QWindow (0x0x7fba09fa84d0) 0
+ primary-for QQuickWindow (0x0x7fba0a1aabc8)
+ QObject (0x0x7fba09efb720) 0
+ primary-for QWindow (0x0x7fba09fa84d0)
+ QSurface (0x0x7fba09efb780) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 312u)
+
+Class QSGAbstractRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGAbstractRenderer::QPrivateSignal (0x0x7fba09efb8a0) 0 empty
+
+Vtable for QSGAbstractRenderer
+QSGAbstractRenderer::_ZTV19QSGAbstractRenderer: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QSGAbstractRenderer)
+16 (int (*)(...))QSGAbstractRenderer::metaObject
+24 (int (*)(...))QSGAbstractRenderer::qt_metacast
+32 (int (*)(...))QSGAbstractRenderer::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QSGAbstractRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSGAbstractRenderer (0x0x7fba0a1aac30) 0
+ vptr=((& QSGAbstractRenderer::_ZTV19QSGAbstractRenderer) + 16u)
+ QObject (0x0x7fba09efb840) 0
+ primary-for QSGAbstractRenderer (0x0x7fba0a1aac30)
+
+Class QSGEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGEngine::QPrivateSignal (0x0x7fba09efbae0) 0 empty
+
+Vtable for QSGEngine
+QSGEngine::_ZTV9QSGEngine: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSGEngine)
+16 (int (*)(...))QSGEngine::metaObject
+24 (int (*)(...))QSGEngine::qt_metacast
+32 (int (*)(...))QSGEngine::qt_metacall
+40 (int (*)(...))QSGEngine::~QSGEngine
+48 (int (*)(...))QSGEngine::~QSGEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSGEngine
+ size=16 align=8
+ base size=16 base align=8
+QSGEngine (0x0x7fba0a1aad68) 0
+ vptr=((& QSGEngine::_ZTV9QSGEngine) + 16u)
+ QObject (0x0x7fba09efba80) 0
+ primary-for QSGEngine (0x0x7fba0a1aad68)
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7fba09efbd80) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 12u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 0u
+24 0u
+32 (int (*)(...))QSGMaterialShader::activate
+40 (int (*)(...))QSGMaterialShader::deactivate
+48 (int (*)(...))QSGMaterialShader::updateState
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGMaterialShader::compile
+72 (int (*)(...))QSGMaterialShader::initialize
+80 (int (*)(...))QSGMaterialShader::vertexShader
+88 (int (*)(...))QSGMaterialShader::fragmentShader
+
+Class QSGMaterialShader
+ size=32 align=8
+ base size=32 base align=8
+QSGMaterialShader (0x0x7fba09efbd20) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16u)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7fba09c6e060) 0 empty
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0u
+24 0u
+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 (0x0x7fba09c6e0c0) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16u)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7u 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 (0x0x7fba09c7a0d0) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16u)
+ QSGMaterial (0x0x7fba09c6e2a0) 0
+ primary-for QSGFlatColorMaterial (0x0x7fba09c7a0d0)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7fba09c6e360) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7fba09c7a138) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16u)
+ QObject (0x0x7fba09c6e300) 0
+ primary-for QSGTexture (0x0x7fba09c7a138)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7fba09c6e420) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7fba09c7a1a0) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16u)
+ QSGTexture (0x0x7fba09c7a208) 0
+ primary-for QSGDynamicTexture (0x0x7fba09c7a1a0)
+ QObject (0x0x7fba09c6e3c0) 0
+ primary-for QSGTexture (0x0x7fba09c7a208)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0u
+24 0u
+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
+
+Class QSGImageNode
+ size=144 align=8
+ base size=144 base align=8
+QSGImageNode (0x0x7fba09c7a270) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16u)
+ QSGGeometryNode (0x0x7fba09c7a2d8) 0
+ primary-for QSGImageNode (0x0x7fba09c7a270)
+ QSGBasicGeometryNode (0x0x7fba09c7a340) 0
+ primary-for QSGGeometryNode (0x0x7fba09c7a2d8)
+ QSGNode (0x0x7fba09c6e480) 0
+ primary-for QSGBasicGeometryNode (0x0x7fba09c7a340)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0u
+24 0u
+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=144 align=8
+ base size=144 base align=8
+QSGNinePatchNode (0x0x7fba09c7a478) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16u)
+ QSGGeometryNode (0x0x7fba09c7a4e0) 0
+ primary-for QSGNinePatchNode (0x0x7fba09c7a478)
+ QSGBasicGeometryNode (0x0x7fba09c7a548) 0
+ primary-for QSGGeometryNode (0x0x7fba09c7a4e0)
+ QSGNode (0x0x7fba09c6e660) 0
+ primary-for QSGBasicGeometryNode (0x0x7fba09c7a548)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0u
+24 0u
+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=144 align=8
+ base size=144 base align=8
+QSGRectangleNode (0x0x7fba09c7a5b0) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16u)
+ QSGGeometryNode (0x0x7fba09c7a618) 0
+ primary-for QSGRectangleNode (0x0x7fba09c7a5b0)
+ QSGBasicGeometryNode (0x0x7fba09c7a680) 0
+ primary-for QSGGeometryNode (0x0x7fba09c7a618)
+ QSGNode (0x0x7fba09c6e6c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fba09c7a680)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+16 0u
+24 0u
+32 (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 (0x0x7fba09c6e780) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16u)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0u
+24 0u
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGRenderNode::releaseResources
+72 (int (*)(...))QSGRenderNode::flags
+80 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=88 align=8
+ base size=88 base align=8
+QSGRenderNode (0x0x7fba09c7a6e8) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16u)
+ QSGNode (0x0x7fba09c6e720) 0
+ primary-for QSGRenderNode (0x0x7fba09c7a6e8)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6u 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=320 align=8
+ base size=320 base align=8
+QSGSimpleRectNode (0x0x7fba09c7ab60) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16u)
+ QSGGeometryNode (0x0x7fba09c7abc8) 0
+ primary-for QSGSimpleRectNode (0x0x7fba09c7ab60)
+ QSGBasicGeometryNode (0x0x7fba09c7ac30) 0
+ primary-for QSGGeometryNode (0x0x7fba09c7abc8)
+ QSGNode (0x0x7fba09c6ed80) 0
+ primary-for QSGBasicGeometryNode (0x0x7fba09c7ac30)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7u 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 (0x0x7fba09c7ac98) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16u)
+ QSGMaterial (0x0x7fba09c6ede0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7fba09c7ac98)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7u 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 (0x0x7fba09c7ad00) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16u)
+ QSGOpaqueTextureMaterial (0x0x7fba09c7ad68) 0
+ primary-for QSGTextureMaterial (0x0x7fba09c7ad00)
+ QSGMaterial (0x0x7fba09c6ee40) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7fba09c7ad68)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6u 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=384 align=8
+ base size=384 base align=8
+QSGSimpleTextureNode (0x0x7fba09c7add0) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16u)
+ QSGGeometryNode (0x0x7fba09c7ae38) 0
+ primary-for QSGSimpleTextureNode (0x0x7fba09c7add0)
+ QSGBasicGeometryNode (0x0x7fba09c7aea0) 0
+ primary-for QSGGeometryNode (0x0x7fba09c7ae38)
+ QSGNode (0x0x7fba09c6eea0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fba09c7aea0)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7fba09a37180) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7fba09a3a068) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16u)
+ QObject (0x0x7fba09a37120) 0
+ primary-for QSGTextureProvider (0x0x7fba09a3a068)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7u 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 (0x0x7fba09a3a0d0) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16u)
+ QSGMaterial (0x0x7fba09a371e0) 0
+ primary-for QSGVertexColorMaterial (0x0x7fba09a3a0d0)
+
+Class QQuickStyle
+ size=1 align=1
+ base size=0 base align=1
+QQuickStyle (0x0x7fba09a37240) 0 empty
+
diff --git a/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.11.0.linux-gcc-amd64.txt b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.11.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..4c7accb315
--- /dev/null
+++ b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.11.0.linux-gcc-amd64.txt
@@ -0,0 +1,10993 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f64f1187e40) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f64f0d9a600) 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 (0x0x7f64f0d9a840) 0 empty
+
+Class std::__do_is_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_default_constructible_impl (0x0x7f64f0d9aa80) 0 empty
+
+Class std::__do_is_static_castable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_static_castable_impl (0x0x7f64f0d9acc0) 0 empty
+
+Class std::__do_is_direct_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_direct_constructible_impl (0x0x7f64f0d9ae40) 0 empty
+
+Class std::__do_is_nary_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nary_constructible_impl (0x0x7f64f0dce240) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f64f0e539c0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f64f0e53a80) 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 (0x0x7f64f0e53de0) 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 (0x0x7f64f0e53ea0) 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 (0x0x7f64f0e53f60) 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 (0x0x7f64f0e8b060) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f64f0e8b300) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f64f0e8b4e0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f64f0e8b960) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f64f0e8b9c0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f64f0f38660) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f64f0f386c0) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f64f0e993a8) 0 empty
+ std::input_iterator_tag (0x0x7f64f0f38720) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f64f0e99410) 0 empty
+ std::forward_iterator_tag (0x0x7f64f0e99478) 0 empty
+ std::input_iterator_tag (0x0x7f64f0f38780) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f64f0e994e0) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f64f0e99548) 0 empty
+ std::forward_iterator_tag (0x0x7f64f0e995b0) 0 empty
+ std::input_iterator_tag (0x0x7f64f0f387e0) 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 (0x0x7f64f0f7d480) 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 (0x0x7f64f0f7d4e0) 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 (0x0x7f64f0f7d540) 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 (0x0x7f64f0f7d5a0) 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 (0x0x7f64f0f7d600) 0 empty
+
+Class wait
+ size=4 align=4
+ base size=4 base align=4
+wait (0x0x7f64f0c84120) 0
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f64f0c84360) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f64f0c84420) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f64f0c84480) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f64f0c84540) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f64f0c845a0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f64f0c84a20) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f64f0c84a80) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5u 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 (0x0x7f64f0c84ae0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16u)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5u 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 (0x0x7f64f0e99af8) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16u)
+ std::exception (0x0x7f64f0c84b40) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f64f0e99af8)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f64f0c84ba0) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4u 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 (0x0x7f64f0c84c00) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16u)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5u 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 (0x0x7f64f0e99d00) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16u)
+ std::exception (0x0x7f64f09b1060) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f64f0e99d00)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5u 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 (0x0x7f64f0e99d68) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16u)
+ std::bad_alloc (0x0x7f64f0e99dd0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f64f0e99d68)
+ std::exception (0x0x7f64f09b10c0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f64f0e99dd0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f64f09b1120) 0 empty
+
+Class __exception
+ size=40 align=8
+ base size=40 base align=8
+__exception (0x0x7f64f09b1d20) 0
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f64f07b0a20) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f64f07b0a80) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16u)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f64f08b7960) 0
+
+Class __sched_param
+ size=4 align=4
+ base size=4 base align=4
+__sched_param (0x0x7f64f08b79c0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f64f08b7a80) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f64f08b7ae0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f64f08b7b40) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f64f08b7ba0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f64f08b7cc0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f64f08b7d20) 0
+
+Class _IO_marker
+ size=24 align=8
+ base size=24 base align=8
+_IO_marker (0x0x7f64f0621180) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f64f06211e0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f64f04079c0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f64f0407a20) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f64f043d9c0) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f64f02247e0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f64f0434b60) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f64f02248a0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f64f0434bc8) 0
+ std::_Bit_iterator_base (0x0x7f64f0434c30) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f64f0224900) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f64f0434c98) 0
+ std::_Bit_iterator_base (0x0x7f64f0434d00) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f64f0224960) 0 empty
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f64f0072780) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f64f0145540) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f64f01454e0) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f64efef84e0) 0
+
+Class qIsNull(double)::U
+ size=8 align=8
+ base size=8 base align=8
+qIsNull(double)::U (0x0x7f64eeabf000) 0
+
+Class qIsNull(float)::U
+ size=4 align=4
+ base size=4 base align=4
+qIsNull(float)::U (0x0x7f64eeabf060) 0
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f64ee753ae0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f64ee753b40) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f64ee753ba0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f64ee753c00) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f64ee753ea0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f64ee7c1420) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f64ee759a28) 0
+ std::__atomic_flag_base (0x0x7f64ee7c1480) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f64ee6d51a0) 0
+ QAtomicInteger<int> (0x0x7f64ee6d5208) 0
+ QBasicAtomicInteger<int> (0x0x7f64ee5e2ba0) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f64edf6a180) 0 empty
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f64edfdc1e0) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f64edfdc300) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f64ee196c30) 0
+ QGenericArgument (0x0x7f64edfdc360) 0
+
+Class QMetaObject
+ size=48 align=8
+ base size=48 base align=8
+QMetaObject (0x0x7f64edfdc4e0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f64edfdc5a0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f64ee0ba600) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f64ee0ba660) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f64ee0ba900) 0
+
+Class QArrayData
+ size=24 align=8
+ base size=24 base align=8
+QArrayData (0x0x7f64ee0ba960) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f64ee0bacc0) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f64ee0bad20) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4u 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 (0x0x7f64ee0bad80) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16u)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f64ee0bade0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f64ee0bae40) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f64ede40240) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5u 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 (0x0x7f64ede5a208) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16u)
+ std::exception (0x0x7f64ede40300) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f64ede5a208)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5u 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 (0x0x7f64ede5a270) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16u)
+ std::logic_error (0x0x7f64ede5a2d8) 0
+ primary-for std::domain_error (0x0x7f64ede5a270)
+ std::exception (0x0x7f64ede40360) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f64ede5a2d8)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5u 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 (0x0x7f64ede5a340) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16u)
+ std::logic_error (0x0x7f64ede5a3a8) 0
+ primary-for std::invalid_argument (0x0x7f64ede5a340)
+ std::exception (0x0x7f64ede403c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f64ede5a3a8)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5u 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 (0x0x7f64ede5a410) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16u)
+ std::logic_error (0x0x7f64ede5a478) 0
+ primary-for std::length_error (0x0x7f64ede5a410)
+ std::exception (0x0x7f64ede40420) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f64ede5a478)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5u 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 (0x0x7f64ede5a4e0) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16u)
+ std::logic_error (0x0x7f64ede5a548) 0
+ primary-for std::out_of_range (0x0x7f64ede5a4e0)
+ std::exception (0x0x7f64ede40480) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f64ede5a548)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5u 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 (0x0x7f64ede5a5b0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16u)
+ std::exception (0x0x7f64ede404e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f64ede5a5b0)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5u 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 (0x0x7f64ede5a618) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16u)
+ std::runtime_error (0x0x7f64ede5a680) 0
+ primary-for std::range_error (0x0x7f64ede5a618)
+ std::exception (0x0x7f64ede40540) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f64ede5a680)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5u 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 (0x0x7f64ede5a6e8) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16u)
+ std::runtime_error (0x0x7f64ede5a750) 0
+ primary-for std::overflow_error (0x0x7f64ede5a6e8)
+ std::exception (0x0x7f64ede405a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f64ede5a750)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5u 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 (0x0x7f64ede5a7b8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16u)
+ std::runtime_error (0x0x7f64ede5a820) 0
+ primary-for std::underflow_error (0x0x7f64ede5a7b8)
+ std::exception (0x0x7f64ede40600) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f64ede5a820)
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0u
+24 0u
+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 (0x0x7f64ede40780) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16u)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f64ede409c0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f64ede40b40) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5u 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 (0x0x7f64ede5ad00) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16u)
+ std::runtime_error (0x0x7f64ede5ad68) 0
+ primary-for std::system_error (0x0x7f64ede5ad00)
+ std::exception (0x0x7f64ede40d80) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f64ede5ad68)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5u 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 (0x0x7f64edaf28f0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16u)
+ std::system_error (0x0x7f64edaf2958) 0
+ primary-for std::ios_base::failure (0x0x7f64edaf28f0)
+ std::runtime_error (0x0x7f64edaf29c0) 0
+ primary-for std::system_error (0x0x7f64edaf2958)
+ std::exception (0x0x7f64edb200c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f64edaf29c0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f64edb20120) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f64edb20180) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f64edb201e0) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4u 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 (0x0x7f64edb20060) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16u)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f64edb20960) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f64edca1060) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2u entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24u)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64u)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2u entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64u)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2u entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24u)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64u)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2u entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64u)
+
+Construction vtable for std::basic_istream<char> (0x0x7f64ed7be270 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10u entries
+0 24u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0u
+32 0u
+40 18446744073709551592u
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0u
+72 0u
+
+Construction vtable for std::basic_ostream<char> (0x0x7f64ed7be340 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10u entries
+0 8u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0u
+32 0u
+40 18446744073709551608u
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0u
+72 0u
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7u entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24u)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24u)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64u)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24u)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64u)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104u)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64u)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f64ed7be6e8 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10u entries
+0 24u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0u
+32 0u
+40 18446744073709551592u
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0u
+72 0u
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f64ed7be7b8 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10u entries
+0 8u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0u
+32 0u
+40 18446744073709551608u
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0u
+72 0u
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7u entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24u)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64u)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24u)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64u)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104u)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64u)
+
+Class QByteArrayDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QByteArrayDataPtr (0x0x7f64eda9e8a0) 0
+
+Class QByteArray
+ size=8 align=8
+ base size=8 base align=8
+QByteArray (0x0x7f64eda9e900) 0
+
+Class QByteRef
+ size=16 align=8
+ base size=12 base align=8
+QByteRef (0x0x7f64ed506c60) 0
+
+Class QStringDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QStringDataPtr (0x0x7f64ed5f1000) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f64ed5f1480) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f64ed685300) 0
+
+Class QString::Null
+ size=1 align=1
+ base size=0 base align=1
+QString::Null (0x0x7f64ed685960) 0 empty
+
+Class QString
+ size=8 align=8
+ base size=8 base align=8
+QString (0x0x7f64ed685900) 0
+
+Class QCharRef
+ size=16 align=8
+ base size=12 base align=8
+QCharRef (0x0x7f64ed466a20) 0
+
+Class QStringRef
+ size=16 align=8
+ base size=16 base align=8
+QStringRef (0x0x7f64ed205660) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f64ed012300) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f64ed012360) 0 empty
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f64ed0123c0) 0
+
+Class QListData::NotArrayCompatibleLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotArrayCompatibleLayout (0x0x7f64ed012780) 0 empty
+
+Class QListData::NotIndirectLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotIndirectLayout (0x0x7f64ed0127e0) 0 empty
+
+Class QListData::ArrayCompatibleLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::ArrayCompatibleLayout (0x0x7f64ed017270) 0 empty
+ QListData::NotIndirectLayout (0x0x7f64ed012840) 0 empty
+
+Class QListData::InlineWithPaddingLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::InlineWithPaddingLayout (0x0x7f64ed0dd540) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f64ed0128a0) 0 empty
+ QListData::NotIndirectLayout (0x0x7f64ed012900) 0 empty
+
+Class QListData::IndirectLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::IndirectLayout (0x0x7f64ed0172d8) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f64ed012960) 0 empty
+
+Class QListData::Data
+ size=24 align=8
+ base size=24 base align=8
+QListData::Data (0x0x7f64ed0129c0) 0
+
+Class QListData
+ size=8 align=8
+ base size=8 base align=8
+QListData (0x0x7f64ed012720) 0
+
+Class QRegExp
+ size=8 align=8
+ base size=8 base align=8
+QRegExp (0x0x7f64ed012e40) 0
+
+Class QStringMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QStringMatcher::Data (0x0x7f64ece8d0c0) 0
+
+Class QStringMatcher
+ size=1048 align=8
+ base size=1048 base align=8
+QStringMatcher (0x0x7f64ece8d060) 0
+
+Class QStringList
+ size=8 align=8
+ base size=8 base align=8
+QStringList (0x0x7f64ece7dd00) 0
+ QList<QString> (0x0x7f64ece7dd68) 0
+ QListSpecialMethods<QString> (0x0x7f64ece8d2a0) 0 empty
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f64ece8d6c0) 0 empty
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f64ecbaf2a0) 0
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f64ecbaf900) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f64ecbafa80) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f64ecbafb40) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f64ecafa680) 0
+ std::__uses_alloc_base (0x0x7f64ecbafae0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f64ec9b4ba0) 0 empty
+
+Class QtPrivate::AbstractDebugStreamFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::AbstractDebugStreamFunction (0x0x7f64ec9b4de0) 0
+
+Class QtPrivate::AbstractComparatorFunction
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::AbstractComparatorFunction (0x0x7f64ec9b4ea0) 0
+
+Class QtPrivate::AbstractConverterFunction
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::AbstractConverterFunction (0x0x7f64ec6fb000) 0
+
+Class QMetaType
+ size=80 align=8
+ base size=80 base align=8
+QMetaType (0x0x7f64ec6fb180) 0
+
+Class QtMetaTypePrivate::VariantData
+ size=24 align=8
+ base size=20 base align=8
+QtMetaTypePrivate::VariantData (0x0x7f64ec6fb5a0) 0
+
+Class QtMetaTypePrivate::VectorBoolElements
+ size=1 align=1
+ base size=0 base align=1
+QtMetaTypePrivate::VectorBoolElements (0x0x7f64ec6fb6c0) 0 empty
+
+Class QtMetaTypePrivate::QSequentialIterableImpl
+ size=104 align=8
+ base size=104 base align=8
+QtMetaTypePrivate::QSequentialIterableImpl (0x0x7f64ec81f060) 0
+
+Class QtMetaTypePrivate::QAssociativeIterableImpl
+ size=112 align=8
+ base size=112 base align=8
+QtMetaTypePrivate::QAssociativeIterableImpl (0x0x7f64ec81f480) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f64ec81f780) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f64ec2fb000) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f64ec3c6e40) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=48 align=8
+ base size=48 base align=8
+QObjectData (0x0x7f64ec3c6ea0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16u)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f64ec4110c0) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14u 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 (0x0x7f64ec411060) 0
+ vptr=((& QObject::_ZTV7QObject) + 16u)
+
+Vtable for QObjectUserData
+QObjectUserData::_ZTV15QObjectUserData: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QObjectUserData)
+16 (int (*)(...))QObjectUserData::~QObjectUserData
+24 (int (*)(...))QObjectUserData::~QObjectUserData
+
+Class QObjectUserData
+ size=8 align=8
+ base size=8 base align=8
+QObjectUserData (0x0x7f64ec0d3360) 0 nearly-empty
+ vptr=((& QObjectUserData::_ZTV15QObjectUserData) + 16u)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f64ec0d33c0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f64ec0d3480) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0u
+48 0u
+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 (0x0x7f64ec0c4888) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16u)
+ QObject (0x0x7f64ec0d3420) 0
+ primary-for QAbstractAnimation (0x0x7f64ec0c4888)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f64ec0d3540) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18u 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 (0x0x7f64ec0c48f0) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16u)
+ QObject (0x0x7f64ec0d34e0) 0
+ primary-for QAnimationDriver (0x0x7f64ec0c48f0)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f64ec0d3600) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14u 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 (0x0x7f64ec0c4958) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16u)
+ QObject (0x0x7f64ec0d35a0) 0
+ primary-for QEventLoop (0x0x7f64ec0c4958)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f64ec0d37e0) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f64ec0d38a0) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f64ec0d3900) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 28u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QAbstractEventDispatcher::startingUp
+216 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f64ec0c4a90) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16u)
+ QObject (0x0x7f64ec0d3840) 0
+ primary-for QAbstractEventDispatcher (0x0x7f64ec0c4a90)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8u 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 (0x0x7f64ec0d3ba0) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16u)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5u 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 (0x0x7f64ec0c4c98) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16u)
+ std::exception (0x0x7f64ec0d3c00) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f64ec0c4c98)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5u 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 (0x0x7f64ec0c4d00) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16u)
+ std::exception (0x0x7f64ec0d3c60) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f64ec0c4d00)
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5u 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 (0x0x7f64ec218f70) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16u)
+ std::exception (0x0x7f64ec293d20) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f64ec218f70)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f64ec293de0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f64ec293e40) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f64ec293f60) 0
+
+Class QMapNodeBase
+ size=24 align=8
+ base size=24 base align=8
+QMapNodeBase (0x0x7f64ebf36480) 0
+
+Class QMapDataBase
+ size=40 align=8
+ base size=40 base align=8
+QMapDataBase (0x0x7f64ebf369c0) 0
+
+Class QHashData::Node
+ size=16 align=8
+ base size=16 base align=8
+QHashData::Node (0x0x7f64ebf36d80) 0
+
+Class QHashData
+ size=48 align=8
+ base size=44 base align=8
+QHashData (0x0x7f64ebf36d20) 0
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f64ebf36de0) 0 empty
+
+Class QVariant::PrivateShared
+ size=16 align=8
+ base size=12 base align=8
+QVariant::PrivateShared (0x0x7f64ebccf6c0) 0
+
+Class QVariant::Private::Data
+ size=8 align=8
+ base size=8 base align=8
+QVariant::Private::Data (0x0x7f64ebccf780) 0
+
+Class QVariant::Private
+ size=16 align=8
+ base size=12 base align=8
+QVariant::Private (0x0x7f64ebccf720) 0
+
+Class QVariant::Handler
+ size=72 align=8
+ base size=72 base align=8
+QVariant::Handler (0x0x7f64ebccf7e0) 0
+
+Class QVariant
+ size=16 align=8
+ base size=16 base align=8
+QVariant (0x0x7f64ebccf660) 0
+
+Class QVariantComparisonHelper
+ size=8 align=8
+ base size=8 base align=8
+QVariantComparisonHelper (0x0x7f64ebb24300) 0
+
+Class QSequentialIterable::const_iterator
+ size=112 align=8
+ base size=112 base align=8
+QSequentialIterable::const_iterator (0x0x7f64ebb24960) 0
+
+Class QSequentialIterable
+ size=104 align=8
+ base size=104 base align=8
+QSequentialIterable (0x0x7f64ebb24900) 0
+
+Class QAssociativeIterable::const_iterator
+ size=120 align=8
+ base size=120 base align=8
+QAssociativeIterable::const_iterator (0x0x7f64ebb24a20) 0
+
+Class QAssociativeIterable
+ size=112 align=8
+ base size=112 base align=8
+QAssociativeIterable (0x0x7f64ebb249c0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f64ebc4ed20) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f64eb993420) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f64eba30b40) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractItemModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractItemModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f64eba33d00) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16u)
+ QObject (0x0x7f64eba30ae0) 0
+ primary-for QAbstractItemModel (0x0x7f64eba33d00)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f64eba94420) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractTableModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractTableModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f64eba90410) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16u)
+ QAbstractItemModel (0x0x7f64eba90478) 0
+ primary-for QAbstractTableModel (0x0x7f64eba90410)
+ QObject (0x0x7f64eba943c0) 0
+ primary-for QAbstractItemModel (0x0x7f64eba90478)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f64eba944e0) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractListModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f64eba904e0) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16u)
+ QAbstractItemModel (0x0x7f64eba90548) 0
+ primary-for QAbstractListModel (0x0x7f64eba904e0)
+ QObject (0x0x7f64eba94480) 0
+ primary-for QAbstractItemModel (0x0x7f64eba90548)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f64eba94780) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16u)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f64eba94840) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 53u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QAbstractProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QAbstractProxyModel::setSourceModel
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))__cxa_pure_virtual
+408 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+416 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f64eba90680) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16u)
+ QAbstractItemModel (0x0x7f64eba906e8) 0
+ primary-for QAbstractProxyModel (0x0x7f64eba90680)
+ QObject (0x0x7f64eba947e0) 0
+ primary-for QAbstractItemModel (0x0x7f64eba906e8)
+
+Class QAbstractState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractState::QPrivateSignal (0x0x7f64eba94900) 0 empty
+
+Vtable for QAbstractState
+QAbstractState::_ZTV14QAbstractState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QAbstractState)
+16 (int (*)(...))QAbstractState::metaObject
+24 (int (*)(...))QAbstractState::qt_metacast
+32 (int (*)(...))QAbstractState::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractState
+ size=16 align=8
+ base size=16 base align=8
+QAbstractState (0x0x7f64eba90750) 0
+ vptr=((& QAbstractState::_ZTV14QAbstractState) + 16u)
+ QObject (0x0x7f64eba948a0) 0
+ primary-for QAbstractState (0x0x7f64eba90750)
+
+Class QAbstractTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTransition::QPrivateSignal (0x0x7f64eba949c0) 0 empty
+
+Vtable for QAbstractTransition
+QAbstractTransition::_ZTV19QAbstractTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTransition)
+16 (int (*)(...))QAbstractTransition::metaObject
+24 (int (*)(...))QAbstractTransition::qt_metacast
+32 (int (*)(...))QAbstractTransition::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractTransition
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTransition (0x0x7f64eba907b8) 0
+ vptr=((& QAbstractTransition::_ZTV19QAbstractTransition) + 16u)
+ QObject (0x0x7f64eba94960) 0
+ primary-for QAbstractTransition (0x0x7f64eba907b8)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f64eba94a80) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0u
+48 0u
+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 (0x0x7f64eba90820) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16u)
+ QAbstractAnimation (0x0x7f64eba90888) 0
+ primary-for QAnimationGroup (0x0x7f64eba90820)
+ QObject (0x0x7f64eba94a20) 0
+ primary-for QAbstractAnimation (0x0x7f64eba90888)
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f64eb8037e0) 0
+
+Class QBitArray
+ size=8 align=8
+ base size=8 base align=8
+QBitArray (0x0x7f64eb803a80) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=12 base align=8
+QBitRef (0x0x7f64eb803b40) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f64eb803e40) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 30u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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 (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f64eba90f08) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16u)
+ QObject (0x0x7f64eb803de0) 0
+ primary-for QIODevice (0x0x7f64eba90f08)
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f64eb4c40c0) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 30u 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 (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f64eb4bd068) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16u)
+ QIODevice (0x0x7f64eb4bd0d0) 0
+ primary-for QBuffer (0x0x7f64eb4bd068)
+ QObject (0x0x7f64eb4c4060) 0
+ primary-for QIODevice (0x0x7f64eb4bd0d0)
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f64eb4c4180) 0
+
+Class QByteArrayMatcher
+ size=1040 align=8
+ base size=1040 base align=8
+QByteArrayMatcher (0x0x7f64eb4c4120) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f64eb4c42a0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f64eb4c4240) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f64eb4c4480) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f64eb4c4660) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f64eb4c4c60) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f64eb4c4d20) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f64eb28bd20) 0
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+
+Class QEvent
+ size=24 align=8
+ base size=20 base align=8
+QEvent (0x0x7f64eb2cb1e0) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16u)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+
+Class QTimerEvent
+ size=24 align=8
+ base size=24 base align=8
+QTimerEvent (0x0x7f64eb2a05b0) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16u)
+ QEvent (0x0x7f64eb2cb240) 0
+ primary-for QTimerEvent (0x0x7f64eb2a05b0)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+
+Class QChildEvent
+ size=32 align=8
+ base size=32 base align=8
+QChildEvent (0x0x7f64eb2a0618) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16u)
+ QEvent (0x0x7f64eb2cb2a0) 0
+ primary-for QChildEvent (0x0x7f64eb2a0618)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+
+Class QDynamicPropertyChangeEvent
+ size=32 align=8
+ base size=32 base align=8
+QDynamicPropertyChangeEvent (0x0x7f64eb2a0b60) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16u)
+ QEvent (0x0x7f64eb2cb780) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f64eb2a0b60)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=24 base align=8
+QDeferredDeleteEvent (0x0x7f64eb2a0bc8) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16u)
+ QEvent (0x0x7f64eb2cb7e0) 0
+ primary-for QDeferredDeleteEvent (0x0x7f64eb2a0bc8)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f64eb2cb8a0) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16u 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 (0x0x7f64eb2a0c30) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16u)
+ QObject (0x0x7f64eb2cb840) 0
+ primary-for QCoreApplication (0x0x7f64eb2a0c30)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f64eb2cb900) 0
+
+Class QContiguousCacheData
+ size=24 align=4
+ base size=24 base align=4
+QContiguousCacheData (0x0x7f64eb2cb960) 0
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f64eb2cbf60) 0
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f64eb3bf000) 0
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f64eb3bf0c0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f64eb3bf5a0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f64eb3bf840) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f64eb07a000) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f64eb07a060) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f64eb3bff60) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f64eb122180) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f64eb122660) 0
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4u 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 (0x0x7f64eb264600) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16u)
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f64eb2648a0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f64eb264ae0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f64eb264c60) 0
+
+Class QDebug::Stream
+ size=80 align=8
+ base size=76 base align=8
+QDebug::Stream (0x0x7f64eaff11e0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f64eaff1180) 0
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f64eacea6c0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f64eacea780) 0 empty
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f64eadbf900) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFileDevice::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f64eadc5d68) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16u)
+ QIODevice (0x0x7f64eadc5dd0) 0
+ primary-for QFileDevice (0x0x7f64eadc5d68)
+ QObject (0x0x7f64eadbf8a0) 0
+ primary-for QIODevice (0x0x7f64eadc5dd0)
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f64eadbfb40) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f64eadc5f08) 0
+ vptr=((& QFile::_ZTV5QFile) + 16u)
+ QFileDevice (0x0x7f64eadc5f70) 0
+ primary-for QFile (0x0x7f64eadc5f08)
+ QIODevice (0x0x7f64eadc51a0) 0
+ primary-for QFileDevice (0x0x7f64eadc5f70)
+ QObject (0x0x7f64eadbfae0) 0
+ primary-for QIODevice (0x0x7f64eadc51a0)
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f64eadbfd20) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f64eaa81180) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f64eaa81780) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f64eaa819c0) 0
+
+Class QEventTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventTransition::QPrivateSignal (0x0x7f64eabd4de0) 0 empty
+
+Vtable for QEventTransition
+QEventTransition::_ZTV16QEventTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QEventTransition)
+16 (int (*)(...))QEventTransition::metaObject
+24 (int (*)(...))QEventTransition::qt_metacast
+32 (int (*)(...))QEventTransition::qt_metacall
+40 (int (*)(...))QEventTransition::~QEventTransition
+48 (int (*)(...))QEventTransition::~QEventTransition
+56 (int (*)(...))QEventTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QEventTransition::eventTest
+120 (int (*)(...))QEventTransition::onTransition
+
+Class QEventTransition
+ size=16 align=8
+ base size=16 base align=8
+QEventTransition (0x0x7f64eabd6c30) 0
+ vptr=((& QEventTransition::_ZTV16QEventTransition) + 16u)
+ QAbstractTransition (0x0x7f64eabd6c98) 0
+ primary-for QEventTransition (0x0x7f64eabd6c30)
+ QObject (0x0x7f64eabd4d80) 0
+ primary-for QAbstractTransition (0x0x7f64eabd6c98)
+
+Vtable for QException
+QException::_ZTV10QException: 7u 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 (0x0x7f64eabd6d00) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16u)
+ std::exception (0x0x7f64eabd4e40) 0 nearly-empty
+ primary-for QException (0x0x7f64eabd6d00)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7u 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=8 align=8
+ base size=8 base align=8
+QUnhandledException (0x0x7f64eabd6d68) 0 nearly-empty
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16u)
+ QException (0x0x7f64eabd6dd0) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f64eabd6d68)
+ std::exception (0x0x7f64eabd4ea0) 0 nearly-empty
+ primary-for QException (0x0x7f64eabd6dd0)
+
+Class QtPrivate::ExceptionHolder
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionHolder (0x0x7f64eabd4f00) 0
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f64eac50000) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f64eac50060) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16u)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f64eac50180) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14u 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 (0x0x7f64eabd6e38) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16u)
+ QObject (0x0x7f64eac50120) 0
+ primary-for QFileSelector (0x0x7f64eabd6e38)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f64eac50240) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14u 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 (0x0x7f64eabd6ea0) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16u)
+ QObject (0x0x7f64eac501e0) 0
+ primary-for QFileSystemWatcher (0x0x7f64eabd6ea0)
+
+Class QFinalState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFinalState::QPrivateSignal (0x0x7f64eac50300) 0 empty
+
+Vtable for QFinalState
+QFinalState::_ZTV11QFinalState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFinalState)
+16 (int (*)(...))QFinalState::metaObject
+24 (int (*)(...))QFinalState::qt_metacast
+32 (int (*)(...))QFinalState::qt_metacall
+40 (int (*)(...))QFinalState::~QFinalState
+48 (int (*)(...))QFinalState::~QFinalState
+56 (int (*)(...))QFinalState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFinalState::onEntry
+120 (int (*)(...))QFinalState::onExit
+
+Class QFinalState
+ size=16 align=8
+ base size=16 base align=8
+QFinalState (0x0x7f64eabd6f08) 0
+ vptr=((& QFinalState::_ZTV11QFinalState) + 16u)
+ QAbstractState (0x0x7f64eabd6f70) 0
+ primary-for QFinalState (0x0x7f64eabd6f08)
+ QObject (0x0x7f64eac502a0) 0
+ primary-for QAbstractState (0x0x7f64eabd6f70)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0u
+32 0u
+
+Class QRunnable
+ size=16 align=8
+ base size=12 base align=8
+QRunnable (0x0x7f64eac50360) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16u)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f64eac503c0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f64ea8bd0d0) 0
+ QBasicMutex (0x0x7f64eac505a0) 0
+
+Class QMutexLocker
+ size=8 align=8
+ base size=8 base align=8
+QMutexLocker (0x0x7f64eac50600) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f64eac50660) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f64eac506c0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4u 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 (0x0x7f64eac507e0) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16u)
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4u 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 (0x0x7f64ea979060) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16u)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f64ea979840) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0u
+48 0u
+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 (0x0x7f64ea9fc208) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16u)
+ QObject (0x0x7f64ea9797e0) 0
+ primary-for QFutureWatcherBase (0x0x7f64ea9fc208)
+
+Class QHistoryState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHistoryState::QPrivateSignal (0x0x7f64ea979e40) 0 empty
+
+Vtable for QHistoryState
+QHistoryState::_ZTV13QHistoryState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QHistoryState)
+16 (int (*)(...))QHistoryState::metaObject
+24 (int (*)(...))QHistoryState::qt_metacast
+32 (int (*)(...))QHistoryState::qt_metacall
+40 (int (*)(...))QHistoryState::~QHistoryState
+48 (int (*)(...))QHistoryState::~QHistoryState
+56 (int (*)(...))QHistoryState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHistoryState::onEntry
+120 (int (*)(...))QHistoryState::onExit
+
+Class QHistoryState
+ size=16 align=8
+ base size=16 base align=8
+QHistoryState (0x0x7f64ea9fcaf8) 0
+ vptr=((& QHistoryState::_ZTV13QHistoryState) + 16u)
+ QAbstractState (0x0x7f64ea9fcb60) 0
+ primary-for QHistoryState (0x0x7f64ea9fcaf8)
+ QObject (0x0x7f64ea979de0) 0
+ primary-for QAbstractState (0x0x7f64ea9fcb60)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f64ea979f00) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 53u 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QIdentityProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QIdentityProxyModel::insertRows
+264 (int (*)(...))QIdentityProxyModel::insertColumns
+272 (int (*)(...))QIdentityProxyModel::removeRows
+280 (int (*)(...))QIdentityProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QIdentityProxyModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QIdentityProxyModel::setSourceModel
+392 (int (*)(...))QIdentityProxyModel::mapToSource
+400 (int (*)(...))QIdentityProxyModel::mapFromSource
+408 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+416 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f64ea9fcbc8) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16u)
+ QAbstractProxyModel (0x0x7f64ea9fcc30) 0
+ primary-for QIdentityProxyModel (0x0x7f64ea9fcbc8)
+ QAbstractItemModel (0x0x7f64ea9fcc98) 0
+ primary-for QAbstractProxyModel (0x0x7f64ea9fcc30)
+ QObject (0x0x7f64ea979ea0) 0
+ primary-for QAbstractItemModel (0x0x7f64ea9fcc98)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f64ea979f60) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f64ea69a660) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20u 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 (0x0x7f64ea6c34e0) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16u)
+ QObject (0x0x7f64ea69a600) 0
+ primary-for QItemSelectionModel (0x0x7f64ea6c34e0)
+
+Class QItemSelection
+ size=8 align=8
+ base size=8 base align=8
+QItemSelection (0x0x7f64ea6c36e8) 0
+ QList<QItemSelectionRange> (0x0x7f64ea6c3750) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f64ea69a960) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=20 base align=8
+QJsonValue (0x0x7f64ea69ae40) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=12 base align=8
+QJsonValueRef (0x0x7f64ea4d15a0) 0
+
+Class QJsonValuePtr
+ size=24 align=8
+ base size=24 base align=8
+QJsonValuePtr (0x0x7f64ea4d1ae0) 0
+
+Class QJsonValueRefPtr
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRefPtr (0x0x7f64ea4d1b40) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::iterator (0x0x7f64ea4d1d20) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::const_iterator (0x0x7f64ea4d1d80) 0
+
+Class QJsonArray
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray (0x0x7f64ea4d1cc0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f64ea63f000) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f64ea63f060) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::iterator (0x0x7f64ea63f6c0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::const_iterator (0x0x7f64ea63f720) 0
+
+Class QJsonObject
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject (0x0x7f64ea63f660) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f64ea2f09c0) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14u 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=32 align=8
+ base size=25 base align=8
+QLibrary (0x0x7f64ea2efa90) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16u)
+ QObject (0x0x7f64ea2f0960) 0
+ primary-for QLibrary (0x0x7f64ea2efa90)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f64ea37f0c0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f64ea2f0ba0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f64ea37f5a0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f64ea37f600) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f64ea37f8a0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f64ea37fb40) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f64ea0774e0) 0
+
+Class QLinkedListData
+ size=32 align=8
+ base size=25 base align=8
+QLinkedListData (0x0x7f64ea077e40) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f64ea1161e0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f64ea116360) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f64ea116300) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f64ea1164e0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f64ea116780) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f64ea116de0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=12 base align=8
+QMetaMethod (0x0x7f64ea116e40) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=12 base align=8
+QMetaEnum (0x0x7f64e9ee5480) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f64e9ee5780) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=12 base align=8
+QMetaClassInfo (0x0x7f64e9ee57e0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f64e9ee5ae0) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17u 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 (0x0x7f64e9e73d00) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16u)
+ QObject (0x0x7f64e9ee5a80) 0
+ primary-for QMimeData (0x0x7f64e9e73d00)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f64e9ee5b40) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f64e9ee5e40) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f64e9ee5f00) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14u 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=24 align=8
+ base size=24 base align=8
+QObjectCleanupHandler (0x0x7f64e9e73f08) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16u)
+ QObject (0x0x7f64e9ee5ea0) 0
+ primary-for QObjectCleanupHandler (0x0x7f64e9e73f08)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f64e9ee5f60) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f64e9f6e720) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18u 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 (0x0x7f64e9f74618) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16u)
+ QAnimationGroup (0x0x7f64e9f74680) 0
+ primary-for QParallelAnimationGroup (0x0x7f64e9f74618)
+ QAbstractAnimation (0x0x7f64e9f746e8) 0
+ primary-for QAnimationGroup (0x0x7f64e9f74680)
+ QObject (0x0x7f64e9f6e6c0) 0
+ primary-for QAbstractAnimation (0x0x7f64e9f746e8)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f64e9f6e7e0) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18u 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 (0x0x7f64e9f74750) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16u)
+ QAbstractAnimation (0x0x7f64e9f747b8) 0
+ primary-for QPauseAnimation (0x0x7f64e9f74750)
+ QObject (0x0x7f64e9f6e780) 0
+ primary-for QAbstractAnimation (0x0x7f64e9f747b8)
+
+Class QStaticPlugin
+ size=16 align=8
+ base size=16 base align=8
+QStaticPlugin (0x0x7f64e9f6e9c0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f64e9f6ecc0) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14u 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 (0x0x7f64e9f749c0) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16u)
+ QObject (0x0x7f64e9f6ec60) 0
+ primary-for QPluginLoader (0x0x7f64e9f749c0)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f64e9f6ed20) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f64e9ff2420) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 31u 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 (*)(...))QProcess::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QProcess::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QProcess::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QProcess::writeData
+240 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f64e9ffc068) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16u)
+ QIODevice (0x0x7f64e9ffc0d0) 0
+ primary-for QProcess (0x0x7f64e9ffc068)
+ QObject (0x0x7f64e9ff23c0) 0
+ primary-for QIODevice (0x0x7f64e9ffc0d0)
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f64e9ff24e0) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20u 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 (0x0x7f64e9ffc138) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16u)
+ QAbstractAnimation (0x0x7f64e9ffc1a0) 0
+ primary-for QVariantAnimation (0x0x7f64e9ffc138)
+ QObject (0x0x7f64e9ff2480) 0
+ primary-for QAbstractAnimation (0x0x7f64e9ffc1a0)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f64e9ff25a0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20u 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 (0x0x7f64e9ffc270) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16u)
+ QVariantAnimation (0x0x7f64e9ffc2d8) 0
+ primary-for QPropertyAnimation (0x0x7f64e9ffc270)
+ QAbstractAnimation (0x0x7f64e9ffc340) 0
+ primary-for QVariantAnimation (0x0x7f64e9ffc2d8)
+ QObject (0x0x7f64e9ff2540) 0
+ primary-for QAbstractAnimation (0x0x7f64e9ffc340)
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f64e9ff26c0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f64e9ff2660) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f64e9cdc618) 0
+ QRandomGenerator (0x0x7f64e9cdf660) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f64e9cdf720) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f64e9cdf9c0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f64e9cdfa80) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f64e9cdfb40) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f64e9cdfde0) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f64e9df80c0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f64e9df8360) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f64e9df8600) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f64e9df8c00) 0
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f64e9df8f00) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f64e9bfc240) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f64e9bfc3c0) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 34u 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 (*)(...))QSaveFile::writeData
+240 (int (*)(...))QSaveFile::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f64e9ae6820) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16u)
+ QFileDevice (0x0x7f64e9ae6888) 0
+ primary-for QSaveFile (0x0x7f64e9ae6820)
+ QIODevice (0x0x7f64e9ae68f0) 0
+ primary-for QFileDevice (0x0x7f64e9ae6888)
+ QObject (0x0x7f64e9bfc360) 0
+ primary-for QIODevice (0x0x7f64e9ae68f0)
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f64e9bfc480) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f64e9bfc600) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f64e9942c00) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18u 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 (0x0x7f64e995e1a0) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16u)
+ QAnimationGroup (0x0x7f64e995e208) 0
+ primary-for QSequentialAnimationGroup (0x0x7f64e995e1a0)
+ QAbstractAnimation (0x0x7f64e995e270) 0
+ primary-for QAnimationGroup (0x0x7f64e995e208)
+ QObject (0x0x7f64e9942ba0) 0
+ primary-for QAbstractAnimation (0x0x7f64e995e270)
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f64e9942cc0) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14u 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 (0x0x7f64e995e2d8) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16u)
+ QObject (0x0x7f64e9942c60) 0
+ primary-for QSettings (0x0x7f64e995e2d8)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f64e9942d80) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14u 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 (0x0x7f64e995e340) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16u)
+ QObject (0x0x7f64e9942d20) 0
+ primary-for QSharedMemory (0x0x7f64e995e340)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f64e9942e40) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14u 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 (0x0x7f64e995e3a8) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16u)
+ QObject (0x0x7f64e9942de0) 0
+ primary-for QSignalMapper (0x0x7f64e995e3a8)
+
+Class QSignalTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalTransition::QPrivateSignal (0x0x7f64e9942f00) 0 empty
+
+Vtable for QSignalTransition
+QSignalTransition::_ZTV17QSignalTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSignalTransition)
+16 (int (*)(...))QSignalTransition::metaObject
+24 (int (*)(...))QSignalTransition::qt_metacast
+32 (int (*)(...))QSignalTransition::qt_metacall
+40 (int (*)(...))QSignalTransition::~QSignalTransition
+48 (int (*)(...))QSignalTransition::~QSignalTransition
+56 (int (*)(...))QSignalTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSignalTransition::eventTest
+120 (int (*)(...))QSignalTransition::onTransition
+
+Class QSignalTransition
+ size=16 align=8
+ base size=16 base align=8
+QSignalTransition (0x0x7f64e995e410) 0
+ vptr=((& QSignalTransition::_ZTV17QSignalTransition) + 16u)
+ QAbstractTransition (0x0x7f64e995e478) 0
+ primary-for QSignalTransition (0x0x7f64e995e410)
+ QObject (0x0x7f64e9942ea0) 0
+ primary-for QAbstractTransition (0x0x7f64e995e478)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f64e99cf000) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14u 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 (0x0x7f64e995e4e0) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16u)
+ QObject (0x0x7f64e9942f60) 0
+ primary-for QSocketNotifier (0x0x7f64e995e4e0)
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f64e99cf0c0) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 56u 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 (*)(...))QSortFilterProxyModel::mimeTypes
+216 (int (*)(...))QSortFilterProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QSortFilterProxyModel::dropMimeData
+240 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QSortFilterProxyModel::insertRows
+264 (int (*)(...))QSortFilterProxyModel::insertColumns
+272 (int (*)(...))QSortFilterProxyModel::removeRows
+280 (int (*)(...))QSortFilterProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QSortFilterProxyModel::fetchMore
+312 (int (*)(...))QSortFilterProxyModel::canFetchMore
+320 (int (*)(...))QSortFilterProxyModel::flags
+328 (int (*)(...))QSortFilterProxyModel::sort
+336 (int (*)(...))QSortFilterProxyModel::buddy
+344 (int (*)(...))QSortFilterProxyModel::match
+352 (int (*)(...))QSortFilterProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QSortFilterProxyModel::setSourceModel
+392 (int (*)(...))QSortFilterProxyModel::mapToSource
+400 (int (*)(...))QSortFilterProxyModel::mapFromSource
+408 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+416 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+424 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+432 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+440 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f64e995e548) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16u)
+ QAbstractProxyModel (0x0x7f64e995e5b0) 0
+ primary-for QSortFilterProxyModel (0x0x7f64e995e548)
+ QAbstractItemModel (0x0x7f64e995e618) 0
+ primary-for QAbstractProxyModel (0x0x7f64e995e5b0)
+ QObject (0x0x7f64e99cf060) 0
+ primary-for QAbstractItemModel (0x0x7f64e995e618)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f64e99cf180) 0 empty
+
+Class QState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QState::QPrivateSignal (0x0x7f64e99cf3c0) 0 empty
+
+Vtable for QState
+QState::_ZTV6QState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QState)
+16 (int (*)(...))QState::metaObject
+24 (int (*)(...))QState::qt_metacast
+32 (int (*)(...))QState::qt_metacall
+40 (int (*)(...))QState::~QState
+48 (int (*)(...))QState::~QState
+56 (int (*)(...))QState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QState::onEntry
+120 (int (*)(...))QState::onExit
+
+Class QState
+ size=16 align=8
+ base size=16 base align=8
+QState (0x0x7f64e995e7b8) 0
+ vptr=((& QState::_ZTV6QState) + 16u)
+ QAbstractState (0x0x7f64e995e820) 0
+ primary-for QState (0x0x7f64e995e7b8)
+ QObject (0x0x7f64e99cf360) 0
+ primary-for QAbstractState (0x0x7f64e995e820)
+
+Class QStateMachine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStateMachine::QPrivateSignal (0x0x7f64e99cf4e0) 0 empty
+
+Vtable for QStateMachine::SignalEvent
+QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine11SignalEventE)
+16 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+24 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+
+Class QStateMachine::SignalEvent
+ size=48 align=8
+ base size=48 base align=8
+QStateMachine::SignalEvent (0x0x7f64e995e9c0) 0
+ vptr=((& QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE) + 16u)
+ QEvent (0x0x7f64e99cf540) 0
+ primary-for QStateMachine::SignalEvent (0x0x7f64e995e9c0)
+
+Vtable for QStateMachine::WrappedEvent
+QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine12WrappedEventE)
+16 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+24 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+
+Class QStateMachine::WrappedEvent
+ size=40 align=8
+ base size=40 base align=8
+QStateMachine::WrappedEvent (0x0x7f64e995ea28) 0
+ vptr=((& QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE) + 16u)
+ QEvent (0x0x7f64e99cf5a0) 0
+ primary-for QStateMachine::WrappedEvent (0x0x7f64e995ea28)
+
+Vtable for QStateMachine
+QStateMachine::_ZTV13QStateMachine: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStateMachine)
+16 (int (*)(...))QStateMachine::metaObject
+24 (int (*)(...))QStateMachine::qt_metacast
+32 (int (*)(...))QStateMachine::qt_metacall
+40 (int (*)(...))QStateMachine::~QStateMachine
+48 (int (*)(...))QStateMachine::~QStateMachine
+56 (int (*)(...))QStateMachine::event
+64 (int (*)(...))QStateMachine::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStateMachine::onEntry
+120 (int (*)(...))QStateMachine::onExit
+128 (int (*)(...))QStateMachine::beginSelectTransitions
+136 (int (*)(...))QStateMachine::endSelectTransitions
+144 (int (*)(...))QStateMachine::beginMicrostep
+152 (int (*)(...))QStateMachine::endMicrostep
+
+Class QStateMachine
+ size=16 align=8
+ base size=16 base align=8
+QStateMachine (0x0x7f64e995e888) 0
+ vptr=((& QStateMachine::_ZTV13QStateMachine) + 16u)
+ QState (0x0x7f64e995e8f0) 0
+ primary-for QStateMachine (0x0x7f64e995e888)
+ QAbstractState (0x0x7f64e995e958) 0
+ primary-for QState (0x0x7f64e995e8f0)
+ QObject (0x0x7f64e99cf480) 0
+ primary-for QAbstractState (0x0x7f64e995e958)
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f64e99cf600) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f64e96c5540) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f64e974a900) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 48u 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 (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QStringListModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStringListModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QStringListModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStringListModel::flags
+328 (int (*)(...))QStringListModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStringListModel
+ size=24 align=8
+ base size=24 base align=8
+QStringListModel (0x0x7f64e974fa28) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16u)
+ QAbstractListModel (0x0x7f64e974fa90) 0
+ primary-for QStringListModel (0x0x7f64e974fa28)
+ QAbstractItemModel (0x0x7f64e974faf8) 0
+ primary-for QAbstractListModel (0x0x7f64e974fa90)
+ QObject (0x0x7f64e974a8a0) 0
+ primary-for QAbstractItemModel (0x0x7f64e974faf8)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f64e974a960) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f64e974aa20) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f64e974ab40) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QTemporaryFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f64e974fb60) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16u)
+ QFile (0x0x7f64e974fbc8) 0
+ primary-for QTemporaryFile (0x0x7f64e974fb60)
+ QFileDevice (0x0x7f64e974fc30) 0
+ primary-for QFile (0x0x7f64e974fbc8)
+ QIODevice (0x0x7f64e974fc98) 0
+ primary-for QFileDevice (0x0x7f64e974fc30)
+ QObject (0x0x7f64e974aae0) 0
+ primary-for QIODevice (0x0x7f64e974fc98)
+
+Class QTextBoundaryFinder
+ size=48 align=8
+ base size=48 base align=8
+QTextBoundaryFinder (0x0x7f64e974aba0) 0
+
+Class QTextCodec::ConverterState
+ size=32 align=8
+ base size=32 base align=8
+QTextCodec::ConverterState (0x0x7f64e974ade0) 0
+
+Vtable for QTextCodec
+QTextCodec::_ZTV10QTextCodec: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextCodec)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))QTextCodec::aliases
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 0u
+64 0u
+
+Class QTextCodec
+ size=8 align=8
+ base size=8 base align=8
+QTextCodec (0x0x7f64e974ad80) 0 nearly-empty
+ vptr=((& QTextCodec::_ZTV10QTextCodec) + 16u)
+
+Class QTextEncoder
+ size=40 align=8
+ base size=40 base align=8
+QTextEncoder (0x0x7f64e9836000) 0
+
+Class QTextDecoder
+ size=40 align=8
+ base size=40 base align=8
+QTextDecoder (0x0x7f64e9836060) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f64e98360c0) 0
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f64e9836120) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f64e974fea0) 0
+ std::__mutex_base (0x0x7f64e9836180) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f64e974ff08) 0
+ std::__recursive_mutex_base (0x0x7f64e98361e0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f64e9461690) 0
+ std::__mutex_base (0x0x7f64e9836300) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f64e9836360) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f64e947b070) 0
+ std::__recursive_mutex_base (0x0x7f64e9836420) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f64e9836480) 0 empty
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f64e98364e0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f64e9836540) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f64e98365a0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f64e98367e0) 0
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5u 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 (0x0x7f64e94c8068) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16u)
+ std::exception (0x0x7f64e98368a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f64e94c8068)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5u 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 (0x0x7f64e94c80d0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16u)
+ std::exception (0x0x7f64e9836960) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f64e94c80d0)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5u 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 (0x0x7f64e94c8138) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16u)
+ std::exception (0x0x7f64e9836a20) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f64e94c8138)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5u 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 (0x0x7f64e94c8208) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16u)
+ std::exception (0x0x7f64e9836ae0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f64e94c8208)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f64e9836ba0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f64e9836c00) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f64e9836c60) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f64e9836cc0) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5u 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 (0x0x7f64e94c84e0) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16u)
+ std::exception (0x0x7f64e958a060) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f64e94c84e0)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f64e958a8a0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f64e93060c0) 0
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f64e93062a0) 0
+
+Vtable for std::thread::_Impl_base
+std::thread::_Impl_base::_ZTVNSt6thread10_Impl_baseE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread10_Impl_baseE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_Impl_base
+ size=24 align=8
+ base size=24 base align=8
+std::thread::_Impl_base (0x0x7f64e9306300) 0
+ vptr=((& std::thread::_Impl_base::_ZTVNSt6thread10_Impl_baseE) + 16u)
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f64e9306240) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f64e9082f00) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f64e90e4000) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f64e90e4060) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f64e916f6c0) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5u 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 (0x0x7f64e9170820) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16u)
+ std::logic_error (0x0x7f64e9170888) 0
+ primary-for std::future_error (0x0x7f64e9170820)
+ std::exception (0x0x7f64e916f7e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f64e9170888)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f64e916f900) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0u
+32 0u
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f64e916f8a0) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16u)
+
+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 (0x0x7f64e8e28e40) 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 (0x0x7f64e8e2be38) 0
+ std::__at_thread_exit_elt (0x0x7f64e8e28f00) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6u 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 (0x0x7f64e916fa80) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16u)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f64e916f840) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6u 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 (0x0x7f64e8c25a28) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16u)
+ std::__future_base::_State_baseV2 (0x0x7f64e8c11de0) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f64e8c25a28)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f64e8880540) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15u 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 (0x0x7f64e88864e0) 0
+ vptr=((& QThread::_ZTV7QThread) + 16u)
+ QObject (0x0x7f64e88804e0) 0
+ primary-for QThread (0x0x7f64e88864e0)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f64e8880660) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14u 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 (0x0x7f64e8886548) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16u)
+ QObject (0x0x7f64e8880600) 0
+ primary-for QThreadPool (0x0x7f64e8886548)
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f64e88806c0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f64e88807e0) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15u 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 (0x0x7f64e88865b0) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16u)
+ QObject (0x0x7f64e8880780) 0
+ primary-for QTimeLine (0x0x7f64e88865b0)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f64e88808a0) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14u 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=32 align=8
+ base size=29 base align=8
+QTimer (0x0x7f64e8886618) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16u)
+ QObject (0x0x7f64e8880840) 0
+ primary-for QTimer (0x0x7f64e8886618)
+
+Class QTimeZone::OffsetData
+ size=32 align=8
+ base size=28 base align=8
+QTimeZone::OffsetData (0x0x7f64e8880f60) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f64e8880f00) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f64e895b540) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16u 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 (0x0x7f64e8978068) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16u)
+ QObject (0x0x7f64e895b4e0) 0
+ primary-for QTranslator (0x0x7f64e8978068)
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f64e895b660) 0
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f64e867dd20) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f64e871f3c0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f64e871f9c0) 0
+
+Class QXmlStreamStringRef
+ size=16 align=8
+ base size=16 base align=8
+QXmlStreamStringRef (0x0x7f64e871fa20) 0
+
+Class QXmlStreamAttribute
+ size=80 align=8
+ base size=73 base align=8
+QXmlStreamAttribute (0x0x7f64e871fcc0) 0
+
+Class QXmlStreamAttributes
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamAttributes (0x0x7f64e874faf8) 0
+ QVector<QXmlStreamAttribute> (0x0x7f64e87ca0c0) 0
+
+Class QXmlStreamNamespaceDeclaration
+ size=40 align=8
+ base size=40 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f64e87ca120) 0
+
+Class QXmlStreamNotationDeclaration
+ size=56 align=8
+ base size=56 base align=8
+QXmlStreamNotationDeclaration (0x0x7f64e87ca3c0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=88 align=8
+ base size=88 base align=8
+QXmlStreamEntityDeclaration (0x0x7f64e87ca660) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6u 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 (0x0x7f64e87ca900) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16u)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f64e87ca960) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f64e84c43c0) 0
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f64e84c44e0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f64e84c4780) 0
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f64e85cc180) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f64e85cc120) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f64e826c4e0) 0
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f64e831aa20) 0
+
+Class QTouchDevice
+ size=8 align=8
+ base size=8 base align=8
+QTouchDevice (0x0x7f64e831acc0) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+
+Class QInputEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputEvent (0x0x7f64e83218f0) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16u)
+ QEvent (0x0x7f64e831aea0) 0
+ primary-for QInputEvent (0x0x7f64e83218f0)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+
+Class QEnterEvent
+ size=72 align=8
+ base size=72 base align=8
+QEnterEvent (0x0x7f64e8321958) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16u)
+ QEvent (0x0x7f64e831af00) 0
+ primary-for QEnterEvent (0x0x7f64e8321958)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+
+Class QMouseEvent
+ size=104 align=8
+ base size=100 base align=8
+QMouseEvent (0x0x7f64e83219c0) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16u)
+ QInputEvent (0x0x7f64e8321a28) 0
+ primary-for QMouseEvent (0x0x7f64e83219c0)
+ QEvent (0x0x7f64e831af60) 0
+ primary-for QInputEvent (0x0x7f64e8321a28)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+
+Class QHoverEvent
+ size=64 align=8
+ base size=64 base align=8
+QHoverEvent (0x0x7f64e8321a90) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16u)
+ QInputEvent (0x0x7f64e8321af8) 0
+ primary-for QHoverEvent (0x0x7f64e8321a90)
+ QEvent (0x0x7f64e83eb000) 0
+ primary-for QInputEvent (0x0x7f64e8321af8)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f64e8321b60) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16u)
+ QInputEvent (0x0x7f64e8321bc8) 0
+ primary-for QWheelEvent (0x0x7f64e8321b60)
+ QEvent (0x0x7f64e83eb060) 0
+ primary-for QInputEvent (0x0x7f64e8321bc8)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+
+Class QTabletEvent
+ size=128 align=8
+ base size=128 base align=8
+QTabletEvent (0x0x7f64e8321c30) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16u)
+ QInputEvent (0x0x7f64e8321c98) 0
+ primary-for QTabletEvent (0x0x7f64e8321c30)
+ QEvent (0x0x7f64e83eb0c0) 0
+ primary-for QInputEvent (0x0x7f64e8321c98)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f64e8321d00) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16u)
+ QInputEvent (0x0x7f64e8321d68) 0
+ primary-for QNativeGestureEvent (0x0x7f64e8321d00)
+ QEvent (0x0x7f64e83eb120) 0
+ primary-for QInputEvent (0x0x7f64e8321d68)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+
+Class QKeyEvent
+ size=64 align=8
+ base size=59 base align=8
+QKeyEvent (0x0x7f64e8321dd0) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16u)
+ QInputEvent (0x0x7f64e8321e38) 0
+ primary-for QKeyEvent (0x0x7f64e8321dd0)
+ QEvent (0x0x7f64e83eb180) 0
+ primary-for QInputEvent (0x0x7f64e8321e38)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+
+Class QFocusEvent
+ size=24 align=8
+ base size=24 base align=8
+QFocusEvent (0x0x7f64e8321ea0) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16u)
+ QEvent (0x0x7f64e83eb1e0) 0
+ primary-for QFocusEvent (0x0x7f64e8321ea0)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+
+Class QPaintEvent
+ size=56 align=8
+ base size=49 base align=8
+QPaintEvent (0x0x7f64e8321f08) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16u)
+ QEvent (0x0x7f64e83eb240) 0
+ primary-for QPaintEvent (0x0x7f64e8321f08)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+
+Class QMoveEvent
+ size=40 align=8
+ base size=36 base align=8
+QMoveEvent (0x0x7f64e8321f70) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16u)
+ QEvent (0x0x7f64e83eb2a0) 0
+ primary-for QMoveEvent (0x0x7f64e8321f70)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+
+Class QExposeEvent
+ size=32 align=8
+ base size=32 base align=8
+QExposeEvent (0x0x7f64e8064000) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16u)
+ QEvent (0x0x7f64e83eb300) 0
+ primary-for QExposeEvent (0x0x7f64e8064000)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=24 base align=8
+QPlatformSurfaceEvent (0x0x7f64e8064068) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16u)
+ QEvent (0x0x7f64e83eb360) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f64e8064068)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+
+Class QResizeEvent
+ size=40 align=8
+ base size=36 base align=8
+QResizeEvent (0x0x7f64e80640d0) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16u)
+ QEvent (0x0x7f64e83eb3c0) 0
+ primary-for QResizeEvent (0x0x7f64e80640d0)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+
+Class QCloseEvent
+ size=24 align=8
+ base size=20 base align=8
+QCloseEvent (0x0x7f64e8064138) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16u)
+ QEvent (0x0x7f64e83eb420) 0
+ primary-for QCloseEvent (0x0x7f64e8064138)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+
+Class QIconDragEvent
+ size=24 align=8
+ base size=20 base align=8
+QIconDragEvent (0x0x7f64e80641a0) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16u)
+ QEvent (0x0x7f64e83eb480) 0
+ primary-for QIconDragEvent (0x0x7f64e80641a0)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+
+Class QShowEvent
+ size=24 align=8
+ base size=20 base align=8
+QShowEvent (0x0x7f64e8064208) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16u)
+ QEvent (0x0x7f64e83eb4e0) 0
+ primary-for QShowEvent (0x0x7f64e8064208)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+
+Class QHideEvent
+ size=24 align=8
+ base size=20 base align=8
+QHideEvent (0x0x7f64e8064270) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16u)
+ QEvent (0x0x7f64e83eb540) 0
+ primary-for QHideEvent (0x0x7f64e8064270)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+
+Class QContextMenuEvent
+ size=56 align=8
+ base size=49 base align=8
+QContextMenuEvent (0x0x7f64e80642d8) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16u)
+ QInputEvent (0x0x7f64e8064340) 0
+ primary-for QContextMenuEvent (0x0x7f64e80642d8)
+ QEvent (0x0x7f64e83eb5a0) 0
+ primary-for QInputEvent (0x0x7f64e8064340)
+
+Class QInputMethodEvent::Attribute
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodEvent::Attribute (0x0x7f64e83eb660) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+
+Class QInputMethodEvent
+ size=56 align=8
+ base size=56 base align=8
+QInputMethodEvent (0x0x7f64e80643a8) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16u)
+ QEvent (0x0x7f64e83eb600) 0
+ primary-for QInputMethodEvent (0x0x7f64e80643a8)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=24 align=8
+ base size=24 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f64e83ebae0) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+
+Class QInputMethodQueryEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodQueryEvent (0x0x7f64e80646e8) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16u)
+ QEvent (0x0x7f64e83eba80) 0
+ primary-for QInputMethodQueryEvent (0x0x7f64e80646e8)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+
+Class QDropEvent
+ size=72 align=8
+ base size=72 base align=8
+QDropEvent (0x0x7f64e80649c0) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16u)
+ QEvent (0x0x7f64e83ebe40) 0
+ primary-for QDropEvent (0x0x7f64e80649c0)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+
+Class QDragMoveEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragMoveEvent (0x0x7f64e8064a28) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16u)
+ QDropEvent (0x0x7f64e8064a90) 0
+ primary-for QDragMoveEvent (0x0x7f64e8064a28)
+ QEvent (0x0x7f64e83ebea0) 0
+ primary-for QDropEvent (0x0x7f64e8064a90)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+
+Class QDragEnterEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragEnterEvent (0x0x7f64e8064af8) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16u)
+ QDragMoveEvent (0x0x7f64e8064b60) 0
+ primary-for QDragEnterEvent (0x0x7f64e8064af8)
+ QDropEvent (0x0x7f64e8064bc8) 0
+ primary-for QDragMoveEvent (0x0x7f64e8064b60)
+ QEvent (0x0x7f64e83ebf00) 0
+ primary-for QDropEvent (0x0x7f64e8064bc8)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+
+Class QDragLeaveEvent
+ size=24 align=8
+ base size=20 base align=8
+QDragLeaveEvent (0x0x7f64e8064c30) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16u)
+ QEvent (0x0x7f64e83ebf60) 0
+ primary-for QDragLeaveEvent (0x0x7f64e8064c30)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+
+Class QHelpEvent
+ size=40 align=8
+ base size=36 base align=8
+QHelpEvent (0x0x7f64e8064c98) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16u)
+ QEvent (0x0x7f64e8132000) 0
+ primary-for QHelpEvent (0x0x7f64e8064c98)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+
+Class QStatusTipEvent
+ size=32 align=8
+ base size=32 base align=8
+QStatusTipEvent (0x0x7f64e8064d00) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16u)
+ QEvent (0x0x7f64e8132060) 0
+ primary-for QStatusTipEvent (0x0x7f64e8064d00)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+
+Class QWhatsThisClickedEvent
+ size=32 align=8
+ base size=32 base align=8
+QWhatsThisClickedEvent (0x0x7f64e8064d68) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16u)
+ QEvent (0x0x7f64e81320c0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f64e8064d68)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+
+Class QActionEvent
+ size=40 align=8
+ base size=40 base align=8
+QActionEvent (0x0x7f64e8064dd0) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16u)
+ QEvent (0x0x7f64e8132120) 0
+ primary-for QActionEvent (0x0x7f64e8064dd0)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+
+Class QFileOpenEvent
+ size=40 align=8
+ base size=40 base align=8
+QFileOpenEvent (0x0x7f64e8064e38) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16u)
+ QEvent (0x0x7f64e8132180) 0
+ primary-for QFileOpenEvent (0x0x7f64e8064e38)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QToolBarChangeEvent (0x0x7f64e8064ea0) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16u)
+ QEvent (0x0x7f64e81321e0) 0
+ primary-for QToolBarChangeEvent (0x0x7f64e8064ea0)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+
+Class QShortcutEvent
+ size=40 align=8
+ base size=40 base align=8
+QShortcutEvent (0x0x7f64e8064f08) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16u)
+ QEvent (0x0x7f64e8132240) 0
+ primary-for QShortcutEvent (0x0x7f64e8064f08)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+
+Class QWindowStateChangeEvent
+ size=32 align=8
+ base size=25 base align=8
+QWindowStateChangeEvent (0x0x7f64e8064f70) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16u)
+ QEvent (0x0x7f64e81322a0) 0
+ primary-for QWindowStateChangeEvent (0x0x7f64e8064f70)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f64e8132300) 0
+
+Class QTouchEvent::TouchPoint
+ size=8 align=8
+ base size=8 base align=8
+QTouchEvent::TouchPoint (0x0x7f64e81329c0) 0
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+
+Class QTouchEvent
+ size=72 align=8
+ base size=72 base align=8
+QTouchEvent (0x0x7f64e8167618) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16u)
+ QInputEvent (0x0x7f64e8167680) 0
+ primary-for QTouchEvent (0x0x7f64e8167618)
+ QEvent (0x0x7f64e8132960) 0
+ primary-for QInputEvent (0x0x7f64e8167680)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+
+Class QScrollPrepareEvent
+ size=112 align=8
+ base size=112 base align=8
+QScrollPrepareEvent (0x0x7f64e7d2bea0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16u)
+ QEvent (0x0x7f64e7d59060) 0
+ primary-for QScrollPrepareEvent (0x0x7f64e7d2bea0)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+
+Class QScrollEvent
+ size=64 align=8
+ base size=60 base align=8
+QScrollEvent (0x0x7f64e7d2bf08) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16u)
+ QEvent (0x0x7f64e7d590c0) 0
+ primary-for QScrollEvent (0x0x7f64e7d2bf08)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+
+Class QScreenOrientationChangeEvent
+ size=40 align=8
+ base size=36 base align=8
+QScreenOrientationChangeEvent (0x0x7f64e7d2bf70) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16u)
+ QEvent (0x0x7f64e7d59120) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f64e7d2bf70)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=24 base align=8
+QApplicationStateChangeEvent (0x0x7f64e7d89000) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16u)
+ QEvent (0x0x7f64e7d59180) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f64e7d89000)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f64e7d591e0) 0
+
+Class QPolygon
+ size=8 align=8
+ base size=8 base align=8
+QPolygon (0x0x7f64e7d89d68) 0
+ QVector<QPoint> (0x0x7f64e7d59ea0) 0
+
+Class QPolygonF
+ size=8 align=8
+ base size=8 base align=8
+QPolygonF (0x0x7f64e7e5d138) 0
+ QVector<QPointF> (0x0x7f64e7e50360) 0
+
+Class QMatrix
+ size=48 align=8
+ base size=48 base align=8
+QMatrix (0x0x7f64e7e50720) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f64e7e50a20) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f64e7e509c0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f64e7b60420) 0
+
+Class QTransform
+ size=88 align=8
+ base size=88 base align=8
+QTransform (0x0x7f64e7b60540) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0u
+24 0u
+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=24 align=8
+ base size=24 base align=8
+QPaintDevice (0x0x7f64e7b60c60) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16u)
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f64e7b60cc0) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10u 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=32 align=8
+ base size=32 base align=8
+QImage (0x0x7f64e7cb6000) 0
+ vptr=((& QImage::_ZTV6QImage) + 16u)
+ QPaintDevice (0x0x7f64e7c87780) 0
+ primary-for QImage (0x0x7f64e7cb6000)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10u 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=32 align=8
+ base size=32 base align=8
+QPixmap (0x0x7f64e795fb60) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16u)
+ QPaintDevice (0x0x7f64e7960720) 0
+ primary-for QPixmap (0x0x7f64e795fb60)
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f64e7960a20) 0
+
+Class QBrushData
+ size=112 align=8
+ base size=112 base align=8
+QBrushData (0x0x7f64e79f91e0) 0
+
+Class QGradient
+ size=64 align=8
+ base size=64 base align=8
+QGradient (0x0x7f64e79f9240) 0
+
+Class QLinearGradient
+ size=64 align=8
+ base size=64 base align=8
+QLinearGradient (0x0x7f64e79f44e0) 0
+ QGradient (0x0x7f64e79f94e0) 0
+
+Class QRadialGradient
+ size=64 align=8
+ base size=64 base align=8
+QRadialGradient (0x0x7f64e79f4548) 0
+ QGradient (0x0x7f64e79f9540) 0
+
+Class QConicalGradient
+ size=64 align=8
+ base size=64 base align=8
+QConicalGradient (0x0x7f64e79f45b0) 0
+ QGradient (0x0x7f64e79f95a0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f64e79f9600) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f64e7ae0840) 0
+
+Class QTextOption
+ size=32 align=8
+ base size=32 base align=8
+QTextOption (0x0x7f64e7ae07e0) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f64e7763000) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f64e7763720) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f64e77eb548) 0
+ QTextFormat (0x0x7f64e77ea5a0) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f64e77eb750) 0
+ QTextFormat (0x0x7f64e77ea840) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f64e77eb9c0) 0
+ QTextFormat (0x0x7f64e77eaae0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f64e77ebbc8) 0
+ QTextCharFormat (0x0x7f64e77ebc30) 0
+ QTextFormat (0x0x7f64e77ead80) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f64e77ebe38) 0
+ QTextFormat (0x0x7f64e790b060) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f64e7540000) 0
+ QTextFrameFormat (0x0x7f64e7540068) 0
+ QTextFormat (0x0x7f64e790b300) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f64e7540270) 0
+ QTextCharFormat (0x0x7f64e75402d8) 0
+ QTextFormat (0x0x7f64e790b600) 0
+
+Class QFontDatabase
+ size=8 align=8
+ base size=8 base align=8
+QFontDatabase (0x0x7f64e790b8a0) 0
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f64e790b900) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f64e790bde0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f64e7607120) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f64e7607420) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f64e76074e0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f64e7607480) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f64e7607f00) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6u 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 (0x0x7f64e7607f60) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16u)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f64e76cc060) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17u 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 (0x0x7f64e76a4618) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16u)
+ QObject (0x0x7f64e76cc000) 0
+ primary-for QTextDocument (0x0x7f64e76a4618)
+
+Class QPalette::Data
+ size=4 align=4
+ base size=4 base align=4
+QPalette::Data (0x0x7f64e76cc2a0) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f64e76cc240) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f64e73d2360) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f64e73d23c0) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=64 align=8
+ base size=64 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f64e73d2420) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f64e73d3340) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16u)
+ QObject (0x0x7f64e73d2300) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f64e73d3340)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7f64e73d29c0) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16u)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f64e73d2ae0) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7f64e73d2b40) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16u)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f64e73d2a80) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0u
+24 0u
+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 (0x0x7f64e73d2d20) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16u)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0u
+24 0u
+32 (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 (0x0x7f64e73d2d80) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16u)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0u
+24 0u
+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 (0x0x7f64e73d2de0) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16u)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0u
+24 0u
+32 (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 (0x0x7f64e73d2e40) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16u)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0u
+24 0u
+32 (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 (0x0x7f64e73d2ea0) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16u)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0u
+24 0u
+32 (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 (0x0x7f64e73d2f00) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16u)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0u
+24 0u
+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 (0x0x7f64e73d2f60) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16u)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0u
+24 0u
+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 (0x0x7f64e74df000) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16u)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5u 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 (0x0x7f64e74df060) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16u)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5u 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 (0x0x7f64e73d3d68) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7f64e74df5a0) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f64e73d3d68)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5u 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 (0x0x7f64e73d3dd0) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16u)
+ QAccessibleEvent (0x0x7f64e74df600) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f64e73d3dd0)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5u 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 (0x0x7f64e73d3e38) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7f64e73d3ea0) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f64e73d3e38)
+ QAccessibleEvent (0x0x7f64e74df660) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f64e73d3ea0)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTextInsertEvent (0x0x7f64e73d3f08) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7f64e73d3f70) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f64e73d3f08)
+ QAccessibleEvent (0x0x7f64e74df6c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f64e73d3f70)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTextRemoveEvent (0x0x7f64e7170000) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7f64e7170068) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f64e7170000)
+ QAccessibleEvent (0x0x7f64e74df720) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f64e7170068)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=56 align=8
+ base size=56 base align=8
+QAccessibleTextUpdateEvent (0x0x7f64e71700d0) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7f64e7170138) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f64e71700d0)
+ QAccessibleEvent (0x0x7f64e74df780) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f64e7170138)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleValueChangeEvent (0x0x7f64e71701a0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7f64e74df7e0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f64e71701a0)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5u 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 (0x0x7f64e7170208) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7f64e74df840) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f64e7170208)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7f64e74df900) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16u)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f64e74df9c0) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f64e7170270) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16u)
+ QObject (0x0x7f64e74df960) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f64e7170270)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0u
+24 0u
+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 (0x0x7f64e71702d8) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16u)
+ QAccessibleInterface (0x0x7f64e74dfa20) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f64e71702d8)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23u 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 (0x0x7f64e7170340) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16u)
+ QAccessibleObject (0x0x7f64e71703a8) 0
+ primary-for QAccessibleApplication (0x0x7f64e7170340)
+ QAccessibleInterface (0x0x7f64e74dfa80) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f64e71703a8)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f64e74dfb40) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f64e7170410) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16u)
+ QObject (0x0x7f64e74dfae0) 0
+ primary-for QAccessiblePlugin (0x0x7f64e7170410)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f64e74dfba0) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0u
+24 0u
+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 (0x0x7f64e74dfd80) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16u)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f64e74dff00) 0
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f64e72d4300) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f64e6f5e900) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 45u 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::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI7QWindow)
+312 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+320 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f64e6f73230) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16u)
+ QObject (0x0x7f64e6f5e840) 0
+ primary-for QWindow (0x0x7f64e6f73230)
+ QSurface (0x0x7f64e6f5e8a0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 312u)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f64e6f5ea20) 0
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10u 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=32 align=8
+ base size=32 base align=8
+QBitmap (0x0x7f64e6f70478) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16u)
+ QPixmap (0x0x7f64e6f704e0) 0
+ primary-for QBitmap (0x0x7f64e6f70478)
+ QPaintDevice (0x0x7f64e6f5eae0) 0
+ primary-for QPixmap (0x0x7f64e6f704e0)
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f64e6f5ee40) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14u 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 (0x0x7f64e6f70750) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16u)
+ QObject (0x0x7f64e6f5ede0) 0
+ primary-for QClipboard (0x0x7f64e6f70750)
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f64e6f5eea0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f64e6f5ef60) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14u 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 (0x0x7f64e6f707b8) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16u)
+ QObject (0x0x7f64e6f5ef00) 0
+ primary-for QDrag (0x0x7f64e6f707b8)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f64e7016000) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f64e70162a0) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f64e70165a0) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f64e70cbd20) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f64e70c9270) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16u)
+ QObject (0x0x7f64e70cbcc0) 0
+ primary-for QGenericPlugin (0x0x7f64e70c9270)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f64e70cbd80) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f64e70cbe40) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14u 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 (0x0x7f64e70c92d8) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16u)
+ QObject (0x0x7f64e70cbde0) 0
+ primary-for QInputMethod (0x0x7f64e70c92d8)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f64e70cbf00) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16u 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 (0x0x7f64e70c9340) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16u)
+ QCoreApplication (0x0x7f64e70c93a8) 0
+ primary-for QGuiApplication (0x0x7f64e70c9340)
+ QObject (0x0x7f64e70cbea0) 0
+ primary-for QCoreApplication (0x0x7f64e70c93a8)
+
+Class QIconEngine::AvailableSizesArgument
+ size=16 align=8
+ base size=16 base align=8
+QIconEngine::AvailableSizesArgument (0x0x7f64e6dee480) 0
+
+Class QIconEngine::ScaledPixmapArgument
+ size=56 align=8
+ base size=56 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f64e6dee600) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0u
+24 0u
+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::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f64e6dee420) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16u)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f64e6dee6c0) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f64e70c99c0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16u)
+ QObject (0x0x7f64e6dee660) 0
+ primary-for QIconEnginePlugin (0x0x7f64e70c99c0)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0u
+24 0u
+32 (int (*)(...))QImageIOHandler::name
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QImageIOHandler::write
+64 (int (*)(...))QImageIOHandler::option
+72 (int (*)(...))QImageIOHandler::setOption
+80 (int (*)(...))QImageIOHandler::supportsOption
+88 (int (*)(...))QImageIOHandler::jumpToNextImage
+96 (int (*)(...))QImageIOHandler::jumpToImage
+104 (int (*)(...))QImageIOHandler::loopCount
+112 (int (*)(...))QImageIOHandler::imageCount
+120 (int (*)(...))QImageIOHandler::nextImageDelay
+128 (int (*)(...))QImageIOHandler::currentImageNumber
+136 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f64e6dee720) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16u)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f64e6dee8a0) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f64e70c9a28) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16u)
+ QObject (0x0x7f64e6dee840) 0
+ primary-for QImageIOPlugin (0x0x7f64e70c9a28)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f64e6deea80) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f64e6deeae0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f64e6deeb40) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f64e6deede0) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f64e6b250c0) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f64e6b256c0) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f64e6b25e40) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14u 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 (0x0x7f64e6b7dc30) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16u)
+ QObject (0x0x7f64e6b25de0) 0
+ primary-for QMovie (0x0x7f64e6b7dc30)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f64e6b25f60) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26u 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 (0x0x7f64e6ccbd20) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16u)
+ QObject (0x0x7f64e6b25ea0) 0
+ primary-for QOffscreenSurface (0x0x7f64e6ccbd20)
+ QSurface (0x0x7f64e6b25f00) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160u)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f64e6a81060) 0
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f64e6a81240) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f64e669dd20) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f64e669dd80) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f64e669dde0) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5u 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 (0x0x7f64e669de40) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16u)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7f64e669df00) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f64e669eea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e669dea0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f64e66e8060) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f64e669ef08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8000) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f64e66e8180) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f64e669ef70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8120) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f64e66e82a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f64e66fd000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8240) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f64e66e8420) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f64e66fd068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e83c0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f64e66e8540) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f64e66fd0d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e84e0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f64e66e8660) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f64e66fd138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8600) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f64e66e8780) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f64e66fd1a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8720) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f64e66e88a0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f64e66fd208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8840) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f64e66e89c0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f64e66fd270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8960) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f64e66e8ae0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f64e66fd2d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8a80) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f64e66e8c00) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f64e66fd340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8ba0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f64e66e8d20) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f64e66fd3a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8cc0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f64e66e8e40) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f64e66fd410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8de0) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f64e66e8f60) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f64e66fd478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e66e8f00) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f64e63d40c0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f64e66fd4e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4060) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f64e63d41e0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f64e66fd548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4180) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f64e63d4360) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f64e66fd5b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4300) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f64e63d4480) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f64e66fd618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4420) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f64e63d45a0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f64e66fd680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4540) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f64e63d46c0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f64e66fd6e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4660) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f64e63d47e0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f64e66fd750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4780) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f64e63d4900) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f64e66fd7b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d48a0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f64e63d4a20) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f64e66fd820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d49c0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f64e63d4b40) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f64e66fd888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4ae0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f64e63d4c60) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f64e66fd8f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4c00) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f64e63d4d80) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f64e66fd958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f64e63d4d20) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f64e63d4e40) 0
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f64e64fb840) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14u 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 (0x0x7f64e650a3a8) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16u)
+ QObject (0x0x7f64e64fb7e0) 0
+ primary-for QOpenGLContextGroup (0x0x7f64e650a3a8)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f64e64fb900) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14u 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 (0x0x7f64e650a410) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16u)
+ QObject (0x0x7f64e64fb8a0) 0
+ primary-for QOpenGLContext (0x0x7f64e650a410)
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f64e64fb960) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f64e61b7180) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14u 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 (0x0x7f64e650a888) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16u)
+ QObject (0x0x7f64e61b7120) 0
+ primary-for QOpenGLDebugLogger (0x0x7f64e650a888)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f64e61b7300) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f64e61b7540) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f64e61b74e0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f64e650aaf8) 0
+ QOpenGLFunctions (0x0x7f64e5f6ec60) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f64e5f6ed20) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f64e650ab60) 0
+ QOpenGLFunctionsPrivate (0x0x7f64e5f6ecc0) 0
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4u 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 (0x0x7f64e5dd7420) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16u)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f64e5dd7540) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11u 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=32 align=8
+ base size=32 base align=8
+QOpenGLPaintDevice (0x0x7f64e650ae38) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16u)
+ QPaintDevice (0x0x7f64e5dd75a0) 0
+ primary-for QOpenGLPaintDevice (0x0x7f64e650ae38)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f64e5dd76c0) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f64e5dd7a20) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14u 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 (0x0x7f64e5e41068) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16u)
+ QObject (0x0x7f64e5dd79c0) 0
+ primary-for QOpenGLShader (0x0x7f64e5e41068)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f64e5dd7c60) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15u 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 (0x0x7f64e5e411a0) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16u)
+ QObject (0x0x7f64e5dd7c00) 0
+ primary-for QOpenGLShaderProgram (0x0x7f64e5e411a0)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f64e5dd7cc0) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f64e5dd7f60) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f64e5b81120) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14u 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 (0x0x7f64e5e412d8) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16u)
+ QObject (0x0x7f64e5b810c0) 0
+ primary-for QOpenGLTimerQuery (0x0x7f64e5e412d8)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f64e5b811e0) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14u 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 (0x0x7f64e5e41340) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16u)
+ QObject (0x0x7f64e5b81180) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f64e5e41340)
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f64e5b812a0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f64e5b81300) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14u 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 (0x0x7f64e5e413a8) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16u)
+ QObject (0x0x7f64e5b81240) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f64e5e413a8)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f64e5b81480) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 58u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QPaintDeviceWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))-16
+328 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+336 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+384 (int (*)(...))-40
+392 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+400 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+416 (int (*)(...))QPaintDevice::devType
+424 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+440 (int (*)(...))QPaintDevice::initPainter
+448 (int (*)(...))QPaintDevice::redirected
+456 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=64 align=8
+ base size=64 base align=8
+QPaintDeviceWindow (0x0x7f64e5baabd0) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16u)
+ QWindow (0x0x7f64e5baac40) 0
+ primary-for QPaintDeviceWindow (0x0x7f64e5baabd0)
+ QObject (0x0x7f64e5b81360) 0
+ primary-for QWindow (0x0x7f64e5baac40)
+ QSurface (0x0x7f64e5b813c0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 336u)
+ QPaintDevice (0x0x7f64e5b81420) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 400u)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f64e5b81600) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 64u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QOpenGLWindow::paintEvent
+304 (int (*)(...))QOpenGLWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QOpenGLWindow::initializeGL
+328 (int (*)(...))QOpenGLWindow::resizeGL
+336 (int (*)(...))QOpenGLWindow::paintGL
+344 (int (*)(...))QOpenGLWindow::paintUnderGL
+352 (int (*)(...))QOpenGLWindow::paintOverGL
+360 (int (*)(...))QOpenGLWindow::redirected
+368 (int (*)(...))-16
+376 (int (*)(...))(& _ZTI13QOpenGLWindow)
+384 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+400 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+432 (int (*)(...))-40
+440 (int (*)(...))(& _ZTI13QOpenGLWindow)
+448 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+464 (int (*)(...))QPaintDevice::devType
+472 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+480 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QPaintDevice::initPainter
+496 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+504 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLWindow (0x0x7f64e5e41478) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16u)
+ QPaintDeviceWindow (0x0x7f64e5bd5000) 0
+ primary-for QOpenGLWindow (0x0x7f64e5e41478)
+ QWindow (0x0x7f64e5bd5070) 0
+ primary-for QPaintDeviceWindow (0x0x7f64e5bd5000)
+ QObject (0x0x7f64e5b814e0) 0
+ primary-for QWindow (0x0x7f64e5bd5070)
+ QSurface (0x0x7f64e5b81540) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 384u)
+ QPaintDevice (0x0x7f64e5b815a0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 448u)
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f64e5b81660) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f64e5c40060) 0
+
+Class QPagedPaintDevice::Margins
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice::Margins (0x0x7f64e5c40a80) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0u
+24 0u
+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::setPageSize
+96 (int (*)(...))QPagedPaintDevice::setPageSizeMM
+104 (int (*)(...))QPagedPaintDevice::setMargins
+
+Class QPagedPaintDevice
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice (0x0x7f64e5c701a0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16u)
+ QPaintDevice (0x0x7f64e5c40a20) 0
+ primary-for QPagedPaintDevice (0x0x7f64e5c701a0)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f64e5c40b40) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f64e5c40ae0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f64e5942960) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0u
+24 0u
+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
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f64e5942c00) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16u)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f64e5942ea0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f64e5af6300) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 34u 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::setPageSize
+128 (int (*)(...))QPdfWriter::setPageSizeMM
+136 (int (*)(...))QPdfWriter::setMargins
+144 (int (*)(...))QPdfWriter::paintEngine
+152 (int (*)(...))QPdfWriter::metric
+160 (int (*)(...))-16
+168 (int (*)(...))(& _ZTI10QPdfWriter)
+176 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+184 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+192 (int (*)(...))QPaintDevice::devType
+200 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+208 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+216 (int (*)(...))QPaintDevice::initPainter
+224 (int (*)(...))QPaintDevice::redirected
+232 (int (*)(...))QPaintDevice::sharedPainter
+240 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+248 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter11setPageSizeEN17QPagedPaintDevice8PageSizeE
+256 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter13setPageSizeMMERK6QSizeF
+264 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter10setMarginsERKN17QPagedPaintDevice7MarginsE
+
+Class QPdfWriter
+ size=48 align=8
+ base size=48 base align=8
+QPdfWriter (0x0x7f64e57544d0) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16u)
+ QObject (0x0x7f64e5af6240) 0
+ primary-for QPdfWriter (0x0x7f64e57544d0)
+ QPagedPaintDevice (0x0x7f64e5abc208) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 176u)
+ QPaintDevice (0x0x7f64e5af62a0) 16
+ primary-for QPagedPaintDevice (0x0x7f64e5abc208)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11u 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=32 align=8
+ base size=32 base align=8
+QPicture (0x0x7f64e5abc270) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16u)
+ QPaintDevice (0x0x7f64e5af6480) 0
+ primary-for QPicture (0x0x7f64e5abc270)
+
+Class QPictureIO
+ size=8 align=8
+ base size=8 base align=8
+QPictureIO (0x0x7f64e5af6780) 0
+
+Class QPictureFormatPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPictureFormatPlugin::QPrivateSignal (0x0x7f64e5af6840) 0 empty
+
+Vtable for QPictureFormatPlugin
+QPictureFormatPlugin::_ZTV20QPictureFormatPlugin: 17u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QPictureFormatPlugin)
+16 (int (*)(...))QPictureFormatPlugin::metaObject
+24 (int (*)(...))QPictureFormatPlugin::qt_metacast
+32 (int (*)(...))QPictureFormatPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPictureFormatPlugin::loadPicture
+120 (int (*)(...))QPictureFormatPlugin::savePicture
+128 (int (*)(...))__cxa_pure_virtual
+
+Class QPictureFormatPlugin
+ size=16 align=8
+ base size=16 base align=8
+QPictureFormatPlugin (0x0x7f64e5abc478) 0
+ vptr=((& QPictureFormatPlugin::_ZTV20QPictureFormatPlugin) + 16u)
+ QObject (0x0x7f64e5af67e0) 0
+ primary-for QPictureFormatPlugin (0x0x7f64e5abc478)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f64e5af6900) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f64e5af68a0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f64e583ca80) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 59u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QRasterWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QRasterWindow::redirected
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI13QRasterWindow)
+344 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+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 (*)(...))(& _ZTI13QRasterWindow)
+408 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=64 align=8
+ base size=64 base align=8
+QRasterWindow (0x0x7f64e583db60) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16u)
+ QPaintDeviceWindow (0x0x7f64e584b2a0) 0
+ primary-for QRasterWindow (0x0x7f64e583db60)
+ QWindow (0x0x7f64e584b310) 0
+ primary-for QPaintDeviceWindow (0x0x7f64e584b2a0)
+ QObject (0x0x7f64e583c960) 0
+ primary-for QWindow (0x0x7f64e584b310)
+ QSurface (0x0x7f64e583c9c0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 344u)
+ QPaintDevice (0x0x7f64e583ca20) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 408u)
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f64e583cb40) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14u 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 (0x0x7f64e583dc30) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16u)
+ QObject (0x0x7f64e583cae0) 0
+ primary-for QScreen (0x0x7f64e583dc30)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f64e583cc00) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14u 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 (0x0x7f64e583dc98) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16u)
+ QObject (0x0x7f64e583cba0) 0
+ primary-for QSessionManager (0x0x7f64e583dc98)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::setData
+48 (int (*)(...))QStandardItem::clone
+56 (int (*)(...))QStandardItem::type
+64 (int (*)(...))QStandardItem::read
+72 (int (*)(...))QStandardItem::write
+80 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f64e583cc60) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16u)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f64e58d63c0) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 48u 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 (*)(...))QStandardItemModel::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::mimeTypes
+216 (int (*)(...))QStandardItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QStandardItemModel::dropMimeData
+240 (int (*)(...))QStandardItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStandardItemModel::insertRows
+264 (int (*)(...))QStandardItemModel::insertColumns
+272 (int (*)(...))QStandardItemModel::removeRows
+280 (int (*)(...))QStandardItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStandardItemModel::flags
+328 (int (*)(...))QStandardItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f64e58d8340) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16u)
+ QAbstractItemModel (0x0x7f64e58d83a8) 0
+ primary-for QStandardItemModel (0x0x7f64e58d8340)
+ QObject (0x0x7f64e58d6360) 0
+ primary-for QAbstractItemModel (0x0x7f64e58d83a8)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f64e58d6420) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f64e58d68a0) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14u 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 (0x0x7f64e58d85b0) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16u)
+ QObject (0x0x7f64e58d6840) 0
+ primary-for QStyleHints (0x0x7f64e58d85b0)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f64e58d6960) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14u 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 (0x0x7f64e58d8618) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16u)
+ QObject (0x0x7f64e58d6900) 0
+ primary-for QTextObject (0x0x7f64e58d8618)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f64e58d6a20) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17u 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 (0x0x7f64e58d8680) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16u)
+ QTextObject (0x0x7f64e58d86e8) 0
+ primary-for QTextBlockGroup (0x0x7f64e58d8680)
+ QObject (0x0x7f64e58d69c0) 0
+ primary-for QTextObject (0x0x7f64e58d86e8)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4u 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 (0x0x7f64e58d6a80) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16u)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f64e58d6b40) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f64e58d6ba0) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14u 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 (0x0x7f64e58d8750) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16u)
+ QTextObject (0x0x7f64e58d87b8) 0
+ primary-for QTextFrame (0x0x7f64e58d8750)
+ QObject (0x0x7f64e58d6ae0) 0
+ primary-for QTextObject (0x0x7f64e58d87b8)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4u 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 (0x0x7f64e58d6e40) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16u)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f64e58d6f00) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f64e58d6ea0) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f64e5645420) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f64e5645720) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f64e58d8ea0) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16u)
+ QObject (0x0x7f64e56456c0) 0
+ primary-for QSyntaxHighlighter (0x0x7f64e58d8ea0)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f64e5645780) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f64e56457e0) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f64e56458a0) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17u 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 (0x0x7f64e58d8f08) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16u)
+ QTextBlockGroup (0x0x7f64e58d8f70) 0
+ primary-for QTextList (0x0x7f64e58d8f08)
+ QTextObject (0x0x7f64e5686000) 0
+ primary-for QTextBlockGroup (0x0x7f64e58d8f70)
+ QObject (0x0x7f64e5645840) 0
+ primary-for QTextObject (0x0x7f64e5686000)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f64e5645900) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f64e56459c0) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14u 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 (0x0x7f64e5686068) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16u)
+ QTextFrame (0x0x7f64e56860d0) 0
+ primary-for QTextTable (0x0x7f64e5686068)
+ QTextObject (0x0x7f64e5686138) 0
+ primary-for QTextFrame (0x0x7f64e56860d0)
+ QObject (0x0x7f64e5645960) 0
+ primary-for QTextObject (0x0x7f64e5686138)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f64e5645a80) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f64e56861a0) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16u)
+ QObject (0x0x7f64e5645a20) 0
+ primary-for QValidator (0x0x7f64e56861a0)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f64e5645b40) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 17u 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
+128 (int (*)(...))QIntValidator::setRange
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f64e5686208) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16u)
+ QValidator (0x0x7f64e5686270) 0
+ primary-for QIntValidator (0x0x7f64e5686208)
+ QObject (0x0x7f64e5645ae0) 0
+ primary-for QValidator (0x0x7f64e5686270)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f64e5645c00) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 17u 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
+128 (int (*)(...))QDoubleValidator::setRange
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f64e56862d8) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16u)
+ QValidator (0x0x7f64e5686340) 0
+ primary-for QDoubleValidator (0x0x7f64e56862d8)
+ QObject (0x0x7f64e5645ba0) 0
+ primary-for QValidator (0x0x7f64e5686340)
+
+Class QRegExpValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegExpValidator::QPrivateSignal (0x0x7f64e5645d20) 0 empty
+
+Vtable for QRegExpValidator
+QRegExpValidator::_ZTV16QRegExpValidator: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QRegExpValidator)
+16 (int (*)(...))QRegExpValidator::metaObject
+24 (int (*)(...))QRegExpValidator::qt_metacast
+32 (int (*)(...))QRegExpValidator::qt_metacall
+40 (int (*)(...))QRegExpValidator::~QRegExpValidator
+48 (int (*)(...))QRegExpValidator::~QRegExpValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegExpValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegExpValidator
+ size=24 align=8
+ base size=24 base align=8
+QRegExpValidator (0x0x7f64e56863a8) 0
+ vptr=((& QRegExpValidator::_ZTV16QRegExpValidator) + 16u)
+ QValidator (0x0x7f64e5686410) 0
+ primary-for QRegExpValidator (0x0x7f64e56863a8)
+ QObject (0x0x7f64e5645cc0) 0
+ primary-for QValidator (0x0x7f64e5686410)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f64e5645de0) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16u 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 (0x0x7f64e5686478) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16u)
+ QValidator (0x0x7f64e56864e0) 0
+ primary-for QRegularExpressionValidator (0x0x7f64e5686478)
+ QObject (0x0x7f64e5645d80) 0
+ primary-for QValidator (0x0x7f64e56864e0)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f64e5645e40) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f64e53393c0) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f64e5339a80) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f64e5686d00) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16u)
+ QObject (0x0x7f64e5339a20) 0
+ primary-for QAbstractNetworkCache (0x0x7f64e5686d00)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f64e5339b40) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f64e5686d68) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16u)
+ QIODevice (0x0x7f64e5686dd0) 0
+ primary-for QAbstractSocket (0x0x7f64e5686d68)
+ QObject (0x0x7f64e5339ae0) 0
+ primary-for QIODevice (0x0x7f64e5686dd0)
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f64e542d120) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f64e542d180) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f64e542d480) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f64e542d780) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f64e542da80) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f64e542dd80) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f64e54b8120) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14u 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 (0x0x7f64e5452820) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16u)
+ QObject (0x0x7f64e54b80c0) 0
+ primary-for QDnsLookup (0x0x7f64e5452820)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f64e54b8180) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f64e54b81e0) 0
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f64e54b89c0) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f64e54b8ea0) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f64e51976c0) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f64e5197a20) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14u 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 (0x0x7f64e516ca90) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16u)
+ QObject (0x0x7f64e51979c0) 0
+ primary-for QHttpMultiPart (0x0x7f64e516ca90)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f64e5197ae0) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17u 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 (0x0x7f64e516caf8) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16u)
+ QObject (0x0x7f64e5197a80) 0
+ primary-for QLocalServer (0x0x7f64e516caf8)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f64e5197d20) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 30u 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::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f64e516cc98) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16u)
+ QIODevice (0x0x7f64e516cd00) 0
+ primary-for QLocalSocket (0x0x7f64e516cc98)
+ QObject (0x0x7f64e5197cc0) 0
+ primary-for QIODevice (0x0x7f64e516cd00)
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f64e5197de0) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f64e516cd68) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16u)
+ QAbstractSocket (0x0x7f64e516cdd0) 0
+ primary-for QTcpSocket (0x0x7f64e516cd68)
+ QIODevice (0x0x7f64e516ce38) 0
+ primary-for QAbstractSocket (0x0x7f64e516cdd0)
+ QObject (0x0x7f64e5197d80) 0
+ primary-for QIODevice (0x0x7f64e516ce38)
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f64e52ac000) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f64e52ac420) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f64e52acd80) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 41u 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::writeData
+240 (int (*)(...))QSslSocket::resume
+248 (int (*)(...))QSslSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QSslSocket::disconnectFromHost
+272 (int (*)(...))QSslSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QSslSocket::setSocketDescriptor
+296 (int (*)(...))QSslSocket::setSocketOption
+304 (int (*)(...))QSslSocket::socketOption
+312 (int (*)(...))QSslSocket::waitForConnected
+320 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f64e52d4820) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16u)
+ QTcpSocket (0x0x7f64e52d4888) 0
+ primary-for QSslSocket (0x0x7f64e52d4820)
+ QAbstractSocket (0x0x7f64e52d48f0) 0
+ primary-for QTcpSocket (0x0x7f64e52d4888)
+ QIODevice (0x0x7f64e52d4958) 0
+ primary-for QAbstractSocket (0x0x7f64e52d48f0)
+ QObject (0x0x7f64e52acd20) 0
+ primary-for QIODevice (0x0x7f64e52d4958)
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f64e52acde0) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f64e4fab600) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f64e4fabf00) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 15u 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::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f64e4fdb618) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16u)
+ QObject (0x0x7f64e4fabea0) 0
+ primary-for QNetworkAccessManager (0x0x7f64e4fdb618)
+
+Class QNetworkConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QNetworkConfiguration (0x0x7f64e4fabf60) 0
+
+Class QNetworkConfigurationManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkConfigurationManager::QPrivateSignal (0x0x7f64e5025420) 0 empty
+
+Vtable for QNetworkConfigurationManager
+QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QNetworkConfigurationManager)
+16 (int (*)(...))QNetworkConfigurationManager::metaObject
+24 (int (*)(...))QNetworkConfigurationManager::qt_metacast
+32 (int (*)(...))QNetworkConfigurationManager::qt_metacall
+40 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+48 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkConfigurationManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkConfigurationManager (0x0x7f64e4fdb820) 0
+ vptr=((& QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager) + 16u)
+ QObject (0x0x7f64e50253c0) 0
+ primary-for QNetworkConfigurationManager (0x0x7f64e4fdb820)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f64e5025780) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f64e5025f60) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20u 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 (0x0x7f64e50c7068) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16u)
+ QObject (0x0x7f64e5025f00) 0
+ primary-for QNetworkCookieJar (0x0x7f64e50c7068)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f64e50e1000) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f64e4d7e000) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23u 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 (0x0x7f64e4d5fa90) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16u)
+ QAbstractNetworkCache (0x0x7f64e4d5faf8) 0
+ primary-for QNetworkDiskCache (0x0x7f64e4d5fa90)
+ QObject (0x0x7f64e4d46f60) 0
+ primary-for QAbstractNetworkCache (0x0x7f64e4d5faf8)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f64e4d7e060) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f64e4d7e720) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f64e4d7ede0) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f64e4e4a480) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7f64e4e4ac60) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16u)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f64e4e4ae40) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 36u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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 (*)(...))QNetworkReply::writeData
+240 (int (*)(...))QNetworkReply::setReadBufferSize
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))QNetworkReply::ignoreSslErrors
+264 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+272 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f64e4e841a0) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16u)
+ QIODevice (0x0x7f64e4e84208) 0
+ primary-for QNetworkReply (0x0x7f64e4e841a0)
+ QObject (0x0x7f64e4e4ade0) 0
+ primary-for QIODevice (0x0x7f64e4e84208)
+
+Class QNetworkSession::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkSession::QPrivateSignal (0x0x7f64e4eee060) 0 empty
+
+Vtable for QNetworkSession
+QNetworkSession::_ZTV15QNetworkSession: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QNetworkSession)
+16 (int (*)(...))QNetworkSession::metaObject
+24 (int (*)(...))QNetworkSession::qt_metacast
+32 (int (*)(...))QNetworkSession::qt_metacall
+40 (int (*)(...))QNetworkSession::~QNetworkSession
+48 (int (*)(...))QNetworkSession::~QNetworkSession
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QNetworkSession::connectNotify
+104 (int (*)(...))QNetworkSession::disconnectNotify
+
+Class QNetworkSession
+ size=24 align=8
+ base size=24 base align=8
+QNetworkSession (0x0x7f64e4e84270) 0
+ vptr=((& QNetworkSession::_ZTV15QNetworkSession) + 16u)
+ QObject (0x0x7f64e4eee000) 0
+ primary-for QNetworkSession (0x0x7f64e4e84270)
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f64e4eee600) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17u 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 (0x0x7f64e4e843a8) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16u)
+ QObject (0x0x7f64e4eee5a0) 0
+ primary-for QTcpServer (0x0x7f64e4e843a8)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f64e4eee660) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f64e4eee960) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f64e4b8b180) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f64e4bf9c60) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f64e4c323c0) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f64e4c32720) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f64e4c19958) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16u)
+ QAbstractSocket (0x0x7f64e4c199c0) 0
+ primary-for QUdpSocket (0x0x7f64e4c19958)
+ QIODevice (0x0x7f64e4c19a28) 0
+ primary-for QAbstractSocket (0x0x7f64e4c199c0)
+ QObject (0x0x7f64e4c326c0) 0
+ primary-for QIODevice (0x0x7f64e4c19a28)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f64e4c32780) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f64e4c32a20) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f64e4c32ae0) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14u 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 (0x0x7f64e4c19b60) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16u)
+ QObject (0x0x7f64e4c32a80) 0
+ primary-for QJSEngine (0x0x7f64e4c19b60)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f64e4c32cc0) 0
+
+Class QQmlPrivate::RegisterType
+ size=128 align=8
+ base size=124 base align=8
+QQmlPrivate::RegisterType (0x0x7f64e49311e0) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f64e4931240) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f64e49312a0) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=64 align=8
+ base size=64 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f64e4931300) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f64e4931360) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f64e49313c0) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f64e4931420) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f64e4931480) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7f64e49314e0) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16u)
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7f64e49315a0) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16u)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f64e49316c0) 0
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7f64e4931d20) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16u)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f64e4931d80) 0
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlImageProviderBase
+ size=8 align=8
+ base size=8 base align=8
+QQmlImageProviderBase (0x0x7f64e4a4a060) 0 nearly-empty
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16u)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f64e4a4a2a0) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14u 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 (0x0x7f64e4a4c1a0) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16u)
+ QJSEngine (0x0x7f64e4a4c208) 0
+ primary-for QQmlEngine (0x0x7f64e4a4c1a0)
+ QObject (0x0x7f64e4a4a240) 0
+ primary-for QJSEngine (0x0x7f64e4a4c208)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f64e4a4a360) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14u 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 (0x0x7f64e4a4c270) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16u)
+ QQmlEngine (0x0x7f64e4a4c2d8) 0
+ primary-for QQmlApplicationEngine (0x0x7f64e4a4c270)
+ QJSEngine (0x0x7f64e4a4c340) 0
+ primary-for QQmlEngine (0x0x7f64e4a4c2d8)
+ QObject (0x0x7f64e4a4a300) 0
+ primary-for QJSEngine (0x0x7f64e4a4c340)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f64e4a4a420) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17u 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 (0x0x7f64e4a4c3a8) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16u)
+ QObject (0x0x7f64e4a4a3c0) 0
+ primary-for QQmlComponent (0x0x7f64e4a4c3a8)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f64e4a4ac60) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=24 align=8
+ base size=24 base align=8
+QQmlContext::PropertyPair (0x0x7f64e4a4acc0) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14u 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 (0x0x7f64e4a4c8f0) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16u)
+ QObject (0x0x7f64e4a4ac00) 0
+ primary-for QQmlContext (0x0x7f64e4a4c8f0)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f64e4a4ae40) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f64e472a0c0) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14u 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 (0x0x7f64e4a4c958) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16u)
+ QObject (0x0x7f64e472a060) 0
+ primary-for QQmlExpression (0x0x7f64e4a4c958)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7f64e472a120) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16u)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7f64e4a4c9c0) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16u)
+ QQmlTypesExtensionInterface (0x0x7f64e472a180) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f64e4a4c9c0)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f64e472a360) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::initializeEngine
+128 (int (*)(...))-16
+136 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+144 0u
+152 0u
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f64e4754150) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16u)
+ QObject (0x0x7f64e472a2a0) 0
+ primary-for QQmlExtensionPlugin (0x0x7f64e4754150)
+ QQmlExtensionInterface (0x0x7f64e4a4ca28) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 144u)
+ QQmlTypesExtensionInterface (0x0x7f64e472a300) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f64e4a4ca28)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f64e472a3c0) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f64e472a480) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14u 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 (0x0x7f64e4a4caf8) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16u)
+ QObject (0x0x7f64e472a420) 0
+ primary-for QQmlFileSelector (0x0x7f64e4a4caf8)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6u 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 (0x0x7f64e472a4e0) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16u)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5u 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 (0x0x7f64e472a540) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16u)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f64e4a4cb60) 0
+ QDebug (0x0x7f64e472a5a0) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7f64e480b480) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16u)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f64e480b4e0) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f64e4848060) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15u 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 (0x0x7f64e48393a8) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16u)
+ QObject (0x0x7f64e4848000) 0
+ primary-for QQmlPropertyMap (0x0x7f64e48393a8)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f64e4848120) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f64e4839410) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16u)
+ QObject (0x0x7f64e48480c0) 0
+ primary-for QQuickTransform (0x0x7f64e4839410)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f64e4848240) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f64e48482a0) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f64e4848300) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 55u 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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickItem::updatePaintNode
+376 (int (*)(...))QQuickItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI10QQuickItem)
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f64e4842cb0) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16u)
+ QObject (0x0x7f64e4848180) 0
+ primary-for QQuickItem (0x0x7f64e4842cb0)
+ QQmlParserStatus (0x0x7f64e48481e0) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 408u)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f64e4848ae0) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0u
+24 0u
+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 (0x0x7f64e4848b40) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16u)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 56u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0u
+48 0u
+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 (*)(...))QQuickItem::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickFramebufferObject::geometryChanged
+368 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+376 (int (*)(...))QQuickFramebufferObject::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+416 0u
+424 0u
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f64e4839548) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16u)
+ QQuickItem (0x0x7f64e49134d0) 0
+ primary-for QQuickFramebufferObject (0x0x7f64e4839548)
+ QObject (0x0x7f64e4848a20) 0
+ primary-for QQuickItem (0x0x7f64e49134d0)
+ QQmlParserStatus (0x0x7f64e4848a80) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 416u)
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f64e4848c00) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f64e48395b0) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16u)
+ QObject (0x0x7f64e4848ba0) 0
+ primary-for QQuickTextureFactory (0x0x7f64e48395b0)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f64e4848cc0) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f64e4839618) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16u)
+ QObject (0x0x7f64e4848c60) 0
+ primary-for QQuickImageResponse (0x0x7f64e4839618)
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+24 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageProvider (0x0x7f64e4839680) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16u)
+ QQmlImageProviderBase (0x0x7f64e4848d20) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7f64e4839680)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 0u
+24 0u
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickAsyncImageProvider (0x0x7f64e48396e8) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16u)
+ QQuickImageProvider (0x0x7f64e4839750) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f64e48396e8)
+ QQmlImageProviderBase (0x0x7f64e4848d80) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7f64e4839750)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f64e4848e40) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14u 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 (0x0x7f64e48397b8) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16u)
+ QObject (0x0x7f64e4848de0) 0
+ primary-for QQuickItemGrabResult (0x0x7f64e48397b8)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f64e4848f60) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 56u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0u
+48 0u
+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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickPaintedItem::updatePaintNode
+376 (int (*)(...))QQuickPaintedItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+416 0u
+424 0u
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f64e4839820) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16u)
+ QQuickItem (0x0x7f64e455a2a0) 0
+ primary-for QQuickPaintedItem (0x0x7f64e4839820)
+ QObject (0x0x7f64e4848ea0) 0
+ primary-for QQuickItem (0x0x7f64e455a2a0)
+ QQmlParserStatus (0x0x7f64e4848f00) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 416u)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f64e45861e0) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15u 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 (0x0x7f64e48399c0) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16u)
+ QObject (0x0x7f64e4586180) 0
+ primary-for QQuickRenderControl (0x0x7f64e48399c0)
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f64e45862a0) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14u 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 (0x0x7f64e4839a28) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16u)
+ QObject (0x0x7f64e4586240) 0
+ primary-for QQuickTextDocument (0x0x7f64e4839a28)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f64e4586600) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f64e4586660) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f64e45866c0) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f64e4586720) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f64e4586780) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4u 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 (0x0x7f64e45865a0) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16u)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6u 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=80 align=8
+ base size=80 base align=8
+QSGNode (0x0x7f64e4586c60) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16u)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6u 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=112 align=8
+ base size=112 base align=8
+QSGBasicGeometryNode (0x0x7f64e4692138) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16u)
+ QSGNode (0x0x7f64e46b7060) 0
+ primary-for QSGBasicGeometryNode (0x0x7f64e4692138)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6u 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=144 align=8
+ base size=144 base align=8
+QSGGeometryNode (0x0x7f64e46921a0) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16u)
+ QSGBasicGeometryNode (0x0x7f64e4692208) 0
+ primary-for QSGGeometryNode (0x0x7f64e46921a0)
+ QSGNode (0x0x7f64e46b70c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f64e4692208)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6u 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=152 align=8
+ base size=152 base align=8
+QSGClipNode (0x0x7f64e4692270) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16u)
+ QSGBasicGeometryNode (0x0x7f64e46922d8) 0
+ primary-for QSGClipNode (0x0x7f64e4692270)
+ QSGNode (0x0x7f64e46b7120) 0
+ primary-for QSGBasicGeometryNode (0x0x7f64e46922d8)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6u 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=216 align=8
+ base size=216 base align=8
+QSGTransformNode (0x0x7f64e4692340) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16u)
+ QSGNode (0x0x7f64e46b7180) 0
+ primary-for QSGTransformNode (0x0x7f64e4692340)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6u 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=88 align=8
+ base size=88 base align=8
+QSGRootNode (0x0x7f64e46923a8) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16u)
+ QSGNode (0x0x7f64e46b71e0) 0
+ primary-for QSGRootNode (0x0x7f64e46923a8)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6u 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=96 align=8
+ base size=96 base align=8
+QSGOpacityNode (0x0x7f64e4692548) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16u)
+ QSGNode (0x0x7f64e46b7360) 0
+ primary-for QSGOpacityNode (0x0x7f64e4692548)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14u 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 (0x0x7f64e46b73c0) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16u)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0u
+24 0u
+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 (0x0x7f64e46b7420) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16u)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f64e46b7840) 0 empty
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 45u 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickWindow::keyPressEvent
+216 (int (*)(...))QQuickWindow::keyReleaseEvent
+224 (int (*)(...))QQuickWindow::mousePressEvent
+232 (int (*)(...))QQuickWindow::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickWindow::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI12QQuickWindow)
+312 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+320 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f64e4692750) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16u)
+ QWindow (0x0x7f64e43a7930) 0
+ primary-for QQuickWindow (0x0x7f64e4692750)
+ QObject (0x0x7f64e46b7780) 0
+ primary-for QWindow (0x0x7f64e43a7930)
+ QSurface (0x0x7f64e46b77e0) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 312u)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f64e46b7c00) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 45u 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickView::keyPressEvent
+216 (int (*)(...))QQuickView::keyReleaseEvent
+224 (int (*)(...))QQuickView::mousePressEvent
+232 (int (*)(...))QQuickView::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickView::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI10QQuickView)
+312 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+320 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f64e4692888) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16u)
+ QQuickWindow (0x0x7f64e46928f0) 0
+ primary-for QQuickView (0x0x7f64e4692888)
+ QWindow (0x0x7f64e43e1bd0) 0
+ primary-for QQuickWindow (0x0x7f64e46928f0)
+ QObject (0x0x7f64e46b7b40) 0
+ primary-for QWindow (0x0x7f64e43e1bd0)
+ QSurface (0x0x7f64e46b7ba0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 312u)
+
+Class QSGAbstractRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGAbstractRenderer::QPrivateSignal (0x0x7f64e46b7cc0) 0 empty
+
+Vtable for QSGAbstractRenderer
+QSGAbstractRenderer::_ZTV19QSGAbstractRenderer: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QSGAbstractRenderer)
+16 (int (*)(...))QSGAbstractRenderer::metaObject
+24 (int (*)(...))QSGAbstractRenderer::qt_metacast
+32 (int (*)(...))QSGAbstractRenderer::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QSGAbstractRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSGAbstractRenderer (0x0x7f64e4692958) 0
+ vptr=((& QSGAbstractRenderer::_ZTV19QSGAbstractRenderer) + 16u)
+ QObject (0x0x7f64e46b7c60) 0
+ primary-for QSGAbstractRenderer (0x0x7f64e4692958)
+
+Class QSGEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGEngine::QPrivateSignal (0x0x7f64e46b7f00) 0 empty
+
+Vtable for QSGEngine
+QSGEngine::_ZTV9QSGEngine: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSGEngine)
+16 (int (*)(...))QSGEngine::metaObject
+24 (int (*)(...))QSGEngine::qt_metacast
+32 (int (*)(...))QSGEngine::qt_metacall
+40 (int (*)(...))QSGEngine::~QSGEngine
+48 (int (*)(...))QSGEngine::~QSGEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSGEngine
+ size=16 align=8
+ base size=16 base align=8
+QSGEngine (0x0x7f64e4692a90) 0
+ vptr=((& QSGEngine::_ZTV9QSGEngine) + 16u)
+ QObject (0x0x7f64e46b7ea0) 0
+ primary-for QSGEngine (0x0x7f64e4692a90)
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f64e44911e0) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 12u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 0u
+24 0u
+32 (int (*)(...))QSGMaterialShader::activate
+40 (int (*)(...))QSGMaterialShader::deactivate
+48 (int (*)(...))QSGMaterialShader::updateState
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGMaterialShader::compile
+72 (int (*)(...))QSGMaterialShader::initialize
+80 (int (*)(...))QSGMaterialShader::vertexShader
+88 (int (*)(...))QSGMaterialShader::fragmentShader
+
+Class QSGMaterialShader
+ size=32 align=8
+ base size=32 base align=8
+QSGMaterialShader (0x0x7f64e4491180) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16u)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f64e4491480) 0 empty
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0u
+24 0u
+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 (0x0x7f64e44914e0) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16u)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7u 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 (0x0x7f64e4692dd0) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16u)
+ QSGMaterial (0x0x7f64e44916c0) 0
+ primary-for QSGFlatColorMaterial (0x0x7f64e4692dd0)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f64e4491780) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f64e4692e38) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16u)
+ QObject (0x0x7f64e4491720) 0
+ primary-for QSGTexture (0x0x7f64e4692e38)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f64e4491840) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f64e4692ea0) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16u)
+ QSGTexture (0x0x7f64e4692f08) 0
+ primary-for QSGDynamicTexture (0x0x7f64e4692ea0)
+ QObject (0x0x7f64e44917e0) 0
+ primary-for QSGTexture (0x0x7f64e4692f08)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0u
+24 0u
+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
+
+Class QSGImageNode
+ size=144 align=8
+ base size=144 base align=8
+QSGImageNode (0x0x7f64e4692f70) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16u)
+ QSGGeometryNode (0x0x7f64e4168000) 0
+ primary-for QSGImageNode (0x0x7f64e4692f70)
+ QSGBasicGeometryNode (0x0x7f64e4168068) 0
+ primary-for QSGGeometryNode (0x0x7f64e4168000)
+ QSGNode (0x0x7f64e44918a0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f64e4168068)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0u
+24 0u
+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=144 align=8
+ base size=144 base align=8
+QSGNinePatchNode (0x0x7f64e41681a0) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16u)
+ QSGGeometryNode (0x0x7f64e4168208) 0
+ primary-for QSGNinePatchNode (0x0x7f64e41681a0)
+ QSGBasicGeometryNode (0x0x7f64e4168270) 0
+ primary-for QSGGeometryNode (0x0x7f64e4168208)
+ QSGNode (0x0x7f64e4491a80) 0
+ primary-for QSGBasicGeometryNode (0x0x7f64e4168270)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0u
+24 0u
+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=144 align=8
+ base size=144 base align=8
+QSGRectangleNode (0x0x7f64e41682d8) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16u)
+ QSGGeometryNode (0x0x7f64e4168340) 0
+ primary-for QSGRectangleNode (0x0x7f64e41682d8)
+ QSGBasicGeometryNode (0x0x7f64e41683a8) 0
+ primary-for QSGGeometryNode (0x0x7f64e4168340)
+ QSGNode (0x0x7f64e4491ae0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f64e41683a8)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+16 0u
+24 0u
+32 (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 (0x0x7f64e4491ba0) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16u)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0u
+24 0u
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGRenderNode::releaseResources
+72 (int (*)(...))QSGRenderNode::flags
+80 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=88 align=8
+ base size=88 base align=8
+QSGRenderNode (0x0x7f64e4168410) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16u)
+ QSGNode (0x0x7f64e4491b40) 0
+ primary-for QSGRenderNode (0x0x7f64e4168410)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6u 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=320 align=8
+ base size=320 base align=8
+QSGSimpleRectNode (0x0x7f64e4168888) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16u)
+ QSGGeometryNode (0x0x7f64e41688f0) 0
+ primary-for QSGSimpleRectNode (0x0x7f64e4168888)
+ QSGBasicGeometryNode (0x0x7f64e4168958) 0
+ primary-for QSGGeometryNode (0x0x7f64e41688f0)
+ QSGNode (0x0x7f64e424b1e0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f64e4168958)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7u 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 (0x0x7f64e41689c0) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16u)
+ QSGMaterial (0x0x7f64e424b240) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f64e41689c0)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7u 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 (0x0x7f64e4168a28) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16u)
+ QSGOpaqueTextureMaterial (0x0x7f64e4168a90) 0
+ primary-for QSGTextureMaterial (0x0x7f64e4168a28)
+ QSGMaterial (0x0x7f64e424b2a0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f64e4168a90)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6u 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=384 align=8
+ base size=384 base align=8
+QSGSimpleTextureNode (0x0x7f64e4168af8) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16u)
+ QSGGeometryNode (0x0x7f64e4168b60) 0
+ primary-for QSGSimpleTextureNode (0x0x7f64e4168af8)
+ QSGBasicGeometryNode (0x0x7f64e4168bc8) 0
+ primary-for QSGGeometryNode (0x0x7f64e4168b60)
+ QSGNode (0x0x7f64e424b300) 0
+ primary-for QSGBasicGeometryNode (0x0x7f64e4168bc8)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f64e424b5a0) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f64e4168d68) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16u)
+ QObject (0x0x7f64e424b540) 0
+ primary-for QSGTextureProvider (0x0x7f64e4168d68)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7u 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 (0x0x7f64e4168dd0) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16u)
+ QSGMaterial (0x0x7f64e424b600) 0
+ primary-for QSGVertexColorMaterial (0x0x7f64e4168dd0)
+
+Class QQuickStyle
+ size=1 align=1
+ base size=0 base align=1
+QQuickStyle (0x0x7f64e424b660) 0 empty
+
diff --git a/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.12.0.linux-gcc-amd64.txt b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.12.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..fdac69d643
--- /dev/null
+++ b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.12.0.linux-gcc-amd64.txt
@@ -0,0 +1,11123 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f5a2fe2c660) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f5a2fa18de0) 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 (0x0x7f5a2fa43060) 0 empty
+
+Class std::__do_is_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_default_constructible_impl (0x0x7f5a2fa432a0) 0 empty
+
+Class std::__do_is_static_castable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_static_castable_impl (0x0x7f5a2fa434e0) 0 empty
+
+Class std::__do_is_direct_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_direct_constructible_impl (0x0x7f5a2fa43660) 0 empty
+
+Class std::__do_is_nary_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nary_constructible_impl (0x0x7f5a2fa43a20) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f5a2fafd1e0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f5a2fafd2a0) 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 (0x0x7f5a2fafd600) 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 (0x0x7f5a2fafd6c0) 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 (0x0x7f5a2fafd780) 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 (0x0x7f5a2fafd840) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f5a2fafdae0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f5a2fafdcc0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f5a2fb7d180) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f5a2fb7d1e0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f5a2fbb7e40) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f5a2fbb7ea0) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f5a2fb06680) 0 empty
+ std::input_iterator_tag (0x0x7f5a2fbb7f00) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f5a2fb066e8) 0 empty
+ std::forward_iterator_tag (0x0x7f5a2fb06750) 0 empty
+ std::input_iterator_tag (0x0x7f5a2fbb7f60) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f5a2fb067b8) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f5a2fb06820) 0 empty
+ std::forward_iterator_tag (0x0x7f5a2fb06888) 0 empty
+ std::input_iterator_tag (0x0x7f5a2fbe3000) 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 (0x0x7f5a2fbe3c60) 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 (0x0x7f5a2fbe3cc0) 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 (0x0x7f5a2fbe3d20) 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 (0x0x7f5a2fbe3d80) 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 (0x0x7f5a2fbe3de0) 0 empty
+
+Class wait
+ size=4 align=4
+ base size=4 base align=4
+wait (0x0x7f5a2f8b4900) 0
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f5a2f8b4b40) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f5a2f8b4c00) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f5a2f8b4c60) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f5a2f8b4d20) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f5a2f8b4d80) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f5a2f958240) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f5a2f9582a0) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5u 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 (0x0x7f5a2f958300) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16u)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5u 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 (0x0x7f5a2fb06dd0) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16u)
+ std::exception (0x0x7f5a2f958360) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f5a2fb06dd0)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f5a2f9583c0) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4u 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 (0x0x7f5a2f958420) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16u)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5u 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 (0x0x7f5a2f645000) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16u)
+ std::exception (0x0x7f5a2f958840) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f5a2f645000)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5u 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 (0x0x7f5a2f645068) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16u)
+ std::bad_alloc (0x0x7f5a2f6450d0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f5a2f645068)
+ std::exception (0x0x7f5a2f9588a0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f5a2f6450d0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f5a2f958900) 0 empty
+
+Class __exception
+ size=40 align=8
+ base size=40 base align=8
+__exception (0x0x7f5a2f6cc540) 0
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f5a2f4ec240) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f5a2f4ec2a0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16u)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f5a2f58f180) 0
+
+Class __sched_param
+ size=4 align=4
+ base size=4 base align=4
+__sched_param (0x0x7f5a2f58f1e0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f5a2f58f2a0) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f5a2f58f300) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f5a2f58f360) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f5a2f58f3c0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f5a2f58f4e0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f5a2f58f540) 0
+
+Class _IO_marker
+ size=24 align=8
+ base size=24 base align=8
+_IO_marker (0x0x7f5a2f58f960) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f5a2f58f9c0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f5a2f0b01e0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f5a2f0b0240) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f5a2f18d1e0) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f5a2efa3000) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f5a2f0aee38) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f5a2efa30c0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f5a2f0aeea0) 0
+ std::_Bit_iterator_base (0x0x7f5a2f0aef08) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f5a2efa3120) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f5a2f0aef70) 0
+ std::_Bit_iterator_base (0x0x7f5a2f0ae618) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f5a2efa3180) 0 empty
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f5a2efa3f60) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f5a2ed85d20) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f5a2ed85cc0) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f5a2eabacc0) 0
+
+Class qIsNull(double)::U
+ size=8 align=8
+ base size=8 base align=8
+qIsNull(double)::U (0x0x7f5a2d7187e0) 0
+
+Class qIsNull(float)::U
+ size=4 align=4
+ base size=4 base align=4
+qIsNull(float)::U (0x0x7f5a2d718840) 0
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f5a2d3fb300) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f5a2d3fb360) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f5a2d3fb3c0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f5a2d3fb420) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f5a2d3fb6c0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f5a2d3fbc00) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f5a2d3e0d00) 0
+ std::__atomic_flag_base (0x0x7f5a2d3fbc60) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f5a2d277478) 0
+ QAtomicInteger<int> (0x0x7f5a2d2774e0) 0
+ QBasicAtomicInteger<int> (0x0x7f5a2cfb33c0) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f5a2cede960) 0 empty
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f5a2cc82b40) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f5a2cc82c60) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f5a2ccd70d0) 0
+ QGenericArgument (0x0x7f5a2cc82cc0) 0
+
+Class QMetaObject
+ size=48 align=8
+ base size=48 base align=8
+QMetaObject (0x0x7f5a2cc82e40) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f5a2cc82f00) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f5a2cd7bf60) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f5a2c96a000) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f5a2c96a2a0) 0
+
+Class QArrayData
+ size=24 align=8
+ base size=24 base align=8
+QArrayData (0x0x7f5a2c96a300) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f5a2c96a660) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f5a2c96a6c0) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4u 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 (0x0x7f5a2c96a720) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16u)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f5a2c96a780) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f5a2c96a7e0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f5a2c96aba0) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5u 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 (0x0x7f5a2ca756e8) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16u)
+ std::exception (0x0x7f5a2c96ac60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5a2ca756e8)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5u 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 (0x0x7f5a2ca75750) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16u)
+ std::logic_error (0x0x7f5a2ca757b8) 0
+ primary-for std::domain_error (0x0x7f5a2ca75750)
+ std::exception (0x0x7f5a2c96acc0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5a2ca757b8)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5u 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 (0x0x7f5a2ca75820) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16u)
+ std::logic_error (0x0x7f5a2ca75888) 0
+ primary-for std::invalid_argument (0x0x7f5a2ca75820)
+ std::exception (0x0x7f5a2c96ad20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5a2ca75888)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5u 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 (0x0x7f5a2ca758f0) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16u)
+ std::logic_error (0x0x7f5a2ca75958) 0
+ primary-for std::length_error (0x0x7f5a2ca758f0)
+ std::exception (0x0x7f5a2c96ad80) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5a2ca75958)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5u 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 (0x0x7f5a2ca759c0) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16u)
+ std::logic_error (0x0x7f5a2ca75a28) 0
+ primary-for std::out_of_range (0x0x7f5a2ca759c0)
+ std::exception (0x0x7f5a2c96ade0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5a2ca75a28)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5u 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 (0x0x7f5a2ca75a90) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16u)
+ std::exception (0x0x7f5a2c96ae40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5a2ca75a90)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5u 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 (0x0x7f5a2ca75af8) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16u)
+ std::runtime_error (0x0x7f5a2ca75b60) 0
+ primary-for std::range_error (0x0x7f5a2ca75af8)
+ std::exception (0x0x7f5a2c96aea0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5a2ca75b60)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5u 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 (0x0x7f5a2ca75bc8) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16u)
+ std::runtime_error (0x0x7f5a2ca75c30) 0
+ primary-for std::overflow_error (0x0x7f5a2ca75bc8)
+ std::exception (0x0x7f5a2c96af00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5a2ca75c30)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5u 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 (0x0x7f5a2ca75c98) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16u)
+ std::runtime_error (0x0x7f5a2ca75d00) 0
+ primary-for std::underflow_error (0x0x7f5a2ca75c98)
+ std::exception (0x0x7f5a2c96af60) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5a2ca75d00)
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0u
+24 0u
+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 (0x0x7f5a2cb2e120) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16u)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f5a2cb2e360) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f5a2cb2e4e0) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5u 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 (0x0x7f5a2c76e138) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16u)
+ std::runtime_error (0x0x7f5a2c76e1a0) 0
+ primary-for std::system_error (0x0x7f5a2c76e138)
+ std::exception (0x0x7f5a2cb2e720) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5a2c76e1a0)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5u 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 (0x0x7f5a2c76ed68) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16u)
+ std::system_error (0x0x7f5a2c76edd0) 0
+ primary-for std::ios_base::failure (0x0x7f5a2c76ed68)
+ std::runtime_error (0x0x7f5a2c76ee38) 0
+ primary-for std::system_error (0x0x7f5a2c76edd0)
+ std::exception (0x0x7f5a2cb2ea20) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5a2c76ee38)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f5a2cb2ea80) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f5a2cb2eae0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f5a2cb2eb40) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4u 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 (0x0x7f5a2cb2e9c0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16u)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f5a2c864300) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f5a2c8649c0) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2u entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24u)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64u)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2u entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64u)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2u entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24u)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64u)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2u entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64u)
+
+Construction vtable for std::basic_istream<char> (0x0x7f5a2c429750 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10u entries
+0 24u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0u
+32 0u
+40 18446744073709551592u
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0u
+72 0u
+
+Construction vtable for std::basic_ostream<char> (0x0x7f5a2c429820 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10u entries
+0 8u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0u
+32 0u
+40 18446744073709551608u
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0u
+72 0u
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7u entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24u)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24u)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64u)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24u)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64u)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104u)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64u)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f5a2c429bc8 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10u entries
+0 24u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0u
+32 0u
+40 18446744073709551592u
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0u
+72 0u
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f5a2c429c98 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10u entries
+0 8u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0u
+32 0u
+40 18446744073709551608u
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0u
+72 0u
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7u entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24u)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64u)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24u)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64u)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104u)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64u)
+
+Class QByteArrayDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QByteArrayDataPtr (0x0x7f5a2c486240) 0
+
+Class QByteArray
+ size=8 align=8
+ base size=8 base align=8
+QByteArray (0x0x7f5a2c4862a0) 0
+
+Class QByteRef
+ size=16 align=8
+ base size=12 base align=8
+QByteRef (0x0x7f5a2c1a9600) 0
+
+Class QStringDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QStringDataPtr (0x0x7f5a2c1a9960) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f5a2c1a9de0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f5a2c2dcc60) 0
+
+Class QString::Null
+ size=1 align=1
+ base size=0 base align=1
+QString::Null (0x0x7f5a2bf6d300) 0 empty
+
+Class QString
+ size=8 align=8
+ base size=8 base align=8
+QString (0x0x7f5a2bf6d2a0) 0
+
+Class QCharRef
+ size=16 align=8
+ base size=12 base align=8
+QCharRef (0x0x7f5a2c1163c0) 0
+
+Class QStringRef
+ size=16 align=8
+ base size=16 base align=8
+QStringRef (0x0x7f5a2bedf000) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f5a2bedfc60) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f5a2bedfcc0) 0 empty
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f5a2bedfd20) 0
+
+Class QListData::NotArrayCompatibleLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotArrayCompatibleLayout (0x0x7f5a2bcf6120) 0 empty
+
+Class QListData::NotIndirectLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotIndirectLayout (0x0x7f5a2bcf6180) 0 empty
+
+Class QListData::ArrayCompatibleLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::ArrayCompatibleLayout (0x0x7f5a2bc736e8) 0 empty
+ QListData::NotIndirectLayout (0x0x7f5a2bcf61e0) 0 empty
+
+Class QListData::InlineWithPaddingLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::InlineWithPaddingLayout (0x0x7f5a2b973f50) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f5a2bcf6240) 0 empty
+ QListData::NotIndirectLayout (0x0x7f5a2bcf62a0) 0 empty
+
+Class QListData::IndirectLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::IndirectLayout (0x0x7f5a2bc73750) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f5a2bcf6300) 0 empty
+
+Class QListData::Data
+ size=24 align=8
+ base size=24 base align=8
+QListData::Data (0x0x7f5a2bcf6360) 0
+
+Class QListData
+ size=8 align=8
+ base size=8 base align=8
+QListData (0x0x7f5a2bcf60c0) 0
+
+Class QRegExp
+ size=8 align=8
+ base size=8 base align=8
+QRegExp (0x0x7f5a2bcf67e0) 0
+
+Class QStringMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QStringMatcher::Data (0x0x7f5a2bb2ca20) 0
+
+Class QStringMatcher
+ size=1048 align=8
+ base size=1048 base align=8
+QStringMatcher (0x0x7f5a2bb2c9c0) 0
+
+Class QStringList
+ size=8 align=8
+ base size=8 base align=8
+QStringList (0x0x7f5a2bb3c1a0) 0
+ QList<QString> (0x0x7f5a2bb3c208) 0
+ QListSpecialMethods<QString> (0x0x7f5a2bb2cc00) 0 empty
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f5a2b7cf060) 0 empty
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f5a2b7cfc00) 0
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f5a2b5592a0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f5a2b559420) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f5a2b5594e0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f5a2bb3caf8) 0
+ std::__uses_alloc_base (0x0x7f5a2b559480) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f5a2b6d9540) 0 empty
+
+Class QtPrivate::AbstractDebugStreamFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::AbstractDebugStreamFunction (0x0x7f5a2b6d9780) 0
+
+Class QtPrivate::AbstractComparatorFunction
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::AbstractComparatorFunction (0x0x7f5a2b6d9840) 0
+
+Class QtPrivate::AbstractConverterFunction
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::AbstractConverterFunction (0x0x7f5a2b6d9960) 0
+
+Class QMetaType
+ size=80 align=8
+ base size=80 base align=8
+QMetaType (0x0x7f5a2b6d9ae0) 0
+
+Class QtMetaTypePrivate::VariantData
+ size=24 align=8
+ base size=20 base align=8
+QtMetaTypePrivate::VariantData (0x0x7f5a2b6d9f00) 0
+
+Class QtMetaTypePrivate::VectorBoolElements
+ size=1 align=1
+ base size=0 base align=1
+QtMetaTypePrivate::VectorBoolElements (0x0x7f5a2b432060) 0 empty
+
+Class QtMetaTypePrivate::QSequentialIterableImpl
+ size=104 align=8
+ base size=104 base align=8
+QtMetaTypePrivate::QSequentialIterableImpl (0x0x7f5a2b4329c0) 0
+
+Class QtMetaTypePrivate::QAssociativeIterableImpl
+ size=112 align=8
+ base size=112 base align=8
+QtMetaTypePrivate::QAssociativeIterableImpl (0x0x7f5a2b432de0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f5a2b525120) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f5a2b334ae0) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f5a2b090960) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=48 align=8
+ base size=48 base align=8
+QObjectData (0x0x7f5a2b0909c0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16u)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f5a2b090ba0) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14u 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 (0x0x7f5a2b090b40) 0
+ vptr=((& QObject::_ZTV7QObject) + 16u)
+
+Vtable for QObjectUserData
+QObjectUserData::_ZTV15QObjectUserData: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QObjectUserData)
+16 (int (*)(...))QObjectUserData::~QObjectUserData
+24 (int (*)(...))QObjectUserData::~QObjectUserData
+
+Class QObjectUserData
+ size=8 align=8
+ base size=8 base align=8
+QObjectUserData (0x0x7f5a2ad40e40) 0 nearly-empty
+ vptr=((& QObjectUserData::_ZTV15QObjectUserData) + 16u)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f5a2ad40ea0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f5a2ad40f60) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0u
+48 0u
+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 (0x0x7f5a2ad5eea0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16u)
+ QObject (0x0x7f5a2ad40f00) 0
+ primary-for QAbstractAnimation (0x0x7f5a2ad5eea0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f5a2adcc060) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18u 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 (0x0x7f5a2ad5ef08) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16u)
+ QObject (0x0x7f5a2adcc000) 0
+ primary-for QAnimationDriver (0x0x7f5a2ad5ef08)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f5a2adcc120) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14u 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 (0x0x7f5a2ad5ef70) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16u)
+ QObject (0x0x7f5a2adcc0c0) 0
+ primary-for QEventLoop (0x0x7f5a2ad5ef70)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f5a2adcc300) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f5a2adcc3c0) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f5a2adcc420) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 28u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QAbstractEventDispatcher::startingUp
+216 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f5a2ad5e2d8) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16u)
+ QObject (0x0x7f5a2adcc360) 0
+ primary-for QAbstractEventDispatcher (0x0x7f5a2ad5e2d8)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8u 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 (0x0x7f5a2adcc6c0) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16u)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5u 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 (0x0x7f5a2ae2f138) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16u)
+ std::exception (0x0x7f5a2adcc720) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f5a2ae2f138)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5u 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 (0x0x7f5a2ae2f1a0) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16u)
+ std::exception (0x0x7f5a2adcc780) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f5a2ae2f1a0)
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5u 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 (0x0x7f5a2ab9d410) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16u)
+ std::exception (0x0x7f5a2ab53840) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f5a2ab9d410)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f5a2ab53900) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f5a2ab53960) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f5a2ab53a80) 0
+
+Class QMapNodeBase
+ size=24 align=8
+ base size=24 base align=8
+QMapNodeBase (0x0x7f5a2ab53f60) 0
+
+Class QMapDataBase
+ size=40 align=8
+ base size=40 base align=8
+QMapDataBase (0x0x7f5a2ac514e0) 0
+
+Class QHashData::Node
+ size=16 align=8
+ base size=16 base align=8
+QHashData::Node (0x0x7f5a2ac518a0) 0
+
+Class QHashData
+ size=48 align=8
+ base size=44 base align=8
+QHashData (0x0x7f5a2ac51840) 0
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f5a2ac51900) 0 empty
+
+Class QVariant::PrivateShared
+ size=16 align=8
+ base size=12 base align=8
+QVariant::PrivateShared (0x0x7f5a2aa631e0) 0
+
+Class QVariant::Private::Data
+ size=8 align=8
+ base size=8 base align=8
+QVariant::Private::Data (0x0x7f5a2aa632a0) 0
+
+Class QVariant::Private
+ size=16 align=8
+ base size=12 base align=8
+QVariant::Private (0x0x7f5a2aa63240) 0
+
+Class QVariant::Handler
+ size=72 align=8
+ base size=72 base align=8
+QVariant::Handler (0x0x7f5a2aa63300) 0
+
+Class QVariant
+ size=16 align=8
+ base size=16 base align=8
+QVariant (0x0x7f5a2aa63180) 0
+
+Class QVariantComparisonHelper
+ size=8 align=8
+ base size=8 base align=8
+QVariantComparisonHelper (0x0x7f5a2a730de0) 0
+
+Class QSequentialIterable::const_iterator
+ size=112 align=8
+ base size=112 base align=8
+QSequentialIterable::const_iterator (0x0x7f5a2a7dd480) 0
+
+Class QSequentialIterable
+ size=104 align=8
+ base size=104 base align=8
+QSequentialIterable (0x0x7f5a2a7dd420) 0
+
+Class QAssociativeIterable::const_iterator
+ size=120 align=8
+ base size=120 base align=8
+QAssociativeIterable::const_iterator (0x0x7f5a2a7dd540) 0
+
+Class QAssociativeIterable
+ size=112 align=8
+ base size=112 base align=8
+QAssociativeIterable (0x0x7f5a2a7dd4e0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f5a2a901840) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f5a2a901f00) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f5a2a6ec660) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractItemModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractItemModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f5a2a6f71a0) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16u)
+ QObject (0x0x7f5a2a6ec600) 0
+ primary-for QAbstractItemModel (0x0x7f5a2a6f71a0)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f5a2a6ecf00) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractTableModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractTableModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f5a2a6f7888) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16u)
+ QAbstractItemModel (0x0x7f5a2a6f78f0) 0
+ primary-for QAbstractTableModel (0x0x7f5a2a6f7888)
+ QObject (0x0x7f5a2a6ecea0) 0
+ primary-for QAbstractItemModel (0x0x7f5a2a6f78f0)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f5a2a3de000) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractListModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f5a2a6f7958) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16u)
+ QAbstractItemModel (0x0x7f5a2a6f79c0) 0
+ primary-for QAbstractListModel (0x0x7f5a2a6f7958)
+ QObject (0x0x7f5a2a6ecf60) 0
+ primary-for QAbstractItemModel (0x0x7f5a2a6f79c0)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f5a2a3de2a0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16u)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f5a2a3de360) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 53u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QAbstractProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QAbstractProxyModel::setSourceModel
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))__cxa_pure_virtual
+408 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+416 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f5a2a6f7af8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16u)
+ QAbstractItemModel (0x0x7f5a2a6f7b60) 0
+ primary-for QAbstractProxyModel (0x0x7f5a2a6f7af8)
+ QObject (0x0x7f5a2a3de300) 0
+ primary-for QAbstractItemModel (0x0x7f5a2a6f7b60)
+
+Class QAbstractState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractState::QPrivateSignal (0x0x7f5a2a3de420) 0 empty
+
+Vtable for QAbstractState
+QAbstractState::_ZTV14QAbstractState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QAbstractState)
+16 (int (*)(...))QAbstractState::metaObject
+24 (int (*)(...))QAbstractState::qt_metacast
+32 (int (*)(...))QAbstractState::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractState
+ size=16 align=8
+ base size=16 base align=8
+QAbstractState (0x0x7f5a2a6f7bc8) 0
+ vptr=((& QAbstractState::_ZTV14QAbstractState) + 16u)
+ QObject (0x0x7f5a2a3de3c0) 0
+ primary-for QAbstractState (0x0x7f5a2a6f7bc8)
+
+Class QAbstractTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTransition::QPrivateSignal (0x0x7f5a2a3de4e0) 0 empty
+
+Vtable for QAbstractTransition
+QAbstractTransition::_ZTV19QAbstractTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTransition)
+16 (int (*)(...))QAbstractTransition::metaObject
+24 (int (*)(...))QAbstractTransition::qt_metacast
+32 (int (*)(...))QAbstractTransition::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractTransition
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTransition (0x0x7f5a2a6f7c30) 0
+ vptr=((& QAbstractTransition::_ZTV19QAbstractTransition) + 16u)
+ QObject (0x0x7f5a2a3de480) 0
+ primary-for QAbstractTransition (0x0x7f5a2a6f7c30)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f5a2a3de5a0) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0u
+48 0u
+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 (0x0x7f5a2a6f7c98) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16u)
+ QAbstractAnimation (0x0x7f5a2a6f7d00) 0
+ primary-for QAnimationGroup (0x0x7f5a2a6f7c98)
+ QObject (0x0x7f5a2a3de540) 0
+ primary-for QAbstractAnimation (0x0x7f5a2a6f7d00)
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f5a2a4b7300) 0
+
+Class QBitArray
+ size=8 align=8
+ base size=8 base align=8
+QBitArray (0x0x7f5a2a4b75a0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=12 base align=8
+QBitRef (0x0x7f5a2a4b7660) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f5a2a4b7960) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 30u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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 (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f5a2a4e13a8) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16u)
+ QObject (0x0x7f5a2a4b7900) 0
+ primary-for QIODevice (0x0x7f5a2a4e13a8)
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f5a2a4b7ba0) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 30u 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 (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f5a2a4e14e0) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16u)
+ QIODevice (0x0x7f5a2a4e1548) 0
+ primary-for QBuffer (0x0x7f5a2a4e14e0)
+ QObject (0x0x7f5a2a4b7b40) 0
+ primary-for QIODevice (0x0x7f5a2a4e1548)
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f5a2a4b7c60) 0
+
+Class QByteArrayMatcher
+ size=1040 align=8
+ base size=1040 base align=8
+QByteArrayMatcher (0x0x7f5a2a4b7c00) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f5a2a4b7d80) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f5a2a4b7d20) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f5a2a4b7f60) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f5a2a1e9180) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f5a2a1e9420) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f5a2a1e9ba0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f5a2a1e9c00) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f5a2a1e9b40) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f5a2a30bd20) 0
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4u 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 (0x0x7f5a29fd4360) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16u)
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f5a29fd4600) 0
+
+Class QContiguousCacheData
+ size=24 align=4
+ base size=24 base align=4
+QContiguousCacheData (0x0x7f5a29fd4840) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f5a29fd4f00) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f5a29d060c0) 0
+
+Class QDebug::Stream
+ size=80 align=8
+ base size=76 base align=8
+QDebug::Stream (0x0x7f5a29d06600) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f5a29d065a0) 0
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f5a29b15900) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f5a29b159c0) 0 empty
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f5a29b93d20) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f5a29b93ea0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f5a29bf94e0) 0
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f5a29bf97e0) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f5a29bf9ba0) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f5a299952a0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=12 base align=8
+QCborParserError (0x0x7f5a299958a0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f5a29995900) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f5a29851900) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f5a29851ea0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f5a29851f00) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f5a29851e40) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f5a29581f60) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f5a29620000) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f5a29581f00) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f5a29333b40) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f5a29333f00) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f5a2949f900) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f5a2949ff60) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f5a29146060) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f5a291df060) 0
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+
+Class QEvent
+ size=24 align=8
+ base size=20 base align=8
+QEvent (0x0x7f5a291df4e0) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16u)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+
+Class QTimerEvent
+ size=24 align=8
+ base size=24 base align=8
+QTimerEvent (0x0x7f5a291d0af8) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16u)
+ QEvent (0x0x7f5a291df540) 0
+ primary-for QTimerEvent (0x0x7f5a291d0af8)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+
+Class QChildEvent
+ size=32 align=8
+ base size=32 base align=8
+QChildEvent (0x0x7f5a291d0b60) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16u)
+ QEvent (0x0x7f5a291df5a0) 0
+ primary-for QChildEvent (0x0x7f5a291d0b60)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+
+Class QDynamicPropertyChangeEvent
+ size=32 align=8
+ base size=32 base align=8
+QDynamicPropertyChangeEvent (0x0x7f5a292570d0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16u)
+ QEvent (0x0x7f5a291dfa80) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f5a292570d0)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=24 base align=8
+QDeferredDeleteEvent (0x0x7f5a29257138) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16u)
+ QEvent (0x0x7f5a291dfae0) 0
+ primary-for QDeferredDeleteEvent (0x0x7f5a29257138)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f5a291dfba0) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16u 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 (0x0x7f5a292571a0) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16u)
+ QObject (0x0x7f5a291dfb40) 0
+ primary-for QCoreApplication (0x0x7f5a292571a0)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f5a291dfc00) 0
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f5a291dfc60) 0
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f5a291dfcc0) 0
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f5a291dfd80) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f5a28eb02a0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f5a28eb0780) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f5a29019600) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFileDevice::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f5a2901a618) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16u)
+ QIODevice (0x0x7f5a2901a680) 0
+ primary-for QFileDevice (0x0x7f5a2901a618)
+ QObject (0x0x7f5a290195a0) 0
+ primary-for QIODevice (0x0x7f5a2901a680)
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f5a29019840) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f5a2901a7b8) 0
+ vptr=((& QFile::_ZTV5QFile) + 16u)
+ QFileDevice (0x0x7f5a2901a820) 0
+ primary-for QFile (0x0x7f5a2901a7b8)
+ QIODevice (0x0x7f5a2901a888) 0
+ primary-for QFileDevice (0x0x7f5a2901a820)
+ QObject (0x0x7f5a290197e0) 0
+ primary-for QIODevice (0x0x7f5a2901a888)
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f5a29019a20) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f5a29019e40) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f5a28d09480) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f5a28d096c0) 0
+
+Class QEventTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventTransition::QPrivateSignal (0x0x7f5a28e23ae0) 0 empty
+
+Vtable for QEventTransition
+QEventTransition::_ZTV16QEventTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QEventTransition)
+16 (int (*)(...))QEventTransition::metaObject
+24 (int (*)(...))QEventTransition::qt_metacast
+32 (int (*)(...))QEventTransition::qt_metacall
+40 (int (*)(...))QEventTransition::~QEventTransition
+48 (int (*)(...))QEventTransition::~QEventTransition
+56 (int (*)(...))QEventTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QEventTransition::eventTest
+120 (int (*)(...))QEventTransition::onTransition
+
+Class QEventTransition
+ size=16 align=8
+ base size=16 base align=8
+QEventTransition (0x0x7f5a28e26888) 0
+ vptr=((& QEventTransition::_ZTV16QEventTransition) + 16u)
+ QAbstractTransition (0x0x7f5a28e268f0) 0
+ primary-for QEventTransition (0x0x7f5a28e26888)
+ QObject (0x0x7f5a28e23a80) 0
+ primary-for QAbstractTransition (0x0x7f5a28e268f0)
+
+Vtable for QException
+QException::_ZTV10QException: 7u 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 (0x0x7f5a28e26958) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16u)
+ std::exception (0x0x7f5a28e23b40) 0 nearly-empty
+ primary-for QException (0x0x7f5a28e26958)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7u 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=8 align=8
+ base size=8 base align=8
+QUnhandledException (0x0x7f5a28e269c0) 0 nearly-empty
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16u)
+ QException (0x0x7f5a28e26a28) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f5a28e269c0)
+ std::exception (0x0x7f5a28e23ba0) 0 nearly-empty
+ primary-for QException (0x0x7f5a28e26a28)
+
+Class QtPrivate::ExceptionHolder
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionHolder (0x0x7f5a28e23c00) 0
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f5a28e23cc0) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f5a28e23d20) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16u)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f5a28e23e40) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14u 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 (0x0x7f5a28e26a90) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16u)
+ QObject (0x0x7f5a28e23de0) 0
+ primary-for QFileSelector (0x0x7f5a28e26a90)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f5a28e23f00) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14u 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 (0x0x7f5a28e26af8) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16u)
+ QObject (0x0x7f5a28e23ea0) 0
+ primary-for QFileSystemWatcher (0x0x7f5a28e26af8)
+
+Class QFinalState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFinalState::QPrivateSignal (0x0x7f5a28ad8000) 0 empty
+
+Vtable for QFinalState
+QFinalState::_ZTV11QFinalState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFinalState)
+16 (int (*)(...))QFinalState::metaObject
+24 (int (*)(...))QFinalState::qt_metacast
+32 (int (*)(...))QFinalState::qt_metacall
+40 (int (*)(...))QFinalState::~QFinalState
+48 (int (*)(...))QFinalState::~QFinalState
+56 (int (*)(...))QFinalState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFinalState::onEntry
+120 (int (*)(...))QFinalState::onExit
+
+Class QFinalState
+ size=16 align=8
+ base size=16 base align=8
+QFinalState (0x0x7f5a28e26b60) 0
+ vptr=((& QFinalState::_ZTV11QFinalState) + 16u)
+ QAbstractState (0x0x7f5a28e26bc8) 0
+ primary-for QFinalState (0x0x7f5a28e26b60)
+ QObject (0x0x7f5a28e23f60) 0
+ primary-for QAbstractState (0x0x7f5a28e26bc8)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0u
+32 0u
+
+Class QRunnable
+ size=16 align=8
+ base size=12 base align=8
+QRunnable (0x0x7f5a28ad8060) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16u)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f5a28ad80c0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f5a28e26d00) 0
+ QBasicMutex (0x0x7f5a28ad82a0) 0
+
+Class QMutexLocker
+ size=8 align=8
+ base size=8 base align=8
+QMutexLocker (0x0x7f5a28ad8300) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f5a28ad8360) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f5a28ad83c0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4u 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 (0x0x7f5a28ad84e0) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16u)
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4u 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 (0x0x7f5a28ad8d20) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16u)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f5a28c54540) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0u
+48 0u
+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 (0x0x7f5a28bcee38) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16u)
+ QObject (0x0x7f5a28c544e0) 0
+ primary-for QFutureWatcherBase (0x0x7f5a28bcee38)
+
+Class QHistoryState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHistoryState::QPrivateSignal (0x0x7f5a28c54b40) 0 empty
+
+Vtable for QHistoryState
+QHistoryState::_ZTV13QHistoryState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QHistoryState)
+16 (int (*)(...))QHistoryState::metaObject
+24 (int (*)(...))QHistoryState::qt_metacast
+32 (int (*)(...))QHistoryState::qt_metacall
+40 (int (*)(...))QHistoryState::~QHistoryState
+48 (int (*)(...))QHistoryState::~QHistoryState
+56 (int (*)(...))QHistoryState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHistoryState::onEntry
+120 (int (*)(...))QHistoryState::onExit
+
+Class QHistoryState
+ size=16 align=8
+ base size=16 base align=8
+QHistoryState (0x0x7f5a28c98750) 0
+ vptr=((& QHistoryState::_ZTV13QHistoryState) + 16u)
+ QAbstractState (0x0x7f5a28c987b8) 0
+ primary-for QHistoryState (0x0x7f5a28c98750)
+ QObject (0x0x7f5a28c54ae0) 0
+ primary-for QAbstractState (0x0x7f5a28c987b8)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f5a28c54c00) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 53u 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QIdentityProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QIdentityProxyModel::insertRows
+264 (int (*)(...))QIdentityProxyModel::insertColumns
+272 (int (*)(...))QIdentityProxyModel::removeRows
+280 (int (*)(...))QIdentityProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QIdentityProxyModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QIdentityProxyModel::setSourceModel
+392 (int (*)(...))QIdentityProxyModel::mapToSource
+400 (int (*)(...))QIdentityProxyModel::mapFromSource
+408 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+416 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f5a28c98820) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16u)
+ QAbstractProxyModel (0x0x7f5a28c98888) 0
+ primary-for QIdentityProxyModel (0x0x7f5a28c98820)
+ QAbstractItemModel (0x0x7f5a28c988f0) 0
+ primary-for QAbstractProxyModel (0x0x7f5a28c98888)
+ QObject (0x0x7f5a28c54ba0) 0
+ primary-for QAbstractItemModel (0x0x7f5a28c988f0)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f5a28c54c60) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f5a28925360) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20u 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 (0x0x7f5a28938138) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16u)
+ QObject (0x0x7f5a28925300) 0
+ primary-for QItemSelectionModel (0x0x7f5a28938138)
+
+Class QItemSelection
+ size=8 align=8
+ base size=8 base align=8
+QItemSelection (0x0x7f5a28938340) 0
+ QList<QItemSelectionRange> (0x0x7f5a289383a8) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f5a28925660) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=20 base align=8
+QJsonValue (0x0x7f5a28925b40) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=12 base align=8
+QJsonValueRef (0x0x7f5a287362a0) 0
+
+Class QJsonValuePtr
+ size=24 align=8
+ base size=24 base align=8
+QJsonValuePtr (0x0x7f5a287367e0) 0
+
+Class QJsonValueRefPtr
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRefPtr (0x0x7f5a28736840) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::iterator (0x0x7f5a28736a20) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::const_iterator (0x0x7f5a28736a80) 0
+
+Class QJsonArray
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray (0x0x7f5a287369c0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f5a28846cc0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f5a28846d20) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::iterator (0x0x7f5a284c13c0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::const_iterator (0x0x7f5a284c1420) 0
+
+Class QJsonObject
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject (0x0x7f5a284c1360) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f5a285786c0) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14u 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=32 align=8
+ base size=25 base align=8
+QLibrary (0x0x7f5a285806e8) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16u)
+ QObject (0x0x7f5a28578660) 0
+ primary-for QLibrary (0x0x7f5a285806e8)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f5a28578d80) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f5a285788a0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f5a286672a0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f5a28667300) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f5a286675a0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f5a28667ba0) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f5a2830c540) 0
+
+Class QLinkedListData
+ size=32 align=8
+ base size=25 base align=8
+QLinkedListData (0x0x7f5a2830cb40) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f5a2830cea0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f5a28448060) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f5a28448000) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f5a284481e0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f5a28448480) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f5a28448ae0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=12 base align=8
+QMetaMethod (0x0x7f5a28448b40) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=12 base align=8
+QMetaEnum (0x0x7f5a2817f180) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f5a2817f480) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=12 base align=8
+QMetaClassInfo (0x0x7f5a2817f4e0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f5a2817f7e0) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17u 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 (0x0x7f5a28176958) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16u)
+ QObject (0x0x7f5a2817f780) 0
+ primary-for QMimeData (0x0x7f5a28176958)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f5a2817f840) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f5a2817fb40) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f5a2817fc00) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14u 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=24 align=8
+ base size=24 base align=8
+QObjectCleanupHandler (0x0x7f5a28176b60) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16u)
+ QObject (0x0x7f5a2817fba0) 0
+ primary-for QObjectCleanupHandler (0x0x7f5a28176b60)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f5a2817fc60) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f5a2820a420) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18u 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 (0x0x7f5a2820e270) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16u)
+ QAnimationGroup (0x0x7f5a2820e2d8) 0
+ primary-for QParallelAnimationGroup (0x0x7f5a2820e270)
+ QAbstractAnimation (0x0x7f5a2820e340) 0
+ primary-for QAnimationGroup (0x0x7f5a2820e2d8)
+ QObject (0x0x7f5a2820a3c0) 0
+ primary-for QAbstractAnimation (0x0x7f5a2820e340)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f5a2820a4e0) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18u 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 (0x0x7f5a2820e3a8) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16u)
+ QAbstractAnimation (0x0x7f5a2820e410) 0
+ primary-for QPauseAnimation (0x0x7f5a2820e3a8)
+ QObject (0x0x7f5a2820a480) 0
+ primary-for QAbstractAnimation (0x0x7f5a2820e410)
+
+Class QStaticPlugin
+ size=16 align=8
+ base size=16 base align=8
+QStaticPlugin (0x0x7f5a2820a6c0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f5a2820a9c0) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14u 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 (0x0x7f5a2820e618) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16u)
+ QObject (0x0x7f5a2820a960) 0
+ primary-for QPluginLoader (0x0x7f5a2820e618)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f5a2820aa20) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f5a28294120) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 31u 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 (*)(...))QProcess::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QProcess::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QProcess::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QProcess::writeData
+240 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f5a2820ec98) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16u)
+ QIODevice (0x0x7f5a2820ed00) 0
+ primary-for QProcess (0x0x7f5a2820ec98)
+ QObject (0x0x7f5a282940c0) 0
+ primary-for QIODevice (0x0x7f5a2820ed00)
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f5a282941e0) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20u 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 (0x0x7f5a2820ed68) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16u)
+ QAbstractAnimation (0x0x7f5a2820edd0) 0
+ primary-for QVariantAnimation (0x0x7f5a2820ed68)
+ QObject (0x0x7f5a28294180) 0
+ primary-for QAbstractAnimation (0x0x7f5a2820edd0)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f5a282942a0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20u 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 (0x0x7f5a2820eea0) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16u)
+ QVariantAnimation (0x0x7f5a2820ef08) 0
+ primary-for QPropertyAnimation (0x0x7f5a2820eea0)
+ QAbstractAnimation (0x0x7f5a2820ef70) 0
+ primary-for QVariantAnimation (0x0x7f5a2820ef08)
+ QObject (0x0x7f5a28294240) 0
+ primary-for QAbstractAnimation (0x0x7f5a2820ef70)
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f5a282943c0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f5a28294360) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f5a27e8c270) 0
+ QRandomGenerator (0x0x7f5a27e87360) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f5a27e87420) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f5a27e876c0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f5a27e87780) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f5a27e87840) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f5a27e87ae0) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f5a27e87d80) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f5a27be5060) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f5a27be5300) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f5a27be5480) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 34u 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 (*)(...))QSaveFile::writeData
+240 (int (*)(...))QSaveFile::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f5a27e8cdd0) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16u)
+ QFileDevice (0x0x7f5a27e8ce38) 0
+ primary-for QSaveFile (0x0x7f5a27e8cdd0)
+ QIODevice (0x0x7f5a27e8cea0) 0
+ primary-for QFileDevice (0x0x7f5a27e8ce38)
+ QObject (0x0x7f5a27be5420) 0
+ primary-for QIODevice (0x0x7f5a27e8cea0)
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f5a27be55a0) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f5a27be5720) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f5a27a2cd20) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18u 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 (0x0x7f5a27a41750) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16u)
+ QAnimationGroup (0x0x7f5a27a417b8) 0
+ primary-for QSequentialAnimationGroup (0x0x7f5a27a41750)
+ QAbstractAnimation (0x0x7f5a27a41820) 0
+ primary-for QAnimationGroup (0x0x7f5a27a417b8)
+ QObject (0x0x7f5a27a2ccc0) 0
+ primary-for QAbstractAnimation (0x0x7f5a27a41820)
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f5a27a2cde0) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14u 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 (0x0x7f5a27a41888) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16u)
+ QObject (0x0x7f5a27a2cd80) 0
+ primary-for QSettings (0x0x7f5a27a41888)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f5a27a2cea0) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14u 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 (0x0x7f5a27a418f0) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16u)
+ QObject (0x0x7f5a27a2ce40) 0
+ primary-for QSharedMemory (0x0x7f5a27a418f0)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f5a27a2cf60) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14u 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 (0x0x7f5a27a41958) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16u)
+ QObject (0x0x7f5a27a2cf00) 0
+ primary-for QSignalMapper (0x0x7f5a27a41958)
+
+Class QSignalTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalTransition::QPrivateSignal (0x0x7f5a27aa7060) 0 empty
+
+Vtable for QSignalTransition
+QSignalTransition::_ZTV17QSignalTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSignalTransition)
+16 (int (*)(...))QSignalTransition::metaObject
+24 (int (*)(...))QSignalTransition::qt_metacast
+32 (int (*)(...))QSignalTransition::qt_metacall
+40 (int (*)(...))QSignalTransition::~QSignalTransition
+48 (int (*)(...))QSignalTransition::~QSignalTransition
+56 (int (*)(...))QSignalTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSignalTransition::eventTest
+120 (int (*)(...))QSignalTransition::onTransition
+
+Class QSignalTransition
+ size=16 align=8
+ base size=16 base align=8
+QSignalTransition (0x0x7f5a27a419c0) 0
+ vptr=((& QSignalTransition::_ZTV17QSignalTransition) + 16u)
+ QAbstractTransition (0x0x7f5a27a41a28) 0
+ primary-for QSignalTransition (0x0x7f5a27a419c0)
+ QObject (0x0x7f5a27aa7000) 0
+ primary-for QAbstractTransition (0x0x7f5a27a41a28)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f5a27aa7120) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14u 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 (0x0x7f5a27a41a90) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16u)
+ QObject (0x0x7f5a27aa70c0) 0
+ primary-for QSocketNotifier (0x0x7f5a27a41a90)
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f5a27aa71e0) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 56u 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 (*)(...))QSortFilterProxyModel::mimeTypes
+216 (int (*)(...))QSortFilterProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QSortFilterProxyModel::dropMimeData
+240 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QSortFilterProxyModel::insertRows
+264 (int (*)(...))QSortFilterProxyModel::insertColumns
+272 (int (*)(...))QSortFilterProxyModel::removeRows
+280 (int (*)(...))QSortFilterProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QSortFilterProxyModel::fetchMore
+312 (int (*)(...))QSortFilterProxyModel::canFetchMore
+320 (int (*)(...))QSortFilterProxyModel::flags
+328 (int (*)(...))QSortFilterProxyModel::sort
+336 (int (*)(...))QSortFilterProxyModel::buddy
+344 (int (*)(...))QSortFilterProxyModel::match
+352 (int (*)(...))QSortFilterProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QSortFilterProxyModel::setSourceModel
+392 (int (*)(...))QSortFilterProxyModel::mapToSource
+400 (int (*)(...))QSortFilterProxyModel::mapFromSource
+408 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+416 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+424 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+432 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+440 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f5a27a41af8) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16u)
+ QAbstractProxyModel (0x0x7f5a27a41b60) 0
+ primary-for QSortFilterProxyModel (0x0x7f5a27a41af8)
+ QAbstractItemModel (0x0x7f5a27a41bc8) 0
+ primary-for QAbstractProxyModel (0x0x7f5a27a41b60)
+ QObject (0x0x7f5a27aa7180) 0
+ primary-for QAbstractItemModel (0x0x7f5a27a41bc8)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f5a27aa72a0) 0 empty
+
+Class QState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QState::QPrivateSignal (0x0x7f5a27aa74e0) 0 empty
+
+Vtable for QState
+QState::_ZTV6QState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QState)
+16 (int (*)(...))QState::metaObject
+24 (int (*)(...))QState::qt_metacast
+32 (int (*)(...))QState::qt_metacall
+40 (int (*)(...))QState::~QState
+48 (int (*)(...))QState::~QState
+56 (int (*)(...))QState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QState::onEntry
+120 (int (*)(...))QState::onExit
+
+Class QState
+ size=16 align=8
+ base size=16 base align=8
+QState (0x0x7f5a27a41d68) 0
+ vptr=((& QState::_ZTV6QState) + 16u)
+ QAbstractState (0x0x7f5a27a41dd0) 0
+ primary-for QState (0x0x7f5a27a41d68)
+ QObject (0x0x7f5a27aa7480) 0
+ primary-for QAbstractState (0x0x7f5a27a41dd0)
+
+Class QStateMachine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStateMachine::QPrivateSignal (0x0x7f5a27aa7600) 0 empty
+
+Vtable for QStateMachine::SignalEvent
+QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine11SignalEventE)
+16 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+24 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+
+Class QStateMachine::SignalEvent
+ size=48 align=8
+ base size=48 base align=8
+QStateMachine::SignalEvent (0x0x7f5a27a41f70) 0
+ vptr=((& QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE) + 16u)
+ QEvent (0x0x7f5a27aa7660) 0
+ primary-for QStateMachine::SignalEvent (0x0x7f5a27a41f70)
+
+Vtable for QStateMachine::WrappedEvent
+QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine12WrappedEventE)
+16 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+24 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+
+Class QStateMachine::WrappedEvent
+ size=40 align=8
+ base size=40 base align=8
+QStateMachine::WrappedEvent (0x0x7f5a27b57000) 0
+ vptr=((& QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE) + 16u)
+ QEvent (0x0x7f5a27aa76c0) 0
+ primary-for QStateMachine::WrappedEvent (0x0x7f5a27b57000)
+
+Vtable for QStateMachine
+QStateMachine::_ZTV13QStateMachine: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStateMachine)
+16 (int (*)(...))QStateMachine::metaObject
+24 (int (*)(...))QStateMachine::qt_metacast
+32 (int (*)(...))QStateMachine::qt_metacall
+40 (int (*)(...))QStateMachine::~QStateMachine
+48 (int (*)(...))QStateMachine::~QStateMachine
+56 (int (*)(...))QStateMachine::event
+64 (int (*)(...))QStateMachine::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStateMachine::onEntry
+120 (int (*)(...))QStateMachine::onExit
+128 (int (*)(...))QStateMachine::beginSelectTransitions
+136 (int (*)(...))QStateMachine::endSelectTransitions
+144 (int (*)(...))QStateMachine::beginMicrostep
+152 (int (*)(...))QStateMachine::endMicrostep
+
+Class QStateMachine
+ size=16 align=8
+ base size=16 base align=8
+QStateMachine (0x0x7f5a27a41e38) 0
+ vptr=((& QStateMachine::_ZTV13QStateMachine) + 16u)
+ QState (0x0x7f5a27a41ea0) 0
+ primary-for QStateMachine (0x0x7f5a27a41e38)
+ QAbstractState (0x0x7f5a27a41f08) 0
+ primary-for QState (0x0x7f5a27a41ea0)
+ QObject (0x0x7f5a27aa75a0) 0
+ primary-for QAbstractState (0x0x7f5a27a41f08)
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f5a27aa7720) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f5a277ad660) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f5a27834a20) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 48u 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 (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QStringListModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStringListModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QStringListModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStringListModel::flags
+328 (int (*)(...))QStringListModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStringListModel
+ size=24 align=8
+ base size=24 base align=8
+QStringListModel (0x0x7f5a27864000) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16u)
+ QAbstractListModel (0x0x7f5a27864068) 0
+ primary-for QStringListModel (0x0x7f5a27864000)
+ QAbstractItemModel (0x0x7f5a278640d0) 0
+ primary-for QAbstractListModel (0x0x7f5a27864068)
+ QObject (0x0x7f5a278349c0) 0
+ primary-for QAbstractItemModel (0x0x7f5a278640d0)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f5a27834a80) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f5a27834b40) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f5a27834c60) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 34u 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QTemporaryFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f5a27864138) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16u)
+ QFile (0x0x7f5a278641a0) 0
+ primary-for QTemporaryFile (0x0x7f5a27864138)
+ QFileDevice (0x0x7f5a27864208) 0
+ primary-for QFile (0x0x7f5a278641a0)
+ QIODevice (0x0x7f5a27864270) 0
+ primary-for QFileDevice (0x0x7f5a27864208)
+ QObject (0x0x7f5a27834c00) 0
+ primary-for QIODevice (0x0x7f5a27864270)
+
+Class QTextBoundaryFinder
+ size=48 align=8
+ base size=48 base align=8
+QTextBoundaryFinder (0x0x7f5a27834cc0) 0
+
+Class QTextCodec::ConverterState
+ size=32 align=8
+ base size=32 base align=8
+QTextCodec::ConverterState (0x0x7f5a27834f00) 0
+
+Vtable for QTextCodec
+QTextCodec::_ZTV10QTextCodec: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextCodec)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))QTextCodec::aliases
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 0u
+64 0u
+
+Class QTextCodec
+ size=8 align=8
+ base size=8 base align=8
+QTextCodec (0x0x7f5a27834ea0) 0 nearly-empty
+ vptr=((& QTextCodec::_ZTV10QTextCodec) + 16u)
+
+Class QTextEncoder
+ size=40 align=8
+ base size=40 base align=8
+QTextEncoder (0x0x7f5a278e6120) 0
+
+Class QTextDecoder
+ size=40 align=8
+ base size=40 base align=8
+QTextDecoder (0x0x7f5a278e6180) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f5a278e61e0) 0
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f5a278e6240) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f5a27864478) 0
+ std::__mutex_base (0x0x7f5a278e62a0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f5a278644e0) 0
+ std::__recursive_mutex_base (0x0x7f5a278e6300) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f5a27950070) 0
+ std::__mutex_base (0x0x7f5a278e6420) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f5a278e6480) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f5a27950a10) 0
+ std::__recursive_mutex_base (0x0x7f5a278e6540) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f5a278e65a0) 0 empty
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f5a278e6600) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f5a278e6660) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f5a278e66c0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f5a278e6900) 0
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5u 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 (0x0x7f5a27864618) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16u)
+ std::exception (0x0x7f5a278e69c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f5a27864618)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5u 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 (0x0x7f5a27864680) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16u)
+ std::exception (0x0x7f5a278e6a80) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f5a27864680)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5u 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 (0x0x7f5a278646e8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16u)
+ std::exception (0x0x7f5a278e6b40) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f5a278646e8)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5u 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 (0x0x7f5a278647b8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16u)
+ std::exception (0x0x7f5a278e6c00) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f5a278647b8)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f5a278e6cc0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f5a278e6d20) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f5a278e6d80) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f5a278e6de0) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5u 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 (0x0x7f5a27864a90) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16u)
+ std::exception (0x0x7f5a27632180) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f5a27864a90)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f5a276329c0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f5a273e01e0) 0
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f5a273e03c0) 0
+
+Vtable for std::thread::_Impl_base
+std::thread::_Impl_base::_ZTVNSt6thread10_Impl_baseE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread10_Impl_baseE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_Impl_base
+ size=24 align=8
+ base size=24 base align=8
+std::thread::_Impl_base (0x0x7f5a273e0420) 0
+ vptr=((& std::thread::_Impl_base::_ZTVNSt6thread10_Impl_baseE) + 16u)
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f5a273e0360) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f5a275a1060) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f5a275a1120) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f5a275a1180) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f5a272537e0) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5u 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 (0x0x7f5a27248dd0) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16u)
+ std::logic_error (0x0x7f5a27248e38) 0
+ primary-for std::future_error (0x0x7f5a27248dd0)
+ std::exception (0x0x7f5a27253900) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5a27248e38)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f5a27253a20) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0u
+32 0u
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f5a272539c0) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16u)
+
+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 (0x0x7f5a272ebf60) 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 (0x0x7f5a26fd5410) 0
+ std::__at_thread_exit_elt (0x0x7f5a26ff9060) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6u 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 (0x0x7f5a27253ba0) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16u)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f5a27253960) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6u 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 (0x0x7f5a26d7c000) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16u)
+ std::__future_base::_State_baseV2 (0x0x7f5a26d1bf00) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f5a26d7c000)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f5a26d84660) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15u 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 (0x0x7f5a26d7ca90) 0
+ vptr=((& QThread::_ZTV7QThread) + 16u)
+ QObject (0x0x7f5a26d84600) 0
+ primary-for QThread (0x0x7f5a26d7ca90)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f5a26d84780) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14u 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 (0x0x7f5a26d7caf8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16u)
+ QObject (0x0x7f5a26d84720) 0
+ primary-for QThreadPool (0x0x7f5a26d7caf8)
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f5a26d847e0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f5a26d84900) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15u 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 (0x0x7f5a26d7cb60) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16u)
+ QObject (0x0x7f5a26d848a0) 0
+ primary-for QTimeLine (0x0x7f5a26d7cb60)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f5a26d849c0) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14u 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=32 align=8
+ base size=29 base align=8
+QTimer (0x0x7f5a26d7cbc8) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16u)
+ QObject (0x0x7f5a26d84960) 0
+ primary-for QTimer (0x0x7f5a26d7cbc8)
+
+Class QTimeZone::OffsetData
+ size=32 align=8
+ base size=28 base align=8
+QTimeZone::OffsetData (0x0x7f5a26a4a120) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f5a26a4a0c0) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f5a26a4a6c0) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16u 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 (0x0x7f5a26a41750) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16u)
+ QObject (0x0x7f5a26a4a660) 0
+ primary-for QTranslator (0x0x7f5a26a41750)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f5a26a4a720) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f5a26a4ad80) 0
+
+Class QXmlStreamStringRef
+ size=16 align=8
+ base size=16 base align=8
+QXmlStreamStringRef (0x0x7f5a26a4ade0) 0
+
+Class QXmlStreamAttribute
+ size=80 align=8
+ base size=73 base align=8
+QXmlStreamAttribute (0x0x7f5a26af70c0) 0
+
+Class QXmlStreamAttributes
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamAttributes (0x0x7f5a26b06478) 0
+ QVector<QXmlStreamAttribute> (0x0x7f5a26af7480) 0
+
+Class QXmlStreamNamespaceDeclaration
+ size=40 align=8
+ base size=40 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f5a26af74e0) 0
+
+Class QXmlStreamNotationDeclaration
+ size=56 align=8
+ base size=56 base align=8
+QXmlStreamNotationDeclaration (0x0x7f5a26af7780) 0
+
+Class QXmlStreamEntityDeclaration
+ size=88 align=8
+ base size=88 base align=8
+QXmlStreamEntityDeclaration (0x0x7f5a26af7a20) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6u 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 (0x0x7f5a26af7cc0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16u)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f5a26af7d20) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f5a26802780) 0
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f5a268028a0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f5a26802b40) 0
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f5a26926540) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f5a269264e0) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f5a265d78a0) 0
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f5a26688de0) 0
+
+Class QTouchDevice
+ size=8 align=8
+ base size=8 base align=8
+QTouchDevice (0x0x7f5a266d30c0) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+
+Class QInputEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputEvent (0x0x7f5a266d1270) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16u)
+ QEvent (0x0x7f5a266d32a0) 0
+ primary-for QInputEvent (0x0x7f5a266d1270)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+
+Class QEnterEvent
+ size=72 align=8
+ base size=72 base align=8
+QEnterEvent (0x0x7f5a266d12d8) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16u)
+ QEvent (0x0x7f5a266d3300) 0
+ primary-for QEnterEvent (0x0x7f5a266d12d8)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+
+Class QMouseEvent
+ size=104 align=8
+ base size=100 base align=8
+QMouseEvent (0x0x7f5a266d1340) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16u)
+ QInputEvent (0x0x7f5a266d13a8) 0
+ primary-for QMouseEvent (0x0x7f5a266d1340)
+ QEvent (0x0x7f5a266d3360) 0
+ primary-for QInputEvent (0x0x7f5a266d13a8)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+
+Class QHoverEvent
+ size=64 align=8
+ base size=64 base align=8
+QHoverEvent (0x0x7f5a266d1410) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16u)
+ QInputEvent (0x0x7f5a266d1478) 0
+ primary-for QHoverEvent (0x0x7f5a266d1410)
+ QEvent (0x0x7f5a266d33c0) 0
+ primary-for QInputEvent (0x0x7f5a266d1478)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f5a266d14e0) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16u)
+ QInputEvent (0x0x7f5a266d1548) 0
+ primary-for QWheelEvent (0x0x7f5a266d14e0)
+ QEvent (0x0x7f5a266d3420) 0
+ primary-for QInputEvent (0x0x7f5a266d1548)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+
+Class QTabletEvent
+ size=128 align=8
+ base size=128 base align=8
+QTabletEvent (0x0x7f5a266d15b0) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16u)
+ QInputEvent (0x0x7f5a266d1618) 0
+ primary-for QTabletEvent (0x0x7f5a266d15b0)
+ QEvent (0x0x7f5a266d3480) 0
+ primary-for QInputEvent (0x0x7f5a266d1618)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f5a266d1680) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16u)
+ QInputEvent (0x0x7f5a266d16e8) 0
+ primary-for QNativeGestureEvent (0x0x7f5a266d1680)
+ QEvent (0x0x7f5a266d34e0) 0
+ primary-for QInputEvent (0x0x7f5a266d16e8)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+
+Class QKeyEvent
+ size=64 align=8
+ base size=59 base align=8
+QKeyEvent (0x0x7f5a266d1750) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16u)
+ QInputEvent (0x0x7f5a266d17b8) 0
+ primary-for QKeyEvent (0x0x7f5a266d1750)
+ QEvent (0x0x7f5a266d3540) 0
+ primary-for QInputEvent (0x0x7f5a266d17b8)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+
+Class QFocusEvent
+ size=24 align=8
+ base size=24 base align=8
+QFocusEvent (0x0x7f5a266d1820) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16u)
+ QEvent (0x0x7f5a266d35a0) 0
+ primary-for QFocusEvent (0x0x7f5a266d1820)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+
+Class QPaintEvent
+ size=56 align=8
+ base size=49 base align=8
+QPaintEvent (0x0x7f5a266d1888) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16u)
+ QEvent (0x0x7f5a266d3600) 0
+ primary-for QPaintEvent (0x0x7f5a266d1888)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+
+Class QMoveEvent
+ size=40 align=8
+ base size=36 base align=8
+QMoveEvent (0x0x7f5a266d18f0) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16u)
+ QEvent (0x0x7f5a266d3660) 0
+ primary-for QMoveEvent (0x0x7f5a266d18f0)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+
+Class QExposeEvent
+ size=32 align=8
+ base size=32 base align=8
+QExposeEvent (0x0x7f5a266d1958) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16u)
+ QEvent (0x0x7f5a266d36c0) 0
+ primary-for QExposeEvent (0x0x7f5a266d1958)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=24 base align=8
+QPlatformSurfaceEvent (0x0x7f5a266d19c0) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16u)
+ QEvent (0x0x7f5a266d3720) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f5a266d19c0)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+
+Class QResizeEvent
+ size=40 align=8
+ base size=36 base align=8
+QResizeEvent (0x0x7f5a266d1a28) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16u)
+ QEvent (0x0x7f5a266d3780) 0
+ primary-for QResizeEvent (0x0x7f5a266d1a28)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+
+Class QCloseEvent
+ size=24 align=8
+ base size=20 base align=8
+QCloseEvent (0x0x7f5a266d1a90) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16u)
+ QEvent (0x0x7f5a266d37e0) 0
+ primary-for QCloseEvent (0x0x7f5a266d1a90)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+
+Class QIconDragEvent
+ size=24 align=8
+ base size=20 base align=8
+QIconDragEvent (0x0x7f5a266d1af8) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16u)
+ QEvent (0x0x7f5a266d3840) 0
+ primary-for QIconDragEvent (0x0x7f5a266d1af8)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+
+Class QShowEvent
+ size=24 align=8
+ base size=20 base align=8
+QShowEvent (0x0x7f5a266d1b60) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16u)
+ QEvent (0x0x7f5a266d38a0) 0
+ primary-for QShowEvent (0x0x7f5a266d1b60)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+
+Class QHideEvent
+ size=24 align=8
+ base size=20 base align=8
+QHideEvent (0x0x7f5a266d1bc8) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16u)
+ QEvent (0x0x7f5a266d3900) 0
+ primary-for QHideEvent (0x0x7f5a266d1bc8)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+
+Class QContextMenuEvent
+ size=56 align=8
+ base size=49 base align=8
+QContextMenuEvent (0x0x7f5a266d1c30) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16u)
+ QInputEvent (0x0x7f5a266d1c98) 0
+ primary-for QContextMenuEvent (0x0x7f5a266d1c30)
+ QEvent (0x0x7f5a266d3960) 0
+ primary-for QInputEvent (0x0x7f5a266d1c98)
+
+Class QInputMethodEvent::Attribute
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodEvent::Attribute (0x0x7f5a266d3a20) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+
+Class QInputMethodEvent
+ size=56 align=8
+ base size=56 base align=8
+QInputMethodEvent (0x0x7f5a266d1d00) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16u)
+ QEvent (0x0x7f5a266d39c0) 0
+ primary-for QInputMethodEvent (0x0x7f5a266d1d00)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=24 align=8
+ base size=24 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f5a266d3ea0) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+
+Class QInputMethodQueryEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodQueryEvent (0x0x7f5a26447068) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16u)
+ QEvent (0x0x7f5a266d3e40) 0
+ primary-for QInputMethodQueryEvent (0x0x7f5a26447068)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+
+Class QDropEvent
+ size=72 align=8
+ base size=72 base align=8
+QDropEvent (0x0x7f5a26447340) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16u)
+ QEvent (0x0x7f5a2647e240) 0
+ primary-for QDropEvent (0x0x7f5a26447340)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+
+Class QDragMoveEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragMoveEvent (0x0x7f5a264473a8) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16u)
+ QDropEvent (0x0x7f5a26447410) 0
+ primary-for QDragMoveEvent (0x0x7f5a264473a8)
+ QEvent (0x0x7f5a2647e2a0) 0
+ primary-for QDropEvent (0x0x7f5a26447410)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+
+Class QDragEnterEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragEnterEvent (0x0x7f5a26447478) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16u)
+ QDragMoveEvent (0x0x7f5a264474e0) 0
+ primary-for QDragEnterEvent (0x0x7f5a26447478)
+ QDropEvent (0x0x7f5a26447548) 0
+ primary-for QDragMoveEvent (0x0x7f5a264474e0)
+ QEvent (0x0x7f5a2647e300) 0
+ primary-for QDropEvent (0x0x7f5a26447548)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+
+Class QDragLeaveEvent
+ size=24 align=8
+ base size=20 base align=8
+QDragLeaveEvent (0x0x7f5a264475b0) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16u)
+ QEvent (0x0x7f5a2647e360) 0
+ primary-for QDragLeaveEvent (0x0x7f5a264475b0)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+
+Class QHelpEvent
+ size=40 align=8
+ base size=36 base align=8
+QHelpEvent (0x0x7f5a26447618) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16u)
+ QEvent (0x0x7f5a2647e3c0) 0
+ primary-for QHelpEvent (0x0x7f5a26447618)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+
+Class QStatusTipEvent
+ size=32 align=8
+ base size=32 base align=8
+QStatusTipEvent (0x0x7f5a26447680) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16u)
+ QEvent (0x0x7f5a2647e420) 0
+ primary-for QStatusTipEvent (0x0x7f5a26447680)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+
+Class QWhatsThisClickedEvent
+ size=32 align=8
+ base size=32 base align=8
+QWhatsThisClickedEvent (0x0x7f5a264476e8) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16u)
+ QEvent (0x0x7f5a2647e480) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f5a264476e8)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+
+Class QActionEvent
+ size=40 align=8
+ base size=40 base align=8
+QActionEvent (0x0x7f5a26447750) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16u)
+ QEvent (0x0x7f5a2647e4e0) 0
+ primary-for QActionEvent (0x0x7f5a26447750)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+
+Class QFileOpenEvent
+ size=40 align=8
+ base size=40 base align=8
+QFileOpenEvent (0x0x7f5a264477b8) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16u)
+ QEvent (0x0x7f5a2647e540) 0
+ primary-for QFileOpenEvent (0x0x7f5a264477b8)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QToolBarChangeEvent (0x0x7f5a26447820) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16u)
+ QEvent (0x0x7f5a2647e5a0) 0
+ primary-for QToolBarChangeEvent (0x0x7f5a26447820)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+
+Class QShortcutEvent
+ size=40 align=8
+ base size=40 base align=8
+QShortcutEvent (0x0x7f5a26447888) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16u)
+ QEvent (0x0x7f5a2647e600) 0
+ primary-for QShortcutEvent (0x0x7f5a26447888)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+
+Class QWindowStateChangeEvent
+ size=32 align=8
+ base size=25 base align=8
+QWindowStateChangeEvent (0x0x7f5a264478f0) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16u)
+ QEvent (0x0x7f5a2647e660) 0
+ primary-for QWindowStateChangeEvent (0x0x7f5a264478f0)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f5a2647e6c0) 0
+
+Class QTouchEvent::TouchPoint
+ size=8 align=8
+ base size=8 base align=8
+QTouchEvent::TouchPoint (0x0x7f5a2647ed80) 0
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+
+Class QTouchEvent
+ size=72 align=8
+ base size=72 base align=8
+QTouchEvent (0x0x7f5a26447f70) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16u)
+ QInputEvent (0x0x7f5a264ed000) 0
+ primary-for QTouchEvent (0x0x7f5a26447f70)
+ QEvent (0x0x7f5a2647ed20) 0
+ primary-for QInputEvent (0x0x7f5a264ed000)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+
+Class QScrollPrepareEvent
+ size=112 align=8
+ base size=112 base align=8
+QScrollPrepareEvent (0x0x7f5a261ac820) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16u)
+ QEvent (0x0x7f5a261b0420) 0
+ primary-for QScrollPrepareEvent (0x0x7f5a261ac820)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+
+Class QScrollEvent
+ size=64 align=8
+ base size=60 base align=8
+QScrollEvent (0x0x7f5a261ac888) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16u)
+ QEvent (0x0x7f5a261b0480) 0
+ primary-for QScrollEvent (0x0x7f5a261ac888)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+
+Class QScreenOrientationChangeEvent
+ size=40 align=8
+ base size=36 base align=8
+QScreenOrientationChangeEvent (0x0x7f5a261ac8f0) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16u)
+ QEvent (0x0x7f5a261b04e0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f5a261ac8f0)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=24 base align=8
+QApplicationStateChangeEvent (0x0x7f5a261ac958) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16u)
+ QEvent (0x0x7f5a261b0540) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f5a261ac958)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f5a261b05a0) 0
+
+Class QPolygon
+ size=8 align=8
+ base size=8 base align=8
+QPolygon (0x0x7f5a262646e8) 0
+ QVector<QPoint> (0x0x7f5a2626f2a0) 0
+
+Class QPolygonF
+ size=8 align=8
+ base size=8 base align=8
+QPolygonF (0x0x7f5a26264a90) 0
+ QVector<QPointF> (0x0x7f5a2626f720) 0
+
+Class QMatrix
+ size=48 align=8
+ base size=48 base align=8
+QMatrix (0x0x7f5a2626fae0) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f5a2626fde0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f5a2626fd80) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f5a25fb77e0) 0
+
+Class QTransform
+ size=88 align=8
+ base size=88 base align=8
+QTransform (0x0x7f5a25fb7900) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0u
+24 0u
+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=24 align=8
+ base size=24 base align=8
+QPaintDevice (0x0x7f5a26055060) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16u)
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f5a260550c0) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10u 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=32 align=8
+ base size=32 base align=8
+QImage (0x0x7f5a26108958) 0
+ vptr=((& QImage::_ZTV6QImage) + 16u)
+ QPaintDevice (0x0x7f5a26055b40) 0
+ primary-for QImage (0x0x7f5a26108958)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10u 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=32 align=8
+ base size=32 base align=8
+QPixmap (0x0x7f5a25df04e0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16u)
+ QPaintDevice (0x0x7f5a25ddfae0) 0
+ primary-for QPixmap (0x0x7f5a25df04e0)
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f5a25ddfde0) 0
+
+Class QBrushData
+ size=112 align=8
+ base size=112 base align=8
+QBrushData (0x0x7f5a25e775a0) 0
+
+Class QGradient
+ size=64 align=8
+ base size=64 base align=8
+QGradient (0x0x7f5a25e77600) 0
+
+Class QLinearGradient
+ size=64 align=8
+ base size=64 base align=8
+QLinearGradient (0x0x7f5a25df0e38) 0
+ QGradient (0x0x7f5a25e778a0) 0
+
+Class QRadialGradient
+ size=64 align=8
+ base size=64 base align=8
+QRadialGradient (0x0x7f5a25df0ea0) 0
+ QGradient (0x0x7f5a25e77900) 0
+
+Class QConicalGradient
+ size=64 align=8
+ base size=64 base align=8
+QConicalGradient (0x0x7f5a25df0f08) 0
+ QGradient (0x0x7f5a25e77960) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f5a25e779c0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f5a25f70c00) 0
+
+Class QTextOption
+ size=32 align=8
+ base size=32 base align=8
+QTextOption (0x0x7f5a25f70ba0) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f5a25ba93c0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f5a25ba9ae0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f5a25c167b8) 0
+ QTextFormat (0x0x7f5a25c59960) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f5a25d4a068) 0
+ QTextFormat (0x0x7f5a25c59c00) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f5a25d4a2d8) 0
+ QTextFormat (0x0x7f5a25c59ea0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f5a25d4a4e0) 0
+ QTextCharFormat (0x0x7f5a25d4a548) 0
+ QTextFormat (0x0x7f5a25d87180) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f5a25d4a750) 0
+ QTextFormat (0x0x7f5a25d87420) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f5a25d4a958) 0
+ QTextFrameFormat (0x0x7f5a25d4a9c0) 0
+ QTextFormat (0x0x7f5a25d876c0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f5a25d4abc8) 0
+ QTextCharFormat (0x0x7f5a25d4ac30) 0
+ QTextFormat (0x0x7f5a25d879c0) 0
+
+Class QFontDatabase
+ size=8 align=8
+ base size=8 base align=8
+QFontDatabase (0x0x7f5a25d87c60) 0
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f5a25d87cc0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f5a25a481e0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f5a25a484e0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f5a25a487e0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f5a25a488a0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f5a25a48840) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f5a25b36300) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6u 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 (0x0x7f5a25b36360) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16u)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f5a25b36420) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17u 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 (0x0x7f5a25a4c478) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16u)
+ QObject (0x0x7f5a25b363c0) 0
+ primary-for QTextDocument (0x0x7f5a25a4c478)
+
+Class QPalette::Data
+ size=4 align=4
+ base size=4 base align=4
+QPalette::Data (0x0x7f5a25b36660) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f5a25b36600) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f5a25854720) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f5a25854780) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=64 align=8
+ base size=64 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f5a258547e0) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f5a25851c98) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16u)
+ QObject (0x0x7f5a258546c0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f5a25851c98)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7f5a25854d80) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16u)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f5a25854ea0) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7f5a25854f00) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16u)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f5a25854e40) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0u
+24 0u
+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 (0x0x7f5a25909120) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16u)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0u
+24 0u
+32 (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 (0x0x7f5a25909180) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16u)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0u
+24 0u
+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 (0x0x7f5a259091e0) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16u)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0u
+24 0u
+32 (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 (0x0x7f5a25909240) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16u)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0u
+24 0u
+32 (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 (0x0x7f5a259092a0) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16u)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0u
+24 0u
+32 (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 (0x0x7f5a25909300) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16u)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0u
+24 0u
+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 (0x0x7f5a25909360) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16u)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0u
+24 0u
+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 (0x0x7f5a259093c0) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16u)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5u 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 (0x0x7f5a25909420) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16u)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5u 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 (0x0x7f5a258d56e8) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7f5a25909960) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f5a258d56e8)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5u 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 (0x0x7f5a258d5750) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16u)
+ QAccessibleEvent (0x0x7f5a259099c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5a258d5750)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5u 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 (0x0x7f5a258d57b8) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7f5a258d5820) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f5a258d57b8)
+ QAccessibleEvent (0x0x7f5a25909a20) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5a258d5820)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTextInsertEvent (0x0x7f5a258d5888) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7f5a258d58f0) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f5a258d5888)
+ QAccessibleEvent (0x0x7f5a25909a80) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5a258d58f0)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTextRemoveEvent (0x0x7f5a258d5958) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7f5a258d59c0) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f5a258d5958)
+ QAccessibleEvent (0x0x7f5a25909ae0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5a258d59c0)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=56 align=8
+ base size=56 base align=8
+QAccessibleTextUpdateEvent (0x0x7f5a258d5a28) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16u)
+ QAccessibleTextCursorEvent (0x0x7f5a258d5a90) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f5a258d5a28)
+ QAccessibleEvent (0x0x7f5a25909b40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5a258d5a90)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleValueChangeEvent (0x0x7f5a258d5af8) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7f5a25909ba0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f5a258d5af8)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5u 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 (0x0x7f5a258d5b60) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16u)
+ QAccessibleEvent (0x0x7f5a25909c00) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f5a258d5b60)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7f5a25909cc0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16u)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f5a25909d80) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f5a258d5bc8) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16u)
+ QObject (0x0x7f5a25909d20) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f5a258d5bc8)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0u
+24 0u
+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 (0x0x7f5a258d5c30) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16u)
+ QAccessibleInterface (0x0x7f5a25909de0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f5a258d5c30)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23u 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 (0x0x7f5a258d5c98) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16u)
+ QAccessibleObject (0x0x7f5a258d5d00) 0
+ primary-for QAccessibleApplication (0x0x7f5a258d5c98)
+ QAccessibleInterface (0x0x7f5a25909e40) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f5a258d5d00)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f5a25909f00) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f5a258d5d68) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16u)
+ QObject (0x0x7f5a25909ea0) 0
+ primary-for QAccessiblePlugin (0x0x7f5a258d5d68)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f5a25909f60) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0u
+24 0u
+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 (0x0x7f5a25693180) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16u)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f5a25693300) 0
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f5a2575c6c0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f5a253e7cc0) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 45u 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::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI7QWindow)
+312 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+320 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f5a253ff380) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16u)
+ QObject (0x0x7f5a253e7c00) 0
+ primary-for QWindow (0x0x7f5a253ff380)
+ QSurface (0x0x7f5a253e7c60) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 312u)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f5a253e7de0) 0
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10u 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=32 align=8
+ base size=32 base align=8
+QBitmap (0x0x7f5a253eadd0) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16u)
+ QPixmap (0x0x7f5a253eae38) 0
+ primary-for QBitmap (0x0x7f5a253eadd0)
+ QPaintDevice (0x0x7f5a253e7ea0) 0
+ primary-for QPixmap (0x0x7f5a253eae38)
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f5a25479240) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14u 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 (0x0x7f5a2547d0d0) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16u)
+ QObject (0x0x7f5a254791e0) 0
+ primary-for QClipboard (0x0x7f5a2547d0d0)
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f5a254792a0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f5a25479360) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14u 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 (0x0x7f5a2547d138) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16u)
+ QObject (0x0x7f5a25479300) 0
+ primary-for QDrag (0x0x7f5a2547d138)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f5a254793c0) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f5a25479660) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f5a25479960) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f5a2554ee40) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f5a2547d9c0) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16u)
+ QObject (0x0x7f5a2554ede0) 0
+ primary-for QGenericPlugin (0x0x7f5a2547d9c0)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f5a2554eea0) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f5a2554ef60) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14u 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 (0x0x7f5a2547da28) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16u)
+ QObject (0x0x7f5a2554ef00) 0
+ primary-for QInputMethod (0x0x7f5a2547da28)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f5a2525f060) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16u 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 (0x0x7f5a2547da90) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16u)
+ QCoreApplication (0x0x7f5a2547daf8) 0
+ primary-for QGuiApplication (0x0x7f5a2547da90)
+ QObject (0x0x7f5a2525f000) 0
+ primary-for QCoreApplication (0x0x7f5a2547daf8)
+
+Class QIconEngine::AvailableSizesArgument
+ size=16 align=8
+ base size=16 base align=8
+QIconEngine::AvailableSizesArgument (0x0x7f5a2525f5a0) 0
+
+Class QIconEngine::ScaledPixmapArgument
+ size=56 align=8
+ base size=56 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f5a2525f720) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0u
+24 0u
+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::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f5a2525f540) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16u)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f5a2525f7e0) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f5a25294068) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16u)
+ QObject (0x0x7f5a2525f780) 0
+ primary-for QIconEnginePlugin (0x0x7f5a25294068)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0u
+24 0u
+32 (int (*)(...))QImageIOHandler::name
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QImageIOHandler::write
+64 (int (*)(...))QImageIOHandler::option
+72 (int (*)(...))QImageIOHandler::setOption
+80 (int (*)(...))QImageIOHandler::supportsOption
+88 (int (*)(...))QImageIOHandler::jumpToNextImage
+96 (int (*)(...))QImageIOHandler::jumpToImage
+104 (int (*)(...))QImageIOHandler::loopCount
+112 (int (*)(...))QImageIOHandler::imageCount
+120 (int (*)(...))QImageIOHandler::nextImageDelay
+128 (int (*)(...))QImageIOHandler::currentImageNumber
+136 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f5a2525f840) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16u)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f5a2525f9c0) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f5a252940d0) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16u)
+ QObject (0x0x7f5a2525f960) 0
+ primary-for QImageIOPlugin (0x0x7f5a252940d0)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f5a2525fba0) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f5a2525fc00) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f5a2525fc60) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f5a2525ff00) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f5a24fac1e0) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f5a24fac7e0) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f5a24facf60) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14u 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 (0x0x7f5a250b42d8) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16u)
+ QObject (0x0x7f5a24facf00) 0
+ primary-for QMovie (0x0x7f5a250b42d8)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f5a24db60c0) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26u 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 (0x0x7f5a25175b60) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16u)
+ QObject (0x0x7f5a24db6000) 0
+ primary-for QOffscreenSurface (0x0x7f5a25175b60)
+ QSurface (0x0x7f5a24db6060) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160u)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f5a24db6180) 0
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f5a24db6360) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f5a24b1be40) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f5a24b1bea0) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f5a24b1bf00) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5u 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 (0x0x7f5a24b1bf60) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16u)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7f5a24b67060) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f5a24b3f548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67000) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f5a24b67180) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f5a24b3f5b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67120) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f5a24b672a0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f5a24b3f618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67240) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f5a24b673c0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f5a24b3f680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67360) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f5a24b67540) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f5a24b3f6e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b674e0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f5a24b67660) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f5a24b3f750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67600) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f5a24b67780) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f5a24b3f7b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67720) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f5a24b678a0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f5a24b3f820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67840) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f5a24b679c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f5a24b3f888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67960) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f5a24b67ae0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f5a24b3f8f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67a80) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f5a24b67c00) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f5a24b3f958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67ba0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f5a24b67d20) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f5a24b3f9c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67cc0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f5a24b67e40) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f5a24b3fa28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67de0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f5a24b67f60) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f5a24b3fa90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a24b67f00) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f5a2485e0c0) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f5a24b3faf8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e060) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f5a2485e1e0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f5a24b3fb60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e180) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f5a2485e300) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f5a24b3fbc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e2a0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f5a2485e480) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f5a24b3fc30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e420) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f5a2485e5a0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f5a24b3fc98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e540) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f5a2485e6c0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f5a24b3fd00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e660) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f5a2485e7e0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f5a24b3fd68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e780) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f5a2485e900) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f5a24b3fdd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e8a0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f5a2485ea20) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f5a24b3fe38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485e9c0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f5a2485eb40) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f5a24b3fea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485eae0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f5a2485ec60) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f5a24b3ff08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485ec00) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f5a2485ed80) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f5a24b3ff70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485ed20) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f5a2485eea0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f5a24972000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f5a2485ee40) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f5a2485ef60) 0
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f5a2498c960) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14u 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 (0x0x7f5a24972a28) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16u)
+ QObject (0x0x7f5a2498c900) 0
+ primary-for QOpenGLContextGroup (0x0x7f5a24972a28)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f5a2498ca20) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14u 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 (0x0x7f5a24972a90) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16u)
+ QObject (0x0x7f5a2498c9c0) 0
+ primary-for QOpenGLContext (0x0x7f5a24972a90)
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f5a2498ca80) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f5a2461d2a0) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14u 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 (0x0x7f5a24972f08) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16u)
+ QObject (0x0x7f5a2461d240) 0
+ primary-for QOpenGLDebugLogger (0x0x7f5a24972f08)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f5a2461d420) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f5a2461d660) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f5a2461d600) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f5a246e61a0) 0
+ QOpenGLFunctions (0x0x7f5a243efd80) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f5a243efe40) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f5a246e6208) 0
+ QOpenGLFunctionsPrivate (0x0x7f5a243efde0) 0
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4u 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 (0x0x7f5a2425a540) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16u)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f5a2425a660) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11u 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=32 align=8
+ base size=32 base align=8
+QOpenGLPaintDevice (0x0x7f5a246e64e0) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16u)
+ QPaintDevice (0x0x7f5a2425a6c0) 0
+ primary-for QOpenGLPaintDevice (0x0x7f5a246e64e0)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f5a2425a7e0) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f5a2425ab40) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14u 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 (0x0x7f5a246e66e8) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16u)
+ QObject (0x0x7f5a2425aae0) 0
+ primary-for QOpenGLShader (0x0x7f5a246e66e8)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f5a2425ad80) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15u 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 (0x0x7f5a246e6820) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16u)
+ QObject (0x0x7f5a2425ad20) 0
+ primary-for QOpenGLShaderProgram (0x0x7f5a246e6820)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f5a2425ade0) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f5a23fce0c0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f5a23fce240) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14u 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 (0x0x7f5a246e6958) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16u)
+ QObject (0x0x7f5a23fce1e0) 0
+ primary-for QOpenGLTimerQuery (0x0x7f5a246e6958)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f5a23fce300) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14u 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 (0x0x7f5a246e69c0) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16u)
+ QObject (0x0x7f5a23fce2a0) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f5a246e69c0)
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f5a23fce3c0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f5a23fce420) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14u 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 (0x0x7f5a246e6a28) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16u)
+ QObject (0x0x7f5a23fce360) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f5a246e6a28)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f5a23fce5a0) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 58u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QPaintDeviceWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))-16
+328 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+336 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+384 (int (*)(...))-40
+392 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+400 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+416 (int (*)(...))QPaintDevice::devType
+424 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+440 (int (*)(...))QPaintDevice::initPainter
+448 (int (*)(...))QPaintDevice::redirected
+456 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=64 align=8
+ base size=64 base align=8
+QPaintDeviceWindow (0x0x7f5a24036a80) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16u)
+ QWindow (0x0x7f5a24036af0) 0
+ primary-for QPaintDeviceWindow (0x0x7f5a24036a80)
+ QObject (0x0x7f5a23fce480) 0
+ primary-for QWindow (0x0x7f5a24036af0)
+ QSurface (0x0x7f5a23fce4e0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 336u)
+ QPaintDevice (0x0x7f5a23fce540) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 400u)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f5a23fce720) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 64u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QOpenGLWindow::paintEvent
+304 (int (*)(...))QOpenGLWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QOpenGLWindow::initializeGL
+328 (int (*)(...))QOpenGLWindow::resizeGL
+336 (int (*)(...))QOpenGLWindow::paintGL
+344 (int (*)(...))QOpenGLWindow::paintUnderGL
+352 (int (*)(...))QOpenGLWindow::paintOverGL
+360 (int (*)(...))QOpenGLWindow::redirected
+368 (int (*)(...))-16
+376 (int (*)(...))(& _ZTI13QOpenGLWindow)
+384 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+400 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+432 (int (*)(...))-40
+440 (int (*)(...))(& _ZTI13QOpenGLWindow)
+448 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+464 (int (*)(...))QPaintDevice::devType
+472 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+480 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QPaintDevice::initPainter
+496 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+504 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLWindow (0x0x7f5a246e6af8) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16u)
+ QPaintDeviceWindow (0x0x7f5a24036e70) 0
+ primary-for QOpenGLWindow (0x0x7f5a246e6af8)
+ QWindow (0x0x7f5a24036ee0) 0
+ primary-for QPaintDeviceWindow (0x0x7f5a24036e70)
+ QObject (0x0x7f5a23fce600) 0
+ primary-for QWindow (0x0x7f5a24036ee0)
+ QSurface (0x0x7f5a23fce660) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 384u)
+ QPaintDevice (0x0x7f5a23fce6c0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 448u)
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f5a23fce780) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f5a240b3180) 0
+
+Class QPagedPaintDevice::Margins
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice::Margins (0x0x7f5a240b3ba0) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0u
+24 0u
+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::setPageSize
+96 (int (*)(...))QPagedPaintDevice::setPageSizeMM
+104 (int (*)(...))QPagedPaintDevice::setMargins
+
+Class QPagedPaintDevice
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice (0x0x7f5a240a0820) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16u)
+ QPaintDevice (0x0x7f5a240b3b40) 0
+ primary-for QPagedPaintDevice (0x0x7f5a240a0820)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f5a240b3c60) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f5a240b3c00) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f5a23da7a80) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 24u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0u
+24 0u
+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
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f5a23da7d20) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16u)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f5a23f73000) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f5a23f73420) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 34u 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::setPageSize
+128 (int (*)(...))QPdfWriter::setPageSizeMM
+136 (int (*)(...))QPdfWriter::setMargins
+144 (int (*)(...))QPdfWriter::paintEngine
+152 (int (*)(...))QPdfWriter::metric
+160 (int (*)(...))-16
+168 (int (*)(...))(& _ZTI10QPdfWriter)
+176 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+184 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+192 (int (*)(...))QPaintDevice::devType
+200 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+208 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+216 (int (*)(...))QPaintDevice::initPainter
+224 (int (*)(...))QPaintDevice::redirected
+232 (int (*)(...))QPaintDevice::sharedPainter
+240 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+248 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter11setPageSizeEN17QPagedPaintDevice8PageSizeE
+256 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter13setPageSizeMMERK6QSizeF
+264 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter10setMarginsERKN17QPagedPaintDevice7MarginsE
+
+Class QPdfWriter
+ size=48 align=8
+ base size=48 base align=8
+QPdfWriter (0x0x7f5a23bb3e00) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16u)
+ QObject (0x0x7f5a23f73360) 0
+ primary-for QPdfWriter (0x0x7f5a23bb3e00)
+ QPagedPaintDevice (0x0x7f5a23f02888) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 176u)
+ QPaintDevice (0x0x7f5a23f733c0) 16
+ primary-for QPagedPaintDevice (0x0x7f5a23f02888)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11u 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=32 align=8
+ base size=32 base align=8
+QPicture (0x0x7f5a23f028f0) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16u)
+ QPaintDevice (0x0x7f5a23f735a0) 0
+ primary-for QPicture (0x0x7f5a23f028f0)
+
+Class QPictureIO
+ size=8 align=8
+ base size=8 base align=8
+QPictureIO (0x0x7f5a23f738a0) 0
+
+Class QPictureFormatPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPictureFormatPlugin::QPrivateSignal (0x0x7f5a23f73960) 0 empty
+
+Vtable for QPictureFormatPlugin
+QPictureFormatPlugin::_ZTV20QPictureFormatPlugin: 17u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QPictureFormatPlugin)
+16 (int (*)(...))QPictureFormatPlugin::metaObject
+24 (int (*)(...))QPictureFormatPlugin::qt_metacast
+32 (int (*)(...))QPictureFormatPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPictureFormatPlugin::loadPicture
+120 (int (*)(...))QPictureFormatPlugin::savePicture
+128 (int (*)(...))__cxa_pure_virtual
+
+Class QPictureFormatPlugin
+ size=16 align=8
+ base size=16 base align=8
+QPictureFormatPlugin (0x0x7f5a23f02af8) 0
+ vptr=((& QPictureFormatPlugin::_ZTV20QPictureFormatPlugin) + 16u)
+ QObject (0x0x7f5a23f73900) 0
+ primary-for QPictureFormatPlugin (0x0x7f5a23f02af8)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f5a23f73a20) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f5a23f739c0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f5a23cb4ba0) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 59u 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QRasterWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QRasterWindow::redirected
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI13QRasterWindow)
+344 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+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 (*)(...))(& _ZTI13QRasterWindow)
+408 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=64 align=8
+ base size=64 base align=8
+QRasterWindow (0x0x7f5a23cc1208) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16u)
+ QPaintDeviceWindow (0x0x7f5a23cbbbd0) 0
+ primary-for QRasterWindow (0x0x7f5a23cc1208)
+ QWindow (0x0x7f5a23cbbc40) 0
+ primary-for QPaintDeviceWindow (0x0x7f5a23cbbbd0)
+ QObject (0x0x7f5a23cb4a80) 0
+ primary-for QWindow (0x0x7f5a23cbbc40)
+ QSurface (0x0x7f5a23cb4ae0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 344u)
+ QPaintDevice (0x0x7f5a23cb4b40) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 408u)
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f5a23cb4c60) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14u 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 (0x0x7f5a23cc12d8) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16u)
+ QObject (0x0x7f5a23cb4c00) 0
+ primary-for QScreen (0x0x7f5a23cc12d8)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f5a23cb4d20) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14u 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 (0x0x7f5a23cc1340) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16u)
+ QObject (0x0x7f5a23cb4cc0) 0
+ primary-for QSessionManager (0x0x7f5a23cc1340)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::setData
+48 (int (*)(...))QStandardItem::clone
+56 (int (*)(...))QStandardItem::type
+64 (int (*)(...))QStandardItem::read
+72 (int (*)(...))QStandardItem::write
+80 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f5a23cb4d80) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16u)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f5a23d524e0) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 48u 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 (*)(...))QStandardItemModel::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::mimeTypes
+216 (int (*)(...))QStandardItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QStandardItemModel::dropMimeData
+240 (int (*)(...))QStandardItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStandardItemModel::insertRows
+264 (int (*)(...))QStandardItemModel::insertColumns
+272 (int (*)(...))QStandardItemModel::removeRows
+280 (int (*)(...))QStandardItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStandardItemModel::flags
+328 (int (*)(...))QStandardItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f5a23cc19c0) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16u)
+ QAbstractItemModel (0x0x7f5a23cc1a28) 0
+ primary-for QStandardItemModel (0x0x7f5a23cc19c0)
+ QObject (0x0x7f5a23d52480) 0
+ primary-for QAbstractItemModel (0x0x7f5a23cc1a28)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f5a23d52540) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f5a23d529c0) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14u 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 (0x0x7f5a23cc1c30) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16u)
+ QObject (0x0x7f5a23d52960) 0
+ primary-for QStyleHints (0x0x7f5a23cc1c30)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f5a23d52a80) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14u 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 (0x0x7f5a23cc1c98) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16u)
+ QObject (0x0x7f5a23d52a20) 0
+ primary-for QTextObject (0x0x7f5a23cc1c98)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f5a23d52b40) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17u 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 (0x0x7f5a23cc1d00) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16u)
+ QTextObject (0x0x7f5a23cc1d68) 0
+ primary-for QTextBlockGroup (0x0x7f5a23cc1d00)
+ QObject (0x0x7f5a23d52ae0) 0
+ primary-for QTextObject (0x0x7f5a23cc1d68)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4u 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 (0x0x7f5a23d52ba0) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16u)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f5a23d52c60) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f5a23d52cc0) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14u 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 (0x0x7f5a23cc1dd0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16u)
+ QTextObject (0x0x7f5a23cc1e38) 0
+ primary-for QTextFrame (0x0x7f5a23cc1dd0)
+ QObject (0x0x7f5a23d52c00) 0
+ primary-for QTextObject (0x0x7f5a23cc1e38)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4u 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 (0x0x7f5a23d52f60) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16u)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f5a23a9d060) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f5a23a9d000) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f5a23a9d540) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f5a23a9d840) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f5a23a97548) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16u)
+ QObject (0x0x7f5a23a9d7e0) 0
+ primary-for QSyntaxHighlighter (0x0x7f5a23a97548)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f5a23a9d8a0) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f5a23a9d900) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f5a23a9d9c0) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17u 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 (0x0x7f5a23a975b0) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16u)
+ QTextBlockGroup (0x0x7f5a23a97618) 0
+ primary-for QTextList (0x0x7f5a23a975b0)
+ QTextObject (0x0x7f5a23a97680) 0
+ primary-for QTextBlockGroup (0x0x7f5a23a97618)
+ QObject (0x0x7f5a23a9d960) 0
+ primary-for QTextObject (0x0x7f5a23a97680)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f5a23a9da20) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f5a23a9dae0) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14u 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 (0x0x7f5a23a976e8) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16u)
+ QTextFrame (0x0x7f5a23a97750) 0
+ primary-for QTextTable (0x0x7f5a23a976e8)
+ QTextObject (0x0x7f5a23a977b8) 0
+ primary-for QTextFrame (0x0x7f5a23a97750)
+ QObject (0x0x7f5a23a9da80) 0
+ primary-for QTextObject (0x0x7f5a23a977b8)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f5a23a9dba0) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f5a23a97820) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16u)
+ QObject (0x0x7f5a23a9db40) 0
+ primary-for QValidator (0x0x7f5a23a97820)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f5a23a9dc60) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 17u 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
+128 (int (*)(...))QIntValidator::setRange
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f5a23a97888) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16u)
+ QValidator (0x0x7f5a23a978f0) 0
+ primary-for QIntValidator (0x0x7f5a23a97888)
+ QObject (0x0x7f5a23a9dc00) 0
+ primary-for QValidator (0x0x7f5a23a978f0)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f5a23a9dd20) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 17u 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
+128 (int (*)(...))QDoubleValidator::setRange
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f5a23a97958) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16u)
+ QValidator (0x0x7f5a23a979c0) 0
+ primary-for QDoubleValidator (0x0x7f5a23a97958)
+ QObject (0x0x7f5a23a9dcc0) 0
+ primary-for QValidator (0x0x7f5a23a979c0)
+
+Class QRegExpValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegExpValidator::QPrivateSignal (0x0x7f5a23a9de40) 0 empty
+
+Vtable for QRegExpValidator
+QRegExpValidator::_ZTV16QRegExpValidator: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QRegExpValidator)
+16 (int (*)(...))QRegExpValidator::metaObject
+24 (int (*)(...))QRegExpValidator::qt_metacast
+32 (int (*)(...))QRegExpValidator::qt_metacall
+40 (int (*)(...))QRegExpValidator::~QRegExpValidator
+48 (int (*)(...))QRegExpValidator::~QRegExpValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegExpValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegExpValidator
+ size=24 align=8
+ base size=24 base align=8
+QRegExpValidator (0x0x7f5a23a97a28) 0
+ vptr=((& QRegExpValidator::_ZTV16QRegExpValidator) + 16u)
+ QValidator (0x0x7f5a23a97a90) 0
+ primary-for QRegExpValidator (0x0x7f5a23a97a28)
+ QObject (0x0x7f5a23a9dde0) 0
+ primary-for QValidator (0x0x7f5a23a97a90)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f5a23a9df00) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16u 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 (0x0x7f5a23a97af8) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16u)
+ QValidator (0x0x7f5a23a97b60) 0
+ primary-for QRegularExpressionValidator (0x0x7f5a23a97af8)
+ QObject (0x0x7f5a23a9dea0) 0
+ primary-for QValidator (0x0x7f5a23a97b60)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f5a23a9df60) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f5a237a94e0) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f5a237a9ba0) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f5a237ee3a8) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16u)
+ QObject (0x0x7f5a237a9b40) 0
+ primary-for QAbstractNetworkCache (0x0x7f5a237ee3a8)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f5a237a9c60) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f5a237ee410) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16u)
+ QIODevice (0x0x7f5a237ee478) 0
+ primary-for QAbstractSocket (0x0x7f5a237ee410)
+ QObject (0x0x7f5a237a9c00) 0
+ primary-for QIODevice (0x0x7f5a237ee478)
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f5a2389d240) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f5a2389d2a0) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f5a2389d5a0) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f5a2389d8a0) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f5a2389dba0) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f5a2389dea0) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f5a2392f240) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14u 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 (0x0x7f5a237eeea0) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16u)
+ QObject (0x0x7f5a2392f1e0) 0
+ primary-for QDnsLookup (0x0x7f5a237eeea0)
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f5a2392f300) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f5a237eef08) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16u)
+ QAbstractSocket (0x0x7f5a237eef70) 0
+ primary-for QTcpSocket (0x0x7f5a237eef08)
+ QIODevice (0x0x7f5a2394e000) 0
+ primary-for QAbstractSocket (0x0x7f5a237eef70)
+ QObject (0x0x7f5a2392f2a0) 0
+ primary-for QIODevice (0x0x7f5a2394e000)
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f5a2392f4e0) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f5a2392f900) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f5a235f72a0) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 41u 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::writeData
+240 (int (*)(...))QSslSocket::resume
+248 (int (*)(...))QSslSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QSslSocket::disconnectFromHost
+272 (int (*)(...))QSslSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QSslSocket::setSocketDescriptor
+296 (int (*)(...))QSslSocket::setSocketOption
+304 (int (*)(...))QSslSocket::socketOption
+312 (int (*)(...))QSslSocket::waitForConnected
+320 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f5a2394e9c0) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16u)
+ QTcpSocket (0x0x7f5a2394ea28) 0
+ primary-for QSslSocket (0x0x7f5a2394e9c0)
+ QAbstractSocket (0x0x7f5a2394ea90) 0
+ primary-for QTcpSocket (0x0x7f5a2394ea28)
+ QIODevice (0x0x7f5a2394eaf8) 0
+ primary-for QAbstractSocket (0x0x7f5a2394ea90)
+ QObject (0x0x7f5a235f7240) 0
+ primary-for QIODevice (0x0x7f5a2394eaf8)
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f5a235f7360) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f5a235f73c0) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14u 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 (0x0x7f5a2394eb60) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16u)
+ QObject (0x0x7f5a235f7300) 0
+ primary-for QDtlsClientVerifier (0x0x7f5a2394eb60)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f5a235f7480) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14u 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 (0x0x7f5a2394ebc8) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16u)
+ QObject (0x0x7f5a235f7420) 0
+ primary-for QDtls (0x0x7f5a2394ebc8)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f5a235f7540) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f5a235f75a0) 0
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f5a235f7d80) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f5a237132a0) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f5a23713a80) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f5a23713de0) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14u 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 (0x0x7f5a236dae38) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16u)
+ QObject (0x0x7f5a23713d80) 0
+ primary-for QHttpMultiPart (0x0x7f5a236dae38)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f5a23713ea0) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17u 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 (0x0x7f5a236daea0) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16u)
+ QObject (0x0x7f5a23713e40) 0
+ primary-for QLocalServer (0x0x7f5a236daea0)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f5a233ba120) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 30u 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::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f5a233bb068) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16u)
+ QIODevice (0x0x7f5a233bb0d0) 0
+ primary-for QLocalSocket (0x0x7f5a233bb068)
+ QObject (0x0x7f5a233ba0c0) 0
+ primary-for QIODevice (0x0x7f5a233bb0d0)
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f5a233ba180) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f5a233ba960) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f5a2347e2a0) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 15u 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::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f5a233bbd68) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16u)
+ QObject (0x0x7f5a2347e240) 0
+ primary-for QNetworkAccessManager (0x0x7f5a233bbd68)
+
+Class QNetworkConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QNetworkConfiguration (0x0x7f5a2347e300) 0
+
+Class QNetworkConfigurationManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkConfigurationManager::QPrivateSignal (0x0x7f5a2347e780) 0 empty
+
+Vtable for QNetworkConfigurationManager
+QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QNetworkConfigurationManager)
+16 (int (*)(...))QNetworkConfigurationManager::metaObject
+24 (int (*)(...))QNetworkConfigurationManager::qt_metacast
+32 (int (*)(...))QNetworkConfigurationManager::qt_metacall
+40 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+48 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkConfigurationManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkConfigurationManager (0x0x7f5a233bbf70) 0
+ vptr=((& QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager) + 16u)
+ QObject (0x0x7f5a2347e720) 0
+ primary-for QNetworkConfigurationManager (0x0x7f5a233bbf70)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f5a2347eae0) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f5a23556300) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20u 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 (0x0x7f5a234ec7b8) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16u)
+ QObject (0x0x7f5a235562a0) 0
+ primary-for QNetworkCookieJar (0x0x7f5a234ec7b8)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f5a23556360) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f5a23202360) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23u 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 (0x0x7f5a231fc208) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16u)
+ QAbstractNetworkCache (0x0x7f5a231fc270) 0
+ primary-for QNetworkDiskCache (0x0x7f5a231fc208)
+ QObject (0x0x7f5a23202300) 0
+ primary-for QAbstractNetworkCache (0x0x7f5a231fc270)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f5a232023c0) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f5a23202a80) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f5a232ac180) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f5a232ac7e0) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7f5a23345000) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16u)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f5a233451e0) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 36u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))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 (*)(...))QNetworkReply::writeData
+240 (int (*)(...))QNetworkReply::setReadBufferSize
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))QNetworkReply::ignoreSslErrors
+264 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+272 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f5a232e18f0) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16u)
+ QIODevice (0x0x7f5a232e1958) 0
+ primary-for QNetworkReply (0x0x7f5a232e18f0)
+ QObject (0x0x7f5a23345180) 0
+ primary-for QIODevice (0x0x7f5a232e1958)
+
+Class QNetworkSession::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkSession::QPrivateSignal (0x0x7f5a233453c0) 0 empty
+
+Vtable for QNetworkSession
+QNetworkSession::_ZTV15QNetworkSession: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QNetworkSession)
+16 (int (*)(...))QNetworkSession::metaObject
+24 (int (*)(...))QNetworkSession::qt_metacast
+32 (int (*)(...))QNetworkSession::qt_metacall
+40 (int (*)(...))QNetworkSession::~QNetworkSession
+48 (int (*)(...))QNetworkSession::~QNetworkSession
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QNetworkSession::connectNotify
+104 (int (*)(...))QNetworkSession::disconnectNotify
+
+Class QNetworkSession
+ size=24 align=8
+ base size=24 base align=8
+QNetworkSession (0x0x7f5a232e19c0) 0
+ vptr=((& QNetworkSession::_ZTV15QNetworkSession) + 16u)
+ QObject (0x0x7f5a23345360) 0
+ primary-for QNetworkSession (0x0x7f5a232e19c0)
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f5a23345960) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17u 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 (0x0x7f5a232e1af8) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16u)
+ QObject (0x0x7f5a23345900) 0
+ primary-for QTcpServer (0x0x7f5a232e1af8)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f5a233459c0) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f5a23345cc0) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f5a230104e0) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f5a230af000) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f5a230af720) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f5a230afa80) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 41u 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f5a230f00d0) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16u)
+ QAbstractSocket (0x0x7f5a230f0138) 0
+ primary-for QUdpSocket (0x0x7f5a230f00d0)
+ QIODevice (0x0x7f5a230f01a0) 0
+ primary-for QAbstractSocket (0x0x7f5a230f0138)
+ QObject (0x0x7f5a230afa20) 0
+ primary-for QIODevice (0x0x7f5a230f01a0)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f5a230afae0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f5a230afd80) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f5a230afe40) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14u 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 (0x0x7f5a230f02d8) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16u)
+ QObject (0x0x7f5a230afde0) 0
+ primary-for QJSEngine (0x0x7f5a230f02d8)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f5a23182060) 0
+
+Class QQmlPrivate::RegisterType
+ size=128 align=8
+ base size=124 base align=8
+QQmlPrivate::RegisterType (0x0x7f5a23182540) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f5a231825a0) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f5a23182600) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=64 align=8
+ base size=64 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f5a23182660) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f5a231826c0) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f5a23182720) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f5a23182780) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f5a231827e0) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7f5a23182840) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16u)
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7f5a23182900) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16u)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f5a23182a20) 0
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7f5a22e880c0) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16u)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f5a22e88120) 0
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlImageProviderBase
+ size=8 align=8
+ base size=8 base align=8
+QQmlImageProviderBase (0x0x7f5a22e883c0) 0 nearly-empty
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16u)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f5a22e88600) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14u 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 (0x0x7f5a230f08f0) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16u)
+ QJSEngine (0x0x7f5a230f0958) 0
+ primary-for QQmlEngine (0x0x7f5a230f08f0)
+ QObject (0x0x7f5a22e885a0) 0
+ primary-for QJSEngine (0x0x7f5a230f0958)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f5a22e886c0) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14u 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 (0x0x7f5a230f0a28) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16u)
+ QQmlEngine (0x0x7f5a230f0a90) 0
+ primary-for QQmlApplicationEngine (0x0x7f5a230f0a28)
+ QJSEngine (0x0x7f5a230f0af8) 0
+ primary-for QQmlEngine (0x0x7f5a230f0a90)
+ QObject (0x0x7f5a22e88660) 0
+ primary-for QJSEngine (0x0x7f5a230f0af8)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f5a22e88780) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17u 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 (0x0x7f5a230f0b60) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16u)
+ QObject (0x0x7f5a22e88720) 0
+ primary-for QQmlComponent (0x0x7f5a230f0b60)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f5a22f51000) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=24 align=8
+ base size=24 base align=8
+QQmlContext::PropertyPair (0x0x7f5a22f51060) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14u 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 (0x0x7f5a22f490d0) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16u)
+ QObject (0x0x7f5a22e88f60) 0
+ primary-for QQmlContext (0x0x7f5a22f490d0)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f5a22f511e0) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f5a22f51420) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14u 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 (0x0x7f5a22f49138) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16u)
+ QObject (0x0x7f5a22f513c0) 0
+ primary-for QQmlExpression (0x0x7f5a22f49138)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7f5a22f51480) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16u)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7f5a22f491a0) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16u)
+ QQmlTypesExtensionInterface (0x0x7f5a22f514e0) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f5a22f491a0)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f5a22f516c0) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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::initializeEngine
+128 (int (*)(...))-16
+136 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+144 0u
+152 0u
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f5a22ba8540) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16u)
+ QObject (0x0x7f5a22f51600) 0
+ primary-for QQmlExtensionPlugin (0x0x7f5a22ba8540)
+ QQmlExtensionInterface (0x0x7f5a22f49208) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 144u)
+ QQmlTypesExtensionInterface (0x0x7f5a22f51660) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f5a22f49208)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f5a22f51720) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f5a22f517e0) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14u 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 (0x0x7f5a22f492d8) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16u)
+ QObject (0x0x7f5a22f51780) 0
+ primary-for QQmlFileSelector (0x0x7f5a22f492d8)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6u 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 (0x0x7f5a22f51840) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16u)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5u 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 (0x0x7f5a22f518a0) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16u)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f5a22f49340) 0
+ QDebug (0x0x7f5a22f51900) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7f5a22c2c120) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16u)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f5a22c2c180) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f5a22c2ccc0) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15u 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 (0x0x7f5a22c4e8f0) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16u)
+ QObject (0x0x7f5a22c2cc60) 0
+ primary-for QQmlPropertyMap (0x0x7f5a22c4e8f0)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f5a22c2cd80) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f5a22c4e958) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16u)
+ QObject (0x0x7f5a22c2cd20) 0
+ primary-for QQuickTransform (0x0x7f5a22c4e958)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f5a22c2cea0) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f5a22c2cf00) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f5a22c2cf60) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 55u 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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickItem::updatePaintNode
+376 (int (*)(...))QQuickItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI10QQuickItem)
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f5a22c6e380) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16u)
+ QObject (0x0x7f5a22c2cde0) 0
+ primary-for QQuickItem (0x0x7f5a22c6e380)
+ QQmlParserStatus (0x0x7f5a22c2ce40) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 408u)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f5a22ccc780) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0u
+24 0u
+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 (0x0x7f5a22ccc7e0) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16u)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 56u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0u
+48 0u
+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 (*)(...))QQuickItem::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickFramebufferObject::geometryChanged
+368 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+376 (int (*)(...))QQuickFramebufferObject::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+416 0u
+424 0u
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f5a22c4ea90) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16u)
+ QQuickItem (0x0x7f5a22d11c40) 0
+ primary-for QQuickFramebufferObject (0x0x7f5a22c4ea90)
+ QObject (0x0x7f5a22ccc6c0) 0
+ primary-for QQuickItem (0x0x7f5a22d11c40)
+ QQmlParserStatus (0x0x7f5a22ccc720) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 416u)
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f5a22ccc8a0) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f5a22c4eaf8) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16u)
+ QObject (0x0x7f5a22ccc840) 0
+ primary-for QQuickTextureFactory (0x0x7f5a22c4eaf8)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f5a22ccc960) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (0x0x7f5a22c4eb60) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16u)
+ QObject (0x0x7f5a22ccc900) 0
+ primary-for QQuickImageResponse (0x0x7f5a22c4eb60)
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+24 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageProvider (0x0x7f5a22c4ebc8) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16u)
+ QQmlImageProviderBase (0x0x7f5a22ccc9c0) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7f5a22c4ebc8)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 0u
+24 0u
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickAsyncImageProvider (0x0x7f5a22c4ec30) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16u)
+ QQuickImageProvider (0x0x7f5a22c4ec98) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f5a22c4ec30)
+ QQmlImageProviderBase (0x0x7f5a22ccca20) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7f5a22c4ec98)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f5a22cccae0) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14u 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 (0x0x7f5a22c4ed00) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16u)
+ QObject (0x0x7f5a22ccca80) 0
+ primary-for QQuickItemGrabResult (0x0x7f5a22c4ed00)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f5a22cccc00) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 56u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0u
+48 0u
+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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickPaintedItem::updatePaintNode
+376 (int (*)(...))QQuickPaintedItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+416 0u
+424 0u
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f5a22c4ed68) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16u)
+ QQuickItem (0x0x7f5a22d4caf0) 0
+ primary-for QQuickPaintedItem (0x0x7f5a22c4ed68)
+ QObject (0x0x7f5a22cccb40) 0
+ primary-for QQuickItem (0x0x7f5a22d4caf0)
+ QQmlParserStatus (0x0x7f5a22cccba0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 416u)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f5a22ccce40) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15u 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 (0x0x7f5a22c4ef08) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16u)
+ QObject (0x0x7f5a22cccde0) 0
+ primary-for QQuickRenderControl (0x0x7f5a22c4ef08)
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f5a22cccf00) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14u 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 (0x0x7f5a22c4ef70) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16u)
+ QObject (0x0x7f5a22cccea0) 0
+ primary-for QQuickTextDocument (0x0x7f5a22c4ef70)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f5a347c6060) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f5a347c60c0) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f5a347c6120) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f5a347c6180) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f5a347c6660) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4u 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 (0x0x7f5a34750660) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16u)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6u 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=80 align=8
+ base size=80 base align=8
+QSGNode (0x0x7f5a2cd3a120) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16u)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6u 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=112 align=8
+ base size=112 base align=8
+QSGBasicGeometryNode (0x0x7f5a2daabd00) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16u)
+ QSGNode (0x0x7f5a2cd5cae0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f5a2daabd00)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6u 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=144 align=8
+ base size=144 base align=8
+QSGGeometryNode (0x0x7f5a2daabd68) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16u)
+ QSGBasicGeometryNode (0x0x7f5a2d2777b8) 0
+ primary-for QSGGeometryNode (0x0x7f5a2daabd68)
+ QSGNode (0x0x7f5a2cd5cb40) 0
+ primary-for QSGBasicGeometryNode (0x0x7f5a2d2777b8)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6u 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=152 align=8
+ base size=152 base align=8
+QSGClipNode (0x0x7f5a2d277820) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16u)
+ QSGBasicGeometryNode (0x0x7f5a2ccd7af8) 0
+ primary-for QSGClipNode (0x0x7f5a2d277820)
+ QSGNode (0x0x7f5a2cd5cea0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f5a2ccd7af8)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6u 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=216 align=8
+ base size=216 base align=8
+QSGTransformNode (0x0x7f5a2ccd7b60) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16u)
+ QSGNode (0x0x7f5a2cd5cf00) 0
+ primary-for QSGTransformNode (0x0x7f5a2ccd7b60)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6u 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=88 align=8
+ base size=88 base align=8
+QSGRootNode (0x0x7f5a2cd51068) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16u)
+ QSGNode (0x0x7f5a2cd7b600) 0
+ primary-for QSGRootNode (0x0x7f5a2cd51068)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6u 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=96 align=8
+ base size=96 base align=8
+QSGOpacityNode (0x0x7f5a2cd74888) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16u)
+ QSGNode (0x0x7f5a2cb2e1e0) 0
+ primary-for QSGOpacityNode (0x0x7f5a2cd74888)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14u 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 (0x0x7f5a2cb2e240) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16u)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0u
+24 0u
+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 (0x0x7f5a2cb2e300) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16u)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f5a2c8640c0) 0 empty
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 45u 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickWindow::keyPressEvent
+216 (int (*)(...))QQuickWindow::keyReleaseEvent
+224 (int (*)(...))QQuickWindow::mousePressEvent
+232 (int (*)(...))QQuickWindow::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickWindow::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI12QQuickWindow)
+312 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+320 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f5a2c9575b0) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16u)
+ QWindow (0x0x7f5a2faed380) 0
+ primary-for QQuickWindow (0x0x7f5a2c9575b0)
+ QObject (0x0x7f5a2c864000) 0
+ primary-for QWindow (0x0x7f5a2faed380)
+ QSurface (0x0x7f5a2c864060) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 312u)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f5a2c5f67e0) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 45u 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickView::keyPressEvent
+216 (int (*)(...))QQuickView::keyReleaseEvent
+224 (int (*)(...))QQuickView::mousePressEvent
+232 (int (*)(...))QQuickView::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickView::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI10QQuickView)
+312 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+320 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f5a2c76e2d8) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16u)
+ QQuickWindow (0x0x7f5a2c76e340) 0
+ primary-for QQuickView (0x0x7f5a2c76e2d8)
+ QWindow (0x0x7f5a2fb0a9a0) 0
+ primary-for QQuickWindow (0x0x7f5a2c76e340)
+ QObject (0x0x7f5a2c5f66c0) 0
+ primary-for QWindow (0x0x7f5a2fb0a9a0)
+ QSurface (0x0x7f5a2c5f6720) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 312u)
+
+Class QSGAbstractRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGAbstractRenderer::QPrivateSignal (0x0x7f5a2c4868a0) 0 empty
+
+Vtable for QSGAbstractRenderer
+QSGAbstractRenderer::_ZTV19QSGAbstractRenderer: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QSGAbstractRenderer)
+16 (int (*)(...))QSGAbstractRenderer::metaObject
+24 (int (*)(...))QSGAbstractRenderer::qt_metacast
+32 (int (*)(...))QSGAbstractRenderer::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QSGAbstractRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSGAbstractRenderer (0x0x7f5a2c76e3a8) 0
+ vptr=((& QSGAbstractRenderer::_ZTV19QSGAbstractRenderer) + 16u)
+ QObject (0x0x7f5a2c5f6840) 0
+ primary-for QSGAbstractRenderer (0x0x7f5a2c76e3a8)
+
+Class QSGEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGEngine::QPrivateSignal (0x0x7f5a2c1587e0) 0 empty
+
+Vtable for QSGEngine
+QSGEngine::_ZTV9QSGEngine: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSGEngine)
+16 (int (*)(...))QSGEngine::metaObject
+24 (int (*)(...))QSGEngine::qt_metacast
+32 (int (*)(...))QSGEngine::qt_metacall
+40 (int (*)(...))QSGEngine::~QSGEngine
+48 (int (*)(...))QSGEngine::~QSGEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSGEngine
+ size=16 align=8
+ base size=16 base align=8
+QSGEngine (0x0x7f5a2c76e4e0) 0
+ vptr=((& QSGEngine::_ZTV9QSGEngine) + 16u)
+ QObject (0x0x7f5a2c158780) 0
+ primary-for QSGEngine (0x0x7f5a2c76e4e0)
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f5a2c1a9300) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 12u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 0u
+24 0u
+32 (int (*)(...))QSGMaterialShader::activate
+40 (int (*)(...))QSGMaterialShader::deactivate
+48 (int (*)(...))QSGMaterialShader::updateState
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGMaterialShader::compile
+72 (int (*)(...))QSGMaterialShader::initialize
+80 (int (*)(...))QSGMaterialShader::vertexShader
+88 (int (*)(...))QSGMaterialShader::fragmentShader
+
+Class QSGMaterialShader
+ size=32 align=8
+ base size=32 base align=8
+QSGMaterialShader (0x0x7f5a2c180ae0) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16u)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f5a2bcf6ba0) 0 empty
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0u
+24 0u
+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 (0x0x7f5a2bad8000) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16u)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7u 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 (0x0x7f5a2c76e820) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16u)
+ QSGMaterial (0x0x7f5a2bad85a0) 0
+ primary-for QSGFlatColorMaterial (0x0x7f5a2c76e820)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f5a2bad8720) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 22u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f5a2c76e888) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16u)
+ QObject (0x0x7f5a2bad8660) 0
+ primary-for QSGTexture (0x0x7f5a2c76e888)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f5a2bafd360) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 23u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f5a2c76e8f0) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16u)
+ QSGTexture (0x0x7f5a2c76e958) 0
+ primary-for QSGDynamicTexture (0x0x7f5a2c76e8f0)
+ QObject (0x0x7f5a2bad8780) 0
+ primary-for QSGTexture (0x0x7f5a2c76e958)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0u
+24 0u
+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
+
+Class QSGImageNode
+ size=144 align=8
+ base size=144 base align=8
+QSGImageNode (0x0x7f5a2c76e9c0) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16u)
+ QSGGeometryNode (0x0x7f5a2c76ea28) 0
+ primary-for QSGImageNode (0x0x7f5a2c76e9c0)
+ QSGBasicGeometryNode (0x0x7f5a2c76ea90) 0
+ primary-for QSGGeometryNode (0x0x7f5a2c76ea28)
+ QSGNode (0x0x7f5a2bafd3c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f5a2c76ea90)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0u
+24 0u
+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=144 align=8
+ base size=144 base align=8
+QSGNinePatchNode (0x0x7f5a2c863000) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16u)
+ QSGGeometryNode (0x0x7f5a2c8630d0) 0
+ primary-for QSGNinePatchNode (0x0x7f5a2c863000)
+ QSGBasicGeometryNode (0x0x7f5a2c863138) 0
+ primary-for QSGGeometryNode (0x0x7f5a2c8630d0)
+ QSGNode (0x0x7f5a2afbe4e0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f5a2c863138)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0u
+24 0u
+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=144 align=8
+ base size=144 base align=8
+QSGRectangleNode (0x0x7f5a2c8631a0) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16u)
+ QSGGeometryNode (0x0x7f5a2c863208) 0
+ primary-for QSGRectangleNode (0x0x7f5a2c8631a0)
+ QSGBasicGeometryNode (0x0x7f5a2c863270) 0
+ primary-for QSGGeometryNode (0x0x7f5a2c863208)
+ QSGNode (0x0x7f5a2afbe540) 0
+ primary-for QSGBasicGeometryNode (0x0x7f5a2c863270)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+16 0u
+24 0u
+32 (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 (0x0x7f5a2afbe9c0) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16u)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 11u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0u
+24 0u
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGRenderNode::releaseResources
+72 (int (*)(...))QSGRenderNode::flags
+80 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=88 align=8
+ base size=88 base align=8
+QSGRenderNode (0x0x7f5a2c8632d8) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16u)
+ QSGNode (0x0x7f5a2afbe960) 0
+ primary-for QSGRenderNode (0x0x7f5a2c8632d8)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6u 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=320 align=8
+ base size=320 base align=8
+QSGSimpleRectNode (0x0x7f5a2c729680) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16u)
+ QSGGeometryNode (0x0x7f5a2c729958) 0
+ primary-for QSGSimpleRectNode (0x0x7f5a2c729680)
+ QSGBasicGeometryNode (0x0x7f5a2c7299c0) 0
+ primary-for QSGGeometryNode (0x0x7f5a2c729958)
+ QSGNode (0x0x7f5a2b090660) 0
+ primary-for QSGBasicGeometryNode (0x0x7f5a2c7299c0)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7u 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 (0x0x7f5a2c729bc8) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16u)
+ QSGMaterial (0x0x7f5a2b0906c0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f5a2c729bc8)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7u 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 (0x0x7f5a2c729c30) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16u)
+ QSGOpaqueTextureMaterial (0x0x7f5a2c729c98) 0
+ primary-for QSGTextureMaterial (0x0x7f5a2c729c30)
+ QSGMaterial (0x0x7f5a2ad40840) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f5a2c729c98)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6u 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=384 align=8
+ base size=384 base align=8
+QSGSimpleTextureNode (0x0x7f5a2c729d00) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16u)
+ QSGGeometryNode (0x0x7f5a2c429e38) 0
+ primary-for QSGSimpleTextureNode (0x0x7f5a2c729d00)
+ QSGBasicGeometryNode (0x0x7f5a2c429ea0) 0
+ primary-for QSGGeometryNode (0x0x7f5a2c429e38)
+ QSGNode (0x0x7f5a2ad408a0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f5a2c429ea0)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f5a2aa63720) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (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 (0x0x7f5a2c429958) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16u)
+ QObject (0x0x7f5a2aa636c0) 0
+ primary-for QSGTextureProvider (0x0x7f5a2c429958)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7u 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 (0x0x7f5a2c4299c0) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16u)
+ QSGMaterial (0x0x7f5a2aaec240) 0
+ primary-for QSGVertexColorMaterial (0x0x7f5a2c4299c0)
+
+Class QQuickStyle
+ size=1 align=1
+ base size=0 base align=1
+QQuickStyle (0x0x7f5a2aaec2a0) 0 empty
+
diff --git a/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.13.0.linux-gcc-amd64.txt b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.13.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..07ba810c43
--- /dev/null
+++ b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.13.0.linux-gcc-amd64.txt
@@ -0,0 +1,11498 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f22c330aae0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f22c33982a0) 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 (0x0x7f22c33984e0) 0 empty
+
+Class std::__do_is_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_default_constructible_impl (0x0x7f22c3398720) 0 empty
+
+Class std::__do_is_static_castable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_static_castable_impl (0x0x7f22c3398960) 0 empty
+
+Class std::__do_is_direct_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_direct_constructible_impl (0x0x7f22c3398ae0) 0 empty
+
+Class std::__do_is_nary_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nary_constructible_impl (0x0x7f22c3398ea0) 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 (0x0x7f22c3403000) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f22c30586c0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f22c3058780) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f22c3058b40) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f22c3058ba0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f22c3058c00) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f22c3058c60) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f22c3058cc0) 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 (0x0x7f22c3058d80) 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 (0x0x7f22c3058e40) 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 (0x0x7f22c3058f00) 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 (0x0x7f22c308a000) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f22c308a360) 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 (0x0x7f22c308a6c0) 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 (0x0x7f22c308a720) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f22c308acc0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f22c30d3360) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f22c30f6000) 0 empty
+ std::__nonesuch (0x0x7f22c30d3840) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f22c31551e0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f22c3155240) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f22c3188f00) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f22c3188f60) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f22c30f64e0) 0 empty
+ std::input_iterator_tag (0x0x7f22c31b2000) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f22c30f6548) 0 empty
+ std::forward_iterator_tag (0x0x7f22c30f65b0) 0 empty
+ std::input_iterator_tag (0x0x7f22c31b2060) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f22c30f6618) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f22c30f6680) 0 empty
+ std::forward_iterator_tag (0x0x7f22c30f66e8) 0 empty
+ std::input_iterator_tag (0x0x7f22c31b20c0) 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 (0x0x7f22c323eba0) 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 (0x0x7f22c323ecc0) 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 (0x0x7f22c2e63000) 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 (0x0x7f22c2e63300) 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 (0x0x7f22c2e63420) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f22c2ef3720) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f22c2ef3a20) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f22c2ef3a80) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f22c2ef3b40) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f22c2ef3ba0) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f22c2ef3c00) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f22c2ef3c60) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f22c2ef3f00) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f22c2f311e0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f22c2f31240) 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 (0x0x7f22c2feb000) 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 (0x0x7f22c30f6a28) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f22c2feb1e0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f22c30f6a28)
+
+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 (0x0x7f22c2feb3c0) 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 (0x0x7f22c30f6a90) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f22c2feb780) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f22c30f6a90)
+
+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 (0x0x7f22c30f6af8) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f22c2feb960) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f22c30f6af8)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f22c2febb40) 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 (0x0x7f22c3022120) 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 (0x0x7f22c30f6b60) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f22c30227e0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f22c30f6b60)
+
+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 (0x0x7f22c30f6bc8) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f22c30f6c30) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f22c30f6bc8)
+ std::exception (0x0x7f22c30229c0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f22c30f6c30)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f22c3022ba0) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f22c3022d80) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f22c2cc92a0) 0 empty
+
+Class qIsNull(double)::U
+ size=8 align=8
+ base size=8 base align=8
+qIsNull(double)::U (0x0x7f22c2a7fd20) 0
+
+Class qIsNull(float)::U
+ size=4 align=4
+ base size=4 base align=4
+qIsNull(float)::U (0x0x7f22c2a7fde0) 0
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f22c2941780) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f22c29418a0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f22c2941c00) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f22c297f180) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f22c29c0900) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f22c2652d20) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f22c29fea90) 0
+ std::__atomic_flag_base (0x0x7f22c2652d80) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f22c24b7208) 0
+ QAtomicInteger<int> (0x0x7f22c24b7270) 0
+ QBasicAtomicInteger<int> (0x0x7f22c258ad20) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f22c21bc060) 0 empty
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f22c2201600) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f22c2201d20) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f22c23aadd0) 0
+ QGenericArgument (0x0x7f22c223f000) 0
+
+Class QMetaObject
+ size=48 align=8
+ base size=48 base align=8
+QMetaObject (0x0x7f22c223f420) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f22c223f840) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f22c1ef3360) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f22c1ef3600) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f22c1fbe420) 0
+
+Class QArrayData
+ size=24 align=8
+ base size=24 base align=8
+QArrayData (0x0x7f22c1fbe780) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f22c2021a80) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f22c1d18300) 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 (0x0x7f22c1d183c0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f22c1dcb4e0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f22c1dcb5a0) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f22c1dcb600) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f22c1dcb660) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f22c1dcb6c0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f22c1dcb7e0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f22c1dcb840) 0
+
+Class _IO_marker
+ size=24 align=8
+ base size=24 base align=8
+_IO_marker (0x0x7f22c1b0c7e0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f22c1b0c840) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f22c18c18a0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f22c18c1a20) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f22c1a39ba0) 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 (0x0x7f22c1a39f60) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f22c168a240) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f22c168a420) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f22c16d1420) 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 (0x0x7f22c18def08) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f22c16d14e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f22c18def08)
+
+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 (0x0x7f22c18def70) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f22c18de410) 0
+ primary-for std::domain_error (0x0x7f22c18def70)
+ std::exception (0x0x7f22c16d1540) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f22c18de410)
+
+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 (0x0x7f22c18de478) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f22c18de7b8) 0
+ primary-for std::invalid_argument (0x0x7f22c18de478)
+ std::exception (0x0x7f22c16d15a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f22c18de7b8)
+
+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 (0x0x7f22c18de820) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f22c16f9000) 0
+ primary-for std::length_error (0x0x7f22c18de820)
+ std::exception (0x0x7f22c16d1600) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f22c16f9000)
+
+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 (0x0x7f22c16f9068) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f22c16f90d0) 0
+ primary-for std::out_of_range (0x0x7f22c16f9068)
+ std::exception (0x0x7f22c16d1660) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f22c16f90d0)
+
+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 (0x0x7f22c16f9138) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f22c16d16c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f22c16f9138)
+
+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 (0x0x7f22c16f91a0) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f22c16f9208) 0
+ primary-for std::range_error (0x0x7f22c16f91a0)
+ std::exception (0x0x7f22c16d1720) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f22c16f9208)
+
+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 (0x0x7f22c16f9270) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f22c16f92d8) 0
+ primary-for std::overflow_error (0x0x7f22c16f9270)
+ std::exception (0x0x7f22c16d1780) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f22c16f92d8)
+
+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 (0x0x7f22c16f9340) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f22c16f93a8) 0
+ primary-for std::underflow_error (0x0x7f22c16f9340)
+ std::exception (0x0x7f22c16d17e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f22c16f93a8)
+
+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 (0x0x7f22c16d1960) 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 (0x0x7f22c16d1cc0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f22c172d540) 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 (0x0x7f22c16f97b8) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f22c16f9820) 0
+ primary-for std::system_error (0x0x7f22c16f97b8)
+ std::exception (0x0x7f22c1758120) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f22c16f9820)
+
+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 (0x0x7f22c16f9a90) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f22c16f9af8) 0
+ primary-for std::ios_base::failure (0x0x7f22c16f9a90)
+ std::runtime_error (0x0x7f22c16f9b60) 0
+ primary-for std::system_error (0x0x7f22c16f9af8)
+ std::exception (0x0x7f22c17886c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f22c16f9b60)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f22c1788720) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f22c1788780) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f22c17887e0) 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 (0x0x7f22c1788660) 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 (0x0x7f22c147a120) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f22c1554300) 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> (0x0x7f22c10e4270 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> (0x0x7f22c10e4340 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> (0x0x7f22c1131000 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> (0x0x7f22c11310d0 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 QByteArrayDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QByteArrayDataPtr (0x0x7f22c1121c60) 0
+
+Class QByteArray
+ size=8 align=8
+ base size=8 base align=8
+QByteArray (0x0x7f22c1121cc0) 0
+
+Class QByteRef
+ size=16 align=8
+ base size=12 base align=8
+QByteRef (0x0x7f22c0e8c0c0) 0
+
+Class QStringDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QStringDataPtr (0x0x7f22c0f08f00) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f22c0f333c0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f22c0ffc180) 0
+
+Class QString::Null
+ size=1 align=1
+ base size=0 base align=1
+QString::Null (0x0x7f22c0c7cba0) 0 empty
+
+Class QString
+ size=8 align=8
+ base size=8 base align=8
+QString (0x0x7f22c0c7cb40) 0
+
+Class QCharRef
+ size=16 align=8
+ base size=12 base align=8
+QCharRef (0x0x7f22c0a5dd20) 0
+
+Class QStringRef
+ size=16 align=8
+ base size=16 base align=8
+QStringRef (0x0x7f22c0bf95a0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f22c0a118a0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f22c0a11960) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f22c06dae40) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f22c0a24410) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f22c06f85a0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f22c0a24548) 0
+ std::_Bit_iterator_base (0x0x7f22c0a245b0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f22c06f8c00) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f22c0a24618) 0
+ std::_Bit_iterator_base (0x0x7f22c0a24680) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f22c0729420) 0 empty
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f22c04dea80) 0
+
+Class QListData::NotArrayCompatibleLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotArrayCompatibleLayout (0x0x7f22c05dd840) 0 empty
+
+Class QListData::NotIndirectLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotIndirectLayout (0x0x7f22c05dd8a0) 0 empty
+
+Class QListData::ArrayCompatibleLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::ArrayCompatibleLayout (0x0x7f22c05470d0) 0 empty
+ QListData::NotIndirectLayout (0x0x7f22c05dd900) 0 empty
+
+Class QListData::InlineWithPaddingLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::InlineWithPaddingLayout (0x0x7f22c0492cb0) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f22c05dd960) 0 empty
+ QListData::NotIndirectLayout (0x0x7f22c05dd9c0) 0 empty
+
+Class QListData::IndirectLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::IndirectLayout (0x0x7f22c0547138) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f22c05dda20) 0 empty
+
+Class QListData::Data
+ size=24 align=8
+ base size=24 base align=8
+QListData::Data (0x0x7f22c05dda80) 0
+
+Class QListData
+ size=8 align=8
+ base size=8 base align=8
+QListData (0x0x7f22c05dd7e0) 0
+
+Class QRegExp
+ size=8 align=8
+ base size=8 base align=8
+QRegExp (0x0x7f22c02cac60) 0
+
+Class QStringMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QStringMatcher::Data (0x0x7f22c03c7300) 0
+
+Class QStringMatcher
+ size=1048 align=8
+ base size=1048 base align=8
+QStringMatcher (0x0x7f22c03c72a0) 0
+
+Class QStringList
+ size=8 align=8
+ base size=8 base align=8
+QStringList (0x0x7f22c03b4e38) 0
+ QList<QString> (0x0x7f22c03b4ea0) 0
+ QListSpecialMethods<QString> (0x0x7f22c03c7540) 0 empty
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f22c00950c0) 0 empty
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f22c01191e0) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f22c0119540) 0
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f22bfefcae0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f22bfefcb40) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f22bfefccc0) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f22bfefcd80) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f22bff0c208) 0
+ std::__uses_alloc_base (0x0x7f22bfefcd20) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f22bfc8f120) 0 empty
+
+Class QtPrivate::AbstractDebugStreamFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::AbstractDebugStreamFunction (0x0x7f22bfd1e5a0) 0
+
+Class QtPrivate::AbstractComparatorFunction
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::AbstractComparatorFunction (0x0x7f22bfd1e900) 0
+
+Class QtPrivate::AbstractConverterFunction
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::AbstractConverterFunction (0x0x7f22bfd1ee40) 0
+
+Class QMetaType
+ size=80 align=8
+ base size=80 base align=8
+QMetaType (0x0x7f22bfd453c0) 0
+
+Class QtMetaTypePrivate::VariantData
+ size=24 align=8
+ base size=20 base align=8
+QtMetaTypePrivate::VariantData (0x0x7f22bfdb05a0) 0
+
+Class QtMetaTypePrivate::VectorBoolElements
+ size=1 align=1
+ base size=0 base align=1
+QtMetaTypePrivate::VectorBoolElements (0x0x7f22bfdb0c60) 0 empty
+
+Class QtMetaTypePrivate::QSequentialIterableImpl
+ size=104 align=8
+ base size=104 base align=8
+QtMetaTypePrivate::QSequentialIterableImpl (0x0x7f22bfdfeae0) 0
+
+Class QtMetaTypePrivate::QAssociativeIterableImpl
+ size=112 align=8
+ base size=112 base align=8
+QtMetaTypePrivate::QAssociativeIterableImpl (0x0x7f22bfabc1e0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f22bfb15720) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f22bf9da540) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f22bf709000) 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=48 align=8
+ base size=48 base align=8
+QObjectData (0x0x7f22bf709060) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f22bf709240) 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 (0x0x7f22bf7091e0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Vtable for QObjectUserData
+QObjectUserData::_ZTV15QObjectUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QObjectUserData)
+16 (int (*)(...))QObjectUserData::~QObjectUserData
+24 (int (*)(...))QObjectUserData::~QObjectUserData
+
+Class QObjectUserData
+ size=8 align=8
+ base size=8 base align=8
+QObjectUserData (0x0x7f22bf7d4060) 0 nearly-empty
+ vptr=((& QObjectUserData::_ZTV15QObjectUserData) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f22bf7d41e0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f22bf7d4a80) 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 (0x0x7f22bf7cc410) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f22bf7d4a20) 0
+ primary-for QAbstractAnimation (0x0x7f22bf7cc410)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f22bf7d4e40) 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 (0x0x7f22bf7cc478) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f22bf7d4de0) 0
+ primary-for QAnimationDriver (0x0x7f22bf7cc478)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f22bf8140c0) 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 (0x0x7f22bf7cc4e0) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f22bf814060) 0
+ primary-for QEventLoop (0x0x7f22bf7cc4e0)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f22bf814960) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f22bf814a20) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f22bf814a80) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 28 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 (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))QAbstractEventDispatcher::startingUp
+216 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f22bf7cc618) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f22bf8149c0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f22bf7cc618)
+
+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 (0x0x7f22bf497f70) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f22bf4ed120) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f22bf497f70)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f22bf4ed1e0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f22bf4ed240) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f22bf4ed540) 0
+
+Class QMapNodeBase
+ size=24 align=8
+ base size=24 base align=8
+QMapNodeBase (0x0x7f22bf2e24e0) 0
+
+Class QMapDataBase
+ size=40 align=8
+ base size=40 base align=8
+QMapDataBase (0x0x7f22bf31a180) 0
+
+Class QHashData::Node
+ size=16 align=8
+ base size=16 base align=8
+QHashData::Node (0x0x7f22bf3e7ae0) 0
+
+Class QHashData
+ size=48 align=8
+ base size=44 base align=8
+QHashData (0x0x7f22bf3e7a80) 0
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f22bf3e7d80) 0 empty
+
+Class QVariant::PrivateShared
+ size=16 align=8
+ base size=12 base align=8
+QVariant::PrivateShared (0x0x7f22bf10f360) 0
+
+Class QVariant::Private::Data
+ size=8 align=8
+ base size=8 base align=8
+QVariant::Private::Data (0x0x7f22bf10f420) 0
+
+Class QVariant::Private
+ size=16 align=8
+ base size=12 base align=8
+QVariant::Private (0x0x7f22bf10f3c0) 0
+
+Class QVariant::Handler
+ size=72 align=8
+ base size=72 base align=8
+QVariant::Handler (0x0x7f22bf10f480) 0
+
+Class QVariant
+ size=16 align=8
+ base size=16 base align=8
+QVariant (0x0x7f22bf10f300) 0
+
+Class QVariantComparisonHelper
+ size=8 align=8
+ base size=8 base align=8
+QVariantComparisonHelper (0x0x7f22bee67720) 0
+
+Class QSequentialIterable::const_iterator
+ size=112 align=8
+ base size=112 base align=8
+QSequentialIterable::const_iterator (0x0x7f22beeabd80) 0
+
+Class QSequentialIterable
+ size=104 align=8
+ base size=104 base align=8
+QSequentialIterable (0x0x7f22beeabd20) 0
+
+Class QAssociativeIterable::const_iterator
+ size=120 align=8
+ base size=120 base align=8
+QAssociativeIterable::const_iterator (0x0x7f22beeabea0) 0
+
+Class QAssociativeIterable
+ size=112 align=8
+ base size=112 base align=8
+QAssociativeIterable (0x0x7f22beeabe40) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f22bef98060) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f22befe5c60) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f22becb9a80) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 48 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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractItemModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractItemModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f22becb8b60) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f22becb9a20) 0
+ primary-for QAbstractItemModel (0x0x7f22becb8b60)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f22bed1de40) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 48 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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractTableModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractTableModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f22bed071a0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f22bed07208) 0
+ primary-for QAbstractTableModel (0x0x7f22bed071a0)
+ QObject (0x0x7f22bed1dde0) 0
+ primary-for QAbstractItemModel (0x0x7f22bed07208)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f22beda5000) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 48 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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractListModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f22bed07270) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f22bed072d8) 0
+ primary-for QAbstractListModel (0x0x7f22bed07270)
+ QObject (0x0x7f22bed1df60) 0
+ primary-for QAbstractItemModel (0x0x7f22bed072d8)
+
+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 (0x0x7f22beda5720) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f22beda57e0) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 53 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QAbstractProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QAbstractProxyModel::setSourceModel
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))__cxa_pure_virtual
+408 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+416 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f22bed073a8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f22bed07410) 0
+ primary-for QAbstractProxyModel (0x0x7f22bed073a8)
+ QObject (0x0x7f22beda5780) 0
+ primary-for QAbstractItemModel (0x0x7f22bed07410)
+
+Class QAbstractState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractState::QPrivateSignal (0x0x7f22beda5a20) 0 empty
+
+Vtable for QAbstractState
+QAbstractState::_ZTV14QAbstractState: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QAbstractState)
+16 (int (*)(...))QAbstractState::metaObject
+24 (int (*)(...))QAbstractState::qt_metacast
+32 (int (*)(...))QAbstractState::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractState
+ size=16 align=8
+ base size=16 base align=8
+QAbstractState (0x0x7f22bed07478) 0
+ vptr=((& QAbstractState::_ZTV14QAbstractState) + 16)
+ QObject (0x0x7f22beda59c0) 0
+ primary-for QAbstractState (0x0x7f22bed07478)
+
+Class QAbstractTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTransition::QPrivateSignal (0x0x7f22beda5c60) 0 empty
+
+Vtable for QAbstractTransition
+QAbstractTransition::_ZTV19QAbstractTransition: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTransition)
+16 (int (*)(...))QAbstractTransition::metaObject
+24 (int (*)(...))QAbstractTransition::qt_metacast
+32 (int (*)(...))QAbstractTransition::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractTransition
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTransition (0x0x7f22bed074e0) 0
+ vptr=((& QAbstractTransition::_ZTV19QAbstractTransition) + 16)
+ QObject (0x0x7f22beda5c00) 0
+ primary-for QAbstractTransition (0x0x7f22bed074e0)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f22beda5f60) 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 (0x0x7f22bed07548) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f22bed075b0) 0
+ primary-for QAnimationGroup (0x0x7f22bed07548)
+ QObject (0x0x7f22beda5f00) 0
+ primary-for QAbstractAnimation (0x0x7f22bed075b0)
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f22bea82300) 0
+
+Class QBitArray
+ size=8 align=8
+ base size=8 base align=8
+QBitArray (0x0x7f22beabf6c0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=12 base align=8
+QBitRef (0x0x7f22beb14b40) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f22beb68f00) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 30 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 (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f22beb71af8) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f22beb68ea0) 0
+ primary-for QIODevice (0x0x7f22beb71af8)
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f22beb9e8a0) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 30 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 (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f22beb71c30) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f22beb71c98) 0
+ primary-for QBuffer (0x0x7f22beb71c30)
+ QObject (0x0x7f22beb9e840) 0
+ primary-for QIODevice (0x0x7f22beb71c98)
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f22beb9eb40) 0
+
+Class QByteArrayMatcher
+ size=1040 align=8
+ base size=1040 base align=8
+QByteArrayMatcher (0x0x7f22beb9eae0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f22beb9ecc0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f22beb9ec60) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f22bebfaba0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f22bec44b40) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f22be8b3420) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f22be91c0c0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f22be91c120) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f22be91c060) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f22be9f37e0) 0
+
+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 (0x0x7f22be6dbd80) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f22be740660) 0
+
+Class QContiguousCacheData
+ size=24 align=4
+ base size=24 base align=4
+QContiguousCacheData (0x0x7f22be7e7180) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f22be813de0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f22be813f60) 0
+
+Class QDebug::Stream
+ size=80 align=8
+ base size=76 base align=8
+QDebug::Stream (0x0x7f22be4c2ba0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f22be4c2b40) 0
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f22be26cc00) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f22be26ccc0) 0 empty
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f22be319000) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f22be319780) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f22be3c8660) 0
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f22be42f420) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f22be086e40) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f22be1cade0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=12 base align=8
+QCborParserError (0x0x7f22bde5c960) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f22bde5ca20) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f22bdcd1a20) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f22bdd6d480) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f22bdd6d4e0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f22bdd6d420) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f22bda5bea0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f22bda5bf00) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f22bda5be40) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f22bd872660) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f22bd92d600) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f22bd962360) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f22bd9e4480) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f22bd9e4660) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f22bd6dac00) 0
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+
+Class QEvent
+ size=24 align=8
+ base size=20 base align=8
+QEvent (0x0x7f22bd766360) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+
+Class QTimerEvent
+ size=24 align=8
+ base size=24 base align=8
+QTimerEvent (0x0x7f22bd731e38) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f22bd766720) 0
+ primary-for QTimerEvent (0x0x7f22bd731e38)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+
+Class QChildEvent
+ size=32 align=8
+ base size=32 base align=8
+QChildEvent (0x0x7f22bd731ea0) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f22bd7667e0) 0
+ primary-for QChildEvent (0x0x7f22bd731ea0)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+
+Class QDynamicPropertyChangeEvent
+ size=32 align=8
+ base size=32 base align=8
+QDynamicPropertyChangeEvent (0x0x7f22bd791410) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f22bd766e40) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f22bd791410)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=24 base align=8
+QDeferredDeleteEvent (0x0x7f22bd791478) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f22bd766f00) 0
+ primary-for QDeferredDeleteEvent (0x0x7f22bd791478)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f22bd7a9060) 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 (0x0x7f22bd7914e0) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f22bd7a9000) 0
+ primary-for QCoreApplication (0x0x7f22bd7914e0)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f22bd7a92a0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f22bd7a9420) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 48 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 (*)(...))QConcatenateTablesProxyModel::mimeTypes
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+224 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QConcatenateTablesProxyModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QConcatenateTablesProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7f22bd791548) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f22bd7915b0) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f22bd791548)
+ QObject (0x0x7f22bd7a93c0) 0
+ primary-for QAbstractItemModel (0x0x7f22bd7915b0)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f22bd7a9600) 0
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f22bd7a9720) 0
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f22bd7a98a0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f22bd465000) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f22bd465720) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f22bd5a7480) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 34 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFileDevice::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f22bd59f7b8) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f22bd59f820) 0
+ primary-for QFileDevice (0x0x7f22bd59f7b8)
+ QObject (0x0x7f22bd5a7420) 0
+ primary-for QIODevice (0x0x7f22bd59f820)
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f22bd5a7d80) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 34 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f22bd59f958) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f22bd59f9c0) 0
+ primary-for QFile (0x0x7f22bd59f958)
+ QIODevice (0x0x7f22bd59fa28) 0
+ primary-for QFileDevice (0x0x7f22bd59f9c0)
+ QObject (0x0x7f22bd5a7d20) 0
+ primary-for QIODevice (0x0x7f22bd59fa28)
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f22bd61d420) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f22bd2747e0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f22bd322b40) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f22bd37a300) 0
+
+Class QEventTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventTransition::QPrivateSignal (0x0x7f22bd07b420) 0 empty
+
+Vtable for QEventTransition
+QEventTransition::_ZTV16QEventTransition: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QEventTransition)
+16 (int (*)(...))QEventTransition::metaObject
+24 (int (*)(...))QEventTransition::qt_metacast
+32 (int (*)(...))QEventTransition::qt_metacall
+40 (int (*)(...))QEventTransition::~QEventTransition
+48 (int (*)(...))QEventTransition::~QEventTransition
+56 (int (*)(...))QEventTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QEventTransition::eventTest
+120 (int (*)(...))QEventTransition::onTransition
+
+Class QEventTransition
+ size=16 align=8
+ base size=16 base align=8
+QEventTransition (0x0x7f22bd42ec98) 0
+ vptr=((& QEventTransition::_ZTV16QEventTransition) + 16)
+ QAbstractTransition (0x0x7f22bd42ed00) 0
+ primary-for QEventTransition (0x0x7f22bd42ec98)
+ QObject (0x0x7f22bd07b3c0) 0
+ primary-for QAbstractTransition (0x0x7f22bd42ed00)
+
+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 (0x0x7f22bd42ed68) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f22bd07b600) 0 nearly-empty
+ primary-for QException (0x0x7f22bd42ed68)
+
+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=8 align=8
+ base size=8 base align=8
+QUnhandledException (0x0x7f22bd42edd0) 0 nearly-empty
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f22bd42ee38) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f22bd42edd0)
+ std::exception (0x0x7f22bd07b660) 0 nearly-empty
+ primary-for QException (0x0x7f22bd42ee38)
+
+Class QtPrivate::ExceptionHolder
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionHolder (0x0x7f22bd07b6c0) 0
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f22bd07b780) 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 (0x0x7f22bd07b7e0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f22bd07ba20) 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 (0x0x7f22bd42eea0) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f22bd07b9c0) 0
+ primary-for QFileSelector (0x0x7f22bd42eea0)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f22bd07bc60) 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 (0x0x7f22bd42ef08) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f22bd07bc00) 0
+ primary-for QFileSystemWatcher (0x0x7f22bd42ef08)
+
+Class QFinalState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFinalState::QPrivateSignal (0x0x7f22bd07bea0) 0 empty
+
+Vtable for QFinalState
+QFinalState::_ZTV11QFinalState: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFinalState)
+16 (int (*)(...))QFinalState::metaObject
+24 (int (*)(...))QFinalState::qt_metacast
+32 (int (*)(...))QFinalState::qt_metacall
+40 (int (*)(...))QFinalState::~QFinalState
+48 (int (*)(...))QFinalState::~QFinalState
+56 (int (*)(...))QFinalState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFinalState::onEntry
+120 (int (*)(...))QFinalState::onExit
+
+Class QFinalState
+ size=16 align=8
+ base size=16 base align=8
+QFinalState (0x0x7f22bd42ef70) 0
+ vptr=((& QFinalState::_ZTV11QFinalState) + 16)
+ QAbstractState (0x0x7f22bd0ce000) 0
+ primary-for QFinalState (0x0x7f22bd42ef70)
+ QObject (0x0x7f22bd07be40) 0
+ primary-for QAbstractState (0x0x7f22bd0ce000)
+
+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=12 base align=8
+QRunnable (0x0x7f22bd0d70c0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f22bd0d7360) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f22bd0ce0d0) 0
+ QBasicMutex (0x0x7f22bd154000) 0
+
+Class QMutexLocker
+ size=8 align=8
+ base size=8 base align=8
+QMutexLocker (0x0x7f22bd154240) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f22bd1546c0) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f22bd154cc0) 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 (0x0x7f22bd154ea0) 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 (0x0x7f22bd1f66c0) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f22bce999c0) 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 (0x0x7f22bd2306e8) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f22bce99960) 0
+ primary-for QFutureWatcherBase (0x0x7f22bd2306e8)
+
+Class QHistoryState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHistoryState::QPrivateSignal (0x0x7f22bcec4d20) 0 empty
+
+Vtable for QHistoryState
+QHistoryState::_ZTV13QHistoryState: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QHistoryState)
+16 (int (*)(...))QHistoryState::metaObject
+24 (int (*)(...))QHistoryState::qt_metacast
+32 (int (*)(...))QHistoryState::qt_metacall
+40 (int (*)(...))QHistoryState::~QHistoryState
+48 (int (*)(...))QHistoryState::~QHistoryState
+56 (int (*)(...))QHistoryState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHistoryState::onEntry
+120 (int (*)(...))QHistoryState::onExit
+
+Class QHistoryState
+ size=16 align=8
+ base size=16 base align=8
+QHistoryState (0x0x7f22bd230f08) 0
+ vptr=((& QHistoryState::_ZTV13QHistoryState) + 16)
+ QAbstractState (0x0x7f22bd230f70) 0
+ primary-for QHistoryState (0x0x7f22bd230f08)
+ QObject (0x0x7f22bcec4cc0) 0
+ primary-for QAbstractState (0x0x7f22bd230f70)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f22bceef060) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 53 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QIdentityProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QIdentityProxyModel::insertRows
+264 (int (*)(...))QIdentityProxyModel::insertColumns
+272 (int (*)(...))QIdentityProxyModel::removeRows
+280 (int (*)(...))QIdentityProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QIdentityProxyModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QIdentityProxyModel::setSourceModel
+392 (int (*)(...))QIdentityProxyModel::mapToSource
+400 (int (*)(...))QIdentityProxyModel::mapFromSource
+408 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+416 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f22bceee000) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f22bceee068) 0
+ primary-for QIdentityProxyModel (0x0x7f22bceee000)
+ QAbstractItemModel (0x0x7f22bceee0d0) 0
+ primary-for QAbstractProxyModel (0x0x7f22bceee068)
+ QObject (0x0x7f22bceef000) 0
+ primary-for QAbstractItemModel (0x0x7f22bceee0d0)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f22bceef240) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f22bcfafb40) 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 (0x0x7f22bcfb1a28) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f22bcfafae0) 0
+ primary-for QItemSelectionModel (0x0x7f22bcfb1a28)
+
+Class QItemSelection
+ size=8 align=8
+ base size=8 base align=8
+QItemSelection (0x0x7f22bcfb1bc8) 0
+ QList<QItemSelectionRange> (0x0x7f22bcfb1c30) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f22bcfef660) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=20 base align=8
+QJsonValue (0x0x7f22bcc56f60) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=12 base align=8
+QJsonValueRef (0x0x7f22bcdde180) 0
+
+Class QJsonValuePtr
+ size=24 align=8
+ base size=24 base align=8
+QJsonValuePtr (0x0x7f22bce19120) 0
+
+Class QJsonValueRefPtr
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRefPtr (0x0x7f22bce193c0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::iterator (0x0x7f22bca5e720) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::const_iterator (0x0x7f22bca5e780) 0
+
+Class QJsonArray
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray (0x0x7f22bca5e6c0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f22bcb8e660) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f22bcb8e6c0) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::iterator (0x0x7f22bcbdbea0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::const_iterator (0x0x7f22bcbdbf00) 0
+
+Class QJsonObject
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject (0x0x7f22bcbdbe40) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f22c350a2a0) 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=32 align=8
+ base size=25 base align=8
+QLibrary (0x0x7f22c34f6c98) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f22c350a240) 0
+ primary-for QLibrary (0x0x7f22c34f6c98)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f22c3556120) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f22c350ac00) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f22c35ea840) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f22c35ea8a0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f22bc45d6c0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f22bc4cd840) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f22bc53cc00) 0
+
+Class QLinkedListData
+ size=32 align=8
+ base size=25 base align=8
+QLinkedListData (0x0x7f22bc5b6ea0) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f22bc27b060) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f22bc27b2a0) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f22bc27b240) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f22bc27b6c0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f22bc337600) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f22bc17ade0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=12 base align=8
+QMetaMethod (0x0x7f22bc17ae40) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=12 base align=8
+QMetaEnum (0x0x7f22bc2066c0) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f22bc248900) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=12 base align=8
+QMetaClassInfo (0x0x7f22bc248a20) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f22bbea7000) 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 (0x0x7f22bbe968f0) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f22bbe88f60) 0
+ primary-for QMimeData (0x0x7f22bbe968f0)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f22bbea71e0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f22bbf06300) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f22bbf063c0) 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=24 align=8
+ base size=24 base align=8
+QObjectCleanupHandler (0x0x7f22bbef4c30) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f22bbf06360) 0
+ primary-for QObjectCleanupHandler (0x0x7f22bbef4c30)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f22bbf064e0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f22bbf6fc60) 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 (0x0x7f22bbf7f4e0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f22bbf7f548) 0
+ primary-for QParallelAnimationGroup (0x0x7f22bbf7f4e0)
+ QAbstractAnimation (0x0x7f22bbf7f5b0) 0
+ primary-for QAnimationGroup (0x0x7f22bbf7f548)
+ QObject (0x0x7f22bbf6fc00) 0
+ primary-for QAbstractAnimation (0x0x7f22bbf7f5b0)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f22bbf6fea0) 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 (0x0x7f22bbf7f618) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f22bbf7f680) 0
+ primary-for QPauseAnimation (0x0x7f22bbf7f618)
+ QObject (0x0x7f22bbf6fe40) 0
+ primary-for QAbstractAnimation (0x0x7f22bbf7f680)
+
+Class QStaticPlugin
+ size=16 align=8
+ base size=16 base align=8
+QStaticPlugin (0x0x7f22bbfa5ae0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f22bbfe7c60) 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 (0x0x7f22bbfef9c0) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f22bbfe7c00) 0
+ primary-for QPluginLoader (0x0x7f22bbfef9c0)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f22bbfe7d80) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f22bbc60420) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 31 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 (*)(...))QProcess::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QProcess::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QProcess::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QProcess::writeData
+240 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f22bbc5c618) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f22bbc5c680) 0
+ primary-for QProcess (0x0x7f22bbc5c618)
+ QObject (0x0x7f22bbc603c0) 0
+ primary-for QIODevice (0x0x7f22bbc5c680)
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f22bbc60ae0) 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 (0x0x7f22bbc5c6e8) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f22bbc5c750) 0
+ primary-for QVariantAnimation (0x0x7f22bbc5c6e8)
+ QObject (0x0x7f22bbc60a80) 0
+ primary-for QAbstractAnimation (0x0x7f22bbc5c750)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f22bbc60d80) 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 (0x0x7f22bbc5c820) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f22bbc5c888) 0
+ primary-for QPropertyAnimation (0x0x7f22bbc5c820)
+ QAbstractAnimation (0x0x7f22bbc5c8f0) 0
+ primary-for QVariantAnimation (0x0x7f22bbc5c888)
+ QObject (0x0x7f22bbc60d20) 0
+ primary-for QAbstractAnimation (0x0x7f22bbc5c8f0)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f22bbd314e0) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f22bbe2e240) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f22bbe2e1e0) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f22bbbf5f60) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f22bba2ac00) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f22bba2aba0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f22bb6bb5b0) 0
+ QRandomGenerator (0x0x7f22bb6d3720) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f22bb6f1300) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f22bb6f15a0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f22bb6f1a80) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f22bb6f1f60) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f22bb7c6d80) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f22bb83fd20) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f22bb4e9d80) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f22bb5acea0) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f22bb5fb180) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 34 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 (*)(...))QSaveFile::writeData
+240 (int (*)(...))QSaveFile::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f22bb572f70) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f22bb5fd000) 0
+ primary-for QSaveFile (0x0x7f22bb572f70)
+ QIODevice (0x0x7f22bb5fd068) 0
+ primary-for QFileDevice (0x0x7f22bb5fd000)
+ QObject (0x0x7f22bb5fb120) 0
+ primary-for QIODevice (0x0x7f22bb5fd068)
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f22bb5fb780) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f22bb5fb900) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f22bb31aba0) 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 (0x0x7f22bb31dd68) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f22bb31ddd0) 0
+ primary-for QSequentialAnimationGroup (0x0x7f22bb31dd68)
+ QAbstractAnimation (0x0x7f22bb31de38) 0
+ primary-for QAnimationGroup (0x0x7f22bb31ddd0)
+ QObject (0x0x7f22bb31ab40) 0
+ primary-for QAbstractAnimation (0x0x7f22bb31de38)
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f22bb31ade0) 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 (0x0x7f22bb31dea0) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f22bb31ad80) 0
+ primary-for QSettings (0x0x7f22bb31dea0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f22bb3582a0) 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 (0x0x7f22bb31df08) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f22bb358240) 0
+ primary-for QSharedMemory (0x0x7f22bb31df08)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f22bb3584e0) 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 (0x0x7f22bb31df70) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f22bb358480) 0
+ primary-for QSignalMapper (0x0x7f22bb31df70)
+
+Class QSignalTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalTransition::QPrivateSignal (0x0x7f22bb358720) 0 empty
+
+Vtable for QSignalTransition
+QSignalTransition::_ZTV17QSignalTransition: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSignalTransition)
+16 (int (*)(...))QSignalTransition::metaObject
+24 (int (*)(...))QSignalTransition::qt_metacast
+32 (int (*)(...))QSignalTransition::qt_metacall
+40 (int (*)(...))QSignalTransition::~QSignalTransition
+48 (int (*)(...))QSignalTransition::~QSignalTransition
+56 (int (*)(...))QSignalTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSignalTransition::eventTest
+120 (int (*)(...))QSignalTransition::onTransition
+
+Class QSignalTransition
+ size=16 align=8
+ base size=16 base align=8
+QSignalTransition (0x0x7f22bb37a000) 0
+ vptr=((& QSignalTransition::_ZTV17QSignalTransition) + 16)
+ QAbstractTransition (0x0x7f22bb37a068) 0
+ primary-for QSignalTransition (0x0x7f22bb37a000)
+ QObject (0x0x7f22bb3586c0) 0
+ primary-for QAbstractTransition (0x0x7f22bb37a068)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f22bb3589c0) 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 (0x0x7f22bb37a0d0) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f22bb358960) 0
+ primary-for QSocketNotifier (0x0x7f22bb37a0d0)
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f22bb358c00) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 56 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 (*)(...))QSortFilterProxyModel::mimeTypes
+216 (int (*)(...))QSortFilterProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QSortFilterProxyModel::dropMimeData
+240 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QSortFilterProxyModel::insertRows
+264 (int (*)(...))QSortFilterProxyModel::insertColumns
+272 (int (*)(...))QSortFilterProxyModel::removeRows
+280 (int (*)(...))QSortFilterProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QSortFilterProxyModel::fetchMore
+312 (int (*)(...))QSortFilterProxyModel::canFetchMore
+320 (int (*)(...))QSortFilterProxyModel::flags
+328 (int (*)(...))QSortFilterProxyModel::sort
+336 (int (*)(...))QSortFilterProxyModel::buddy
+344 (int (*)(...))QSortFilterProxyModel::match
+352 (int (*)(...))QSortFilterProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QSortFilterProxyModel::setSourceModel
+392 (int (*)(...))QSortFilterProxyModel::mapToSource
+400 (int (*)(...))QSortFilterProxyModel::mapFromSource
+408 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+416 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+424 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+432 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+440 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f22bb37a138) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f22bb37a1a0) 0
+ primary-for QSortFilterProxyModel (0x0x7f22bb37a138)
+ QAbstractItemModel (0x0x7f22bb37a208) 0
+ primary-for QAbstractProxyModel (0x0x7f22bb37a1a0)
+ QObject (0x0x7f22bb358ba0) 0
+ primary-for QAbstractItemModel (0x0x7f22bb37a208)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f22bb3c2060) 0 empty
+
+Class QState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QState::QPrivateSignal (0x0x7f22bb3c2960) 0 empty
+
+Vtable for QState
+QState::_ZTV6QState: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QState)
+16 (int (*)(...))QState::metaObject
+24 (int (*)(...))QState::qt_metacast
+32 (int (*)(...))QState::qt_metacall
+40 (int (*)(...))QState::~QState
+48 (int (*)(...))QState::~QState
+56 (int (*)(...))QState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QState::onEntry
+120 (int (*)(...))QState::onExit
+
+Class QState
+ size=16 align=8
+ base size=16 base align=8
+QState (0x0x7f22bb37a3a8) 0
+ vptr=((& QState::_ZTV6QState) + 16)
+ QAbstractState (0x0x7f22bb37a410) 0
+ primary-for QState (0x0x7f22bb37a3a8)
+ QObject (0x0x7f22bb3c2900) 0
+ primary-for QAbstractState (0x0x7f22bb37a410)
+
+Class QStateMachine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStateMachine::QPrivateSignal (0x0x7f22bb3c2de0) 0 empty
+
+Vtable for QStateMachine::SignalEvent
+QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine11SignalEventE)
+16 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+24 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+
+Class QStateMachine::SignalEvent
+ size=48 align=8
+ base size=48 base align=8
+QStateMachine::SignalEvent (0x0x7f22bb37a5b0) 0
+ vptr=((& QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE) + 16)
+ QEvent (0x0x7f22bb3c2e40) 0
+ primary-for QStateMachine::SignalEvent (0x0x7f22bb37a5b0)
+
+Vtable for QStateMachine::WrappedEvent
+QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine12WrappedEventE)
+16 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+24 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+
+Class QStateMachine::WrappedEvent
+ size=40 align=8
+ base size=40 base align=8
+QStateMachine::WrappedEvent (0x0x7f22bb37a618) 0
+ vptr=((& QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE) + 16)
+ QEvent (0x0x7f22bb3c2ea0) 0
+ primary-for QStateMachine::WrappedEvent (0x0x7f22bb37a618)
+
+Vtable for QStateMachine
+QStateMachine::_ZTV13QStateMachine: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStateMachine)
+16 (int (*)(...))QStateMachine::metaObject
+24 (int (*)(...))QStateMachine::qt_metacast
+32 (int (*)(...))QStateMachine::qt_metacall
+40 (int (*)(...))QStateMachine::~QStateMachine
+48 (int (*)(...))QStateMachine::~QStateMachine
+56 (int (*)(...))QStateMachine::event
+64 (int (*)(...))QStateMachine::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStateMachine::onEntry
+120 (int (*)(...))QStateMachine::onExit
+128 (int (*)(...))QStateMachine::beginSelectTransitions
+136 (int (*)(...))QStateMachine::endSelectTransitions
+144 (int (*)(...))QStateMachine::beginMicrostep
+152 (int (*)(...))QStateMachine::endMicrostep
+
+Class QStateMachine
+ size=16 align=8
+ base size=16 base align=8
+QStateMachine (0x0x7f22bb37a478) 0
+ vptr=((& QStateMachine::_ZTV13QStateMachine) + 16)
+ QState (0x0x7f22bb37a4e0) 0
+ primary-for QStateMachine (0x0x7f22bb37a478)
+ QAbstractState (0x0x7f22bb37a548) 0
+ primary-for QState (0x0x7f22bb37a4e0)
+ QObject (0x0x7f22bb3c2d80) 0
+ primary-for QAbstractState (0x0x7f22bb37a548)
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f22bb4312a0) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f22bb0b62a0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f22bb13e600) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 48 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 (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QStringListModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStringListModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QStringListModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QStringListModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStringListModel::flags
+328 (int (*)(...))QStringListModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStringListModel
+ size=24 align=8
+ base size=24 base align=8
+QStringListModel (0x0x7f22bb134750) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f22bb1347b8) 0
+ primary-for QStringListModel (0x0x7f22bb134750)
+ QAbstractItemModel (0x0x7f22bb134820) 0
+ primary-for QAbstractListModel (0x0x7f22bb1347b8)
+ QObject (0x0x7f22bb13e5a0) 0
+ primary-for QAbstractItemModel (0x0x7f22bb134820)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f22bb13e720) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f22bb13e7e0) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f22bb13e900) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 34 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QTemporaryFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f22bb134888) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f22bb1348f0) 0
+ primary-for QTemporaryFile (0x0x7f22bb134888)
+ QFileDevice (0x0x7f22bb134958) 0
+ primary-for QFile (0x0x7f22bb1348f0)
+ QIODevice (0x0x7f22bb1349c0) 0
+ primary-for QFileDevice (0x0x7f22bb134958)
+ QObject (0x0x7f22bb13e8a0) 0
+ primary-for QIODevice (0x0x7f22bb1349c0)
+
+Class QTextBoundaryFinder
+ size=48 align=8
+ base size=48 base align=8
+QTextBoundaryFinder (0x0x7f22bb13ec60) 0
+
+Class QTextCodec::ConverterState
+ size=32 align=8
+ base size=32 base align=8
+QTextCodec::ConverterState (0x0x7f22bb1be4e0) 0
+
+Vtable for QTextCodec
+QTextCodec::_ZTV10QTextCodec: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextCodec)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))QTextCodec::aliases
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 0
+64 0
+
+Class QTextCodec
+ size=8 align=8
+ base size=8 base align=8
+QTextCodec (0x0x7f22bb1be480) 0 nearly-empty
+ vptr=((& QTextCodec::_ZTV10QTextCodec) + 16)
+
+Class QTextEncoder
+ size=40 align=8
+ base size=40 base align=8
+QTextEncoder (0x0x7f22bb1beea0) 0
+
+Class QTextDecoder
+ size=40 align=8
+ base size=40 base align=8
+QTextDecoder (0x0x7f22bb2120c0) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f22bb2122a0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f22bb134bc8) 0
+ std::__mutex_base (0x0x7f22bb212300) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f22bb2124e0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f22bb212540) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f22bb2125a0) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f22bae51000) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f22bb134c30) 0
+ std::__recursive_mutex_base (0x0x7f22bae51060) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f22bb226af0) 0
+ std::__mutex_base (0x0x7f22bae51420) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f22bae51480) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f22bb226e70) 0
+ std::__recursive_mutex_base (0x0x7f22bae517e0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f22bae51840) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f22bae51f60) 0
+
+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 (0x0x7f22bb134d68) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f22bae9b4e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f22bb134d68)
+
+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 (0x0x7f22bb134dd0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f22bae9b600) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f22bb134dd0)
+
+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 (0x0x7f22bb134e38) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f22bae9b720) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f22bb134e38)
+
+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 (0x0x7f22bb134f08) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f22bae9b840) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f22bb134f08)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f22baec38a0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f22baec3ba0) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f22baec3ea0) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f22baee7240) 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 (0x0x7f22bb134f70) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f22baf63420) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f22bb134f70)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f22bafce3c0) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f22bafce7e0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f22bad17660) 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 (0x0x7f22bad44ae0) 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 (0x0x7f22bad44b40) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f22bad44a80) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f22babdaf00) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f22bac10300) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f22bac10360) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f22ba98c660) 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 (0x0x7f22ba983820) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f22ba983888) 0
+ primary-for std::future_error (0x0x7f22ba983820)
+ std::exception (0x0x7f22ba98cd80) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f22ba983888)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f22ba9ba4e0) 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 (0x0x7f22ba9ba480) 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 (0x0x7f22ba77cc00) 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 (0x0x7f22ba7aa0d0) 0
+ std::__at_thread_exit_elt (0x0x7f22ba77ccc0) 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 (0x0x7f22ba9ba660) 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 (0x0x7f22ba9ba420) 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 (0x0x7f22b9f10dd0) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f22b9f3acc0) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f22b9f10dd0)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f22b9f745a0) 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 (0x0x7f22b9f7b138) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f22b9f74540) 0
+ primary-for QThread (0x0x7f22b9f7b138)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f22b9f74960) 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 (0x0x7f22b9f7b1a0) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f22b9f74900) 0
+ primary-for QThreadPool (0x0x7f22b9f7b1a0)
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f22b9f74b40) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f22b9fb9240) 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 (0x0x7f22b9f7b208) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f22b9fb91e0) 0
+ primary-for QTimeLine (0x0x7f22b9f7b208)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f22b9fb9480) 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=32 align=8
+ base size=29 base align=8
+QTimer (0x0x7f22b9f7b270) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f22b9fb9420) 0
+ primary-for QTimer (0x0x7f22b9f7b270)
+
+Class QTimeZone::OffsetData
+ size=32 align=8
+ base size=28 base align=8
+QTimeZone::OffsetData (0x0x7f22ba002de0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f22ba002d80) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f22b9ca3ea0) 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 (0x0x7f22b9cae958) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f22b9ca3e40) 0
+ primary-for QTranslator (0x0x7f22b9cae958)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f22b9cca120) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 53 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QAbstractProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QTransposeProxyModel::insertRows
+264 (int (*)(...))QTransposeProxyModel::insertColumns
+272 (int (*)(...))QTransposeProxyModel::removeRows
+280 (int (*)(...))QTransposeProxyModel::removeColumns
+288 (int (*)(...))QTransposeProxyModel::moveRows
+296 (int (*)(...))QTransposeProxyModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QTransposeProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QTransposeProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QTransposeProxyModel::setSourceModel
+392 (int (*)(...))QTransposeProxyModel::mapToSource
+400 (int (*)(...))QTransposeProxyModel::mapFromSource
+408 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+416 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7f22b9cae9c0) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f22b9caea28) 0
+ primary-for QTransposeProxyModel (0x0x7f22b9cae9c0)
+ QAbstractItemModel (0x0x7f22b9caea90) 0
+ primary-for QAbstractProxyModel (0x0x7f22b9caea28)
+ QObject (0x0x7f22b9cca0c0) 0
+ primary-for QAbstractItemModel (0x0x7f22b9caea90)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f22b9cca300) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f22b9d44cc0) 0
+
+Class QXmlStreamStringRef
+ size=16 align=8
+ base size=16 base align=8
+QXmlStreamStringRef (0x0x7f22b9d44de0) 0
+
+Class QXmlStreamAttribute
+ size=80 align=8
+ base size=73 base align=8
+QXmlStreamAttribute (0x0x7f22b9def1e0) 0
+
+Class QXmlStreamAttributes
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamAttributes (0x0x7f22b9a5f138) 0
+ QVector<QXmlStreamAttribute> (0x0x7f22b9a55900) 0
+
+Class QXmlStreamNamespaceDeclaration
+ size=40 align=8
+ base size=40 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f22b9a55c00) 0
+
+Class QXmlStreamNotationDeclaration
+ size=56 align=8
+ base size=56 base align=8
+QXmlStreamNotationDeclaration (0x0x7f22b9ad3ba0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=88 align=8
+ base size=88 base align=8
+QXmlStreamEntityDeclaration (0x0x7f22b9b31ba0) 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 (0x0x7f22b9b9cc60) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f22b9b9ccc0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f22b9bdaba0) 0
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f22b9c2c1e0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f22b98c7240) 0
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f22b99626c0) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f22b9962660) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f22b964f300) 0
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f22b971be40) 0
+
+Class QTouchDevice
+ size=8 align=8
+ base size=8 base align=8
+QTouchDevice (0x0x7f22b978df00) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+
+Class QInputEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputEvent (0x0x7f22b97843a8) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f22b97be7e0) 0
+ primary-for QInputEvent (0x0x7f22b97843a8)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+
+Class QEnterEvent
+ size=72 align=8
+ base size=72 base align=8
+QEnterEvent (0x0x7f22b9784410) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QEvent (0x0x7f22b97be9c0) 0
+ primary-for QEnterEvent (0x0x7f22b9784410)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+
+Class QMouseEvent
+ size=104 align=8
+ base size=100 base align=8
+QMouseEvent (0x0x7f22b9784478) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QInputEvent (0x0x7f22b97844e0) 0
+ primary-for QMouseEvent (0x0x7f22b9784478)
+ QEvent (0x0x7f22b97bed80) 0
+ primary-for QInputEvent (0x0x7f22b97844e0)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+
+Class QHoverEvent
+ size=64 align=8
+ base size=64 base align=8
+QHoverEvent (0x0x7f22b9784548) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QInputEvent (0x0x7f22b97845b0) 0
+ primary-for QHoverEvent (0x0x7f22b9784548)
+ QEvent (0x0x7f22b980b2a0) 0
+ primary-for QInputEvent (0x0x7f22b97845b0)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f22b9784618) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QInputEvent (0x0x7f22b9784680) 0
+ primary-for QWheelEvent (0x0x7f22b9784618)
+ QEvent (0x0x7f22b980b480) 0
+ primary-for QInputEvent (0x0x7f22b9784680)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+
+Class QTabletEvent
+ size=128 align=8
+ base size=128 base align=8
+QTabletEvent (0x0x7f22b97846e8) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QInputEvent (0x0x7f22b9784750) 0
+ primary-for QTabletEvent (0x0x7f22b97846e8)
+ QEvent (0x0x7f22b980bae0) 0
+ primary-for QInputEvent (0x0x7f22b9784750)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f22b97847b8) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QInputEvent (0x0x7f22b9784820) 0
+ primary-for QNativeGestureEvent (0x0x7f22b97847b8)
+ QEvent (0x0x7f22b944d420) 0
+ primary-for QInputEvent (0x0x7f22b9784820)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+
+Class QKeyEvent
+ size=64 align=8
+ base size=59 base align=8
+QKeyEvent (0x0x7f22b9784888) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f22b97848f0) 0
+ primary-for QKeyEvent (0x0x7f22b9784888)
+ QEvent (0x0x7f22b944d720) 0
+ primary-for QInputEvent (0x0x7f22b97848f0)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+
+Class QFocusEvent
+ size=24 align=8
+ base size=24 base align=8
+QFocusEvent (0x0x7f22b9784958) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f22b944da20) 0
+ primary-for QFocusEvent (0x0x7f22b9784958)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+
+Class QPaintEvent
+ size=56 align=8
+ base size=49 base align=8
+QPaintEvent (0x0x7f22b97849c0) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f22b944db40) 0
+ primary-for QPaintEvent (0x0x7f22b97849c0)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+
+Class QMoveEvent
+ size=40 align=8
+ base size=36 base align=8
+QMoveEvent (0x0x7f22b9784a28) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f22b944dc60) 0
+ primary-for QMoveEvent (0x0x7f22b9784a28)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+
+Class QExposeEvent
+ size=32 align=8
+ base size=32 base align=8
+QExposeEvent (0x0x7f22b9784a90) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f22b944dd80) 0
+ primary-for QExposeEvent (0x0x7f22b9784a90)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=24 base align=8
+QPlatformSurfaceEvent (0x0x7f22b9784af8) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f22b944de40) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f22b9784af8)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+
+Class QResizeEvent
+ size=40 align=8
+ base size=36 base align=8
+QResizeEvent (0x0x7f22b9784b60) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f22b944df00) 0
+ primary-for QResizeEvent (0x0x7f22b9784b60)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+
+Class QCloseEvent
+ size=24 align=8
+ base size=20 base align=8
+QCloseEvent (0x0x7f22b9784bc8) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f22b9491060) 0
+ primary-for QCloseEvent (0x0x7f22b9784bc8)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+
+Class QIconDragEvent
+ size=24 align=8
+ base size=20 base align=8
+QIconDragEvent (0x0x7f22b9784c30) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f22b94910c0) 0
+ primary-for QIconDragEvent (0x0x7f22b9784c30)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+
+Class QShowEvent
+ size=24 align=8
+ base size=20 base align=8
+QShowEvent (0x0x7f22b9784c98) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f22b9491120) 0
+ primary-for QShowEvent (0x0x7f22b9784c98)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+
+Class QHideEvent
+ size=24 align=8
+ base size=20 base align=8
+QHideEvent (0x0x7f22b9784d00) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f22b9491180) 0
+ primary-for QHideEvent (0x0x7f22b9784d00)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+
+Class QContextMenuEvent
+ size=56 align=8
+ base size=49 base align=8
+QContextMenuEvent (0x0x7f22b9784d68) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f22b9784dd0) 0
+ primary-for QContextMenuEvent (0x0x7f22b9784d68)
+ QEvent (0x0x7f22b94911e0) 0
+ primary-for QInputEvent (0x0x7f22b9784dd0)
+
+Class QInputMethodEvent::Attribute
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodEvent::Attribute (0x0x7f22b9491540) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+
+Class QInputMethodEvent
+ size=56 align=8
+ base size=56 base align=8
+QInputMethodEvent (0x0x7f22b9784e38) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f22b94914e0) 0
+ primary-for QInputMethodEvent (0x0x7f22b9784e38)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=24 align=8
+ base size=24 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f22b95168a0) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+
+Class QInputMethodQueryEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodQueryEvent (0x0x7f22b9527068) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f22b9516840) 0
+ primary-for QInputMethodQueryEvent (0x0x7f22b9527068)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+
+Class QDropEvent
+ size=72 align=8
+ base size=72 base align=8
+QDropEvent (0x0x7f22b9598138) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f22b9590600) 0
+ primary-for QDropEvent (0x0x7f22b9598138)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+
+Class QDragMoveEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragMoveEvent (0x0x7f22b95981a0) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f22b9598208) 0
+ primary-for QDragMoveEvent (0x0x7f22b95981a0)
+ QEvent (0x0x7f22b95909c0) 0
+ primary-for QDropEvent (0x0x7f22b9598208)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+
+Class QDragEnterEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragEnterEvent (0x0x7f22b9598270) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f22b95982d8) 0
+ primary-for QDragEnterEvent (0x0x7f22b9598270)
+ QDropEvent (0x0x7f22b9598340) 0
+ primary-for QDragMoveEvent (0x0x7f22b95982d8)
+ QEvent (0x0x7f22b9590c00) 0
+ primary-for QDropEvent (0x0x7f22b9598340)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+
+Class QDragLeaveEvent
+ size=24 align=8
+ base size=20 base align=8
+QDragLeaveEvent (0x0x7f22b95983a8) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f22b9590c60) 0
+ primary-for QDragLeaveEvent (0x0x7f22b95983a8)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+
+Class QHelpEvent
+ size=40 align=8
+ base size=36 base align=8
+QHelpEvent (0x0x7f22b9598410) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f22b9590cc0) 0
+ primary-for QHelpEvent (0x0x7f22b9598410)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+
+Class QStatusTipEvent
+ size=32 align=8
+ base size=32 base align=8
+QStatusTipEvent (0x0x7f22b9598478) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f22b9590f60) 0
+ primary-for QStatusTipEvent (0x0x7f22b9598478)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+
+Class QWhatsThisClickedEvent
+ size=32 align=8
+ base size=32 base align=8
+QWhatsThisClickedEvent (0x0x7f22b95984e0) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f22b95c3060) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f22b95984e0)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+
+Class QActionEvent
+ size=40 align=8
+ base size=40 base align=8
+QActionEvent (0x0x7f22b9598548) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f22b95c3120) 0
+ primary-for QActionEvent (0x0x7f22b9598548)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+
+Class QFileOpenEvent
+ size=40 align=8
+ base size=40 base align=8
+QFileOpenEvent (0x0x7f22b95985b0) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f22b95c3240) 0
+ primary-for QFileOpenEvent (0x0x7f22b95985b0)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QToolBarChangeEvent (0x0x7f22b9598618) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f22b95c3360) 0
+ primary-for QToolBarChangeEvent (0x0x7f22b9598618)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+
+Class QShortcutEvent
+ size=40 align=8
+ base size=40 base align=8
+QShortcutEvent (0x0x7f22b9598680) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f22b95c3420) 0
+ primary-for QShortcutEvent (0x0x7f22b9598680)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+
+Class QWindowStateChangeEvent
+ size=32 align=8
+ base size=25 base align=8
+QWindowStateChangeEvent (0x0x7f22b95986e8) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f22b95c35a0) 0
+ primary-for QWindowStateChangeEvent (0x0x7f22b95986e8)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f22b95c3720) 0
+
+Class QTouchEvent::TouchPoint
+ size=8 align=8
+ base size=8 base align=8
+QTouchEvent::TouchPoint (0x0x7f22b961dae0) 0
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+
+Class QTouchEvent
+ size=72 align=8
+ base size=72 base align=8
+QTouchEvent (0x0x7f22b9618f08) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QInputEvent (0x0x7f22b9618f70) 0
+ primary-for QTouchEvent (0x0x7f22b9618f08)
+ QEvent (0x0x7f22b961da80) 0
+ primary-for QInputEvent (0x0x7f22b9618f70)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+
+Class QScrollPrepareEvent
+ size=112 align=8
+ base size=112 base align=8
+QScrollPrepareEvent (0x0x7f22b932dc30) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f22b93610c0) 0
+ primary-for QScrollPrepareEvent (0x0x7f22b932dc30)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+
+Class QScrollEvent
+ size=64 align=8
+ base size=60 base align=8
+QScrollEvent (0x0x7f22b932dc98) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f22b9361120) 0
+ primary-for QScrollEvent (0x0x7f22b932dc98)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+
+Class QScreenOrientationChangeEvent
+ size=40 align=8
+ base size=36 base align=8
+QScreenOrientationChangeEvent (0x0x7f22b932dd00) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f22b9361180) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f22b932dd00)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=24 base align=8
+QApplicationStateChangeEvent (0x0x7f22b932dd68) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f22b93611e0) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f22b932dd68)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f22b9361240) 0
+
+Class QPolygon
+ size=8 align=8
+ base size=8 base align=8
+QPolygon (0x0x7f22b93fb9c0) 0
+ QVector<QPoint> (0x0x7f22b94006c0) 0
+
+Class QPolygonF
+ size=8 align=8
+ base size=8 base align=8
+QPolygonF (0x0x7f22b908cd00) 0
+ QVector<QPointF> (0x0x7f22b909e780) 0
+
+Class QMatrix
+ size=48 align=8
+ base size=48 base align=8
+QMatrix (0x0x7f22b9139600) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f22b91a3420) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f22b91a33c0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f22b8ede780) 0
+
+Class QTransform
+ size=88 align=8
+ base size=88 base align=8
+QTransform (0x0x7f22b8edee40) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPaintDevice (0x0x7f22b8f9d900) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f22b8f9df00) 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=32 align=8
+ base size=32 base align=8
+QImage (0x0x7f22b8c64b60) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f22b8c73840) 0
+ primary-for QImage (0x0x7f22b8c64b60)
+
+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=32 align=8
+ base size=32 base align=8
+QPixmap (0x0x7f22b8d825b0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f22b8d84600) 0
+ primary-for QPixmap (0x0x7f22b8d825b0)
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f22b8df7ae0) 0
+
+Class QBrushData
+ size=112 align=8
+ base size=112 base align=8
+QBrushData (0x0x7f22b8ad5060) 0
+
+Class QGradient
+ size=64 align=8
+ base size=64 base align=8
+QGradient (0x0x7f22b8ad52a0) 0
+
+Class QLinearGradient
+ size=64 align=8
+ base size=64 base align=8
+QLinearGradient (0x0x7f22b8ac9750) 0
+ QGradient (0x0x7f22b8ad59c0) 0
+
+Class QRadialGradient
+ size=64 align=8
+ base size=64 base align=8
+QRadialGradient (0x0x7f22b8ac97b8) 0
+ QGradient (0x0x7f22b8ad5ae0) 0
+
+Class QConicalGradient
+ size=64 align=8
+ base size=64 base align=8
+QConicalGradient (0x0x7f22b8ac9820) 0
+ QGradient (0x0x7f22b8ad5c00) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f22b8ad5cc0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f22b8bf1660) 0
+
+Class QTextOption
+ size=32 align=8
+ base size=32 base align=8
+QTextOption (0x0x7f22b8bf1600) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f22b8c29d80) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f22b88b4720) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f22b89a28f0) 0
+ QTextFormat (0x0x7f22b89ce300) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f22b8a40d00) 0
+ QTextFormat (0x0x7f22b8a46cc0) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f22b86b2270) 0
+ QTextFormat (0x0x7f22b86a99c0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f22b86f8680) 0
+ QTextCharFormat (0x0x7f22b86f86e8) 0
+ QTextFormat (0x0x7f22b8702180) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f22b8736c30) 0
+ QTextFormat (0x0x7f22b873f7e0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f22b87a11a0) 0
+ QTextFrameFormat (0x0x7f22b87a1208) 0
+ QTextFormat (0x0x7f22b87a6420) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f22b87f5750) 0
+ QTextCharFormat (0x0x7f22b87f57b8) 0
+ QTextFormat (0x0x7f22b87eacc0) 0
+
+Class QFontDatabase
+ size=8 align=8
+ base size=8 base align=8
+QFontDatabase (0x0x7f22b844e120) 0
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f22b844e300) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f22b84bccc0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f22b8532de0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f22b859af60) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f22b85bc3c0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f22b85bc360) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f22b8645a80) 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 (0x0x7f22b8645f00) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f22b82721e0) 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 (0x0x7f22b825b2d8) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f22b8272180) 0
+ primary-for QTextDocument (0x0x7f22b825b2d8)
+
+Class QPalette::Data
+ size=4 align=4
+ base size=4 base align=4
+QPalette::Data (0x0x7f22b8272cc0) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f22b8272c60) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f22b83be0c0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f22b83be120) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=64 align=8
+ base size=64 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f22b83be180) 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 (0x0x7f22b83c0000) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f22b83be060) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f22b83c0000)
+
+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 (0x0x7f22b8068d20) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f22b8068f60) 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 (0x0x7f22b80a6000) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f22b8068f00) 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 (0x0x7f22b80a6ba0) 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 (0x0x7f22b80a6f00) 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 (0x0x7f22b80a6f60) 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 (0x0x7f22b80f9000) 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 (0x0x7f22b80f9060) 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 (0x0x7f22b80f90c0) 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 (0x0x7f22b80f9120) 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 (0x0x7f22b80f9240) 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 (0x0x7f22b80f92a0) 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 (0x0x7f22b8087618) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f22b80f9c60) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f22b8087618)
+
+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 (0x0x7f22b8087680) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f22b8175060) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f22b8087680)
+
+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 (0x0x7f22b80876e8) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f22b8087750) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f22b80876e8)
+ QAccessibleEvent (0x0x7f22b8175480) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f22b8087750)
+
+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=48 align=8
+ base size=48 base align=8
+QAccessibleTextInsertEvent (0x0x7f22b80877b8) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f22b8087820) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f22b80877b8)
+ QAccessibleEvent (0x0x7f22b8175900) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f22b8087820)
+
+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=48 align=8
+ base size=48 base align=8
+QAccessibleTextRemoveEvent (0x0x7f22b8087888) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f22b80878f0) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f22b8087888)
+ QAccessibleEvent (0x0x7f22b8175d20) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f22b80878f0)
+
+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=56 align=8
+ base size=56 base align=8
+QAccessibleTextUpdateEvent (0x0x7f22b8087958) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f22b80879c0) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f22b8087958)
+ QAccessibleEvent (0x0x7f22b81a2180) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f22b80879c0)
+
+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=48 align=8
+ base size=48 base align=8
+QAccessibleValueChangeEvent (0x0x7f22b8087a28) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f22b81a2600) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f22b8087a28)
+
+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 (0x0x7f22b8087a90) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f22b81a2a20) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f22b8087a90)
+
+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 (0x0x7f22b81d5300) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f22b81d55a0) 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 (0x0x7f22b8087af8) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f22b81d5540) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f22b8087af8)
+
+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 (0x0x7f22b8087b60) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f22b81d56c0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f22b8087b60)
+
+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 (0x0x7f22b8087bc8) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f22b8087c30) 0
+ primary-for QAccessibleApplication (0x0x7f22b8087bc8)
+ QAccessibleInterface (0x0x7f22b81d5720) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f22b8087c30)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f22b81d57e0) 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 (0x0x7f22b8087c98) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f22b81d5780) 0
+ primary-for QAccessiblePlugin (0x0x7f22b8087c98)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f22b81d5900) 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 (0x0x7f22b823d480) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f22b823d840) 0
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f22b7f203c0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f22b7fed180) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 45 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::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI7QWindow)
+312 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+320 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f22b7fdea10) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f22b7fed0c0) 0
+ primary-for QWindow (0x0x7f22b7fdea10)
+ QSurface (0x0x7f22b7fed120) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 312)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f22b7feda20) 0
+
+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=32 align=8
+ base size=32 base align=8
+QBitmap (0x0x7f22b7fcdf70) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f22b8041000) 0
+ primary-for QBitmap (0x0x7f22b7fcdf70)
+ QPaintDevice (0x0x7f22b7fedae0) 0
+ primary-for QPixmap (0x0x7f22b8041000)
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f22b7c90060) 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 (0x0x7f22b7c8a2d8) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f22b7c90000) 0
+ primary-for QClipboard (0x0x7f22b7c8a2d8)
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f22b7c90180) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f22b7c90240) 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 (0x0x7f22b7c8a340) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f22b7c901e0) 0
+ primary-for QDrag (0x0x7f22b7c8a340)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f22b7c90420) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f22b7cf8480) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f22b7d427e0) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f22b7a6e8a0) 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 (0x0x7f22b7d88ea0) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f22b7a6e840) 0
+ primary-for QGenericPlugin (0x0x7f22b7d88ea0)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f22b7a6e9c0) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f22b7a6ea80) 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 (0x0x7f22b7d88f08) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f22b7a6ea20) 0
+ primary-for QInputMethod (0x0x7f22b7d88f08)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f22b7a6ed80) 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 (0x0x7f22b7d88f70) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f22b7ae8000) 0
+ primary-for QGuiApplication (0x0x7f22b7d88f70)
+ QObject (0x0x7f22b7a6ed20) 0
+ primary-for QCoreApplication (0x0x7f22b7ae8000)
+
+Class QIconEngine::AvailableSizesArgument
+ size=16 align=8
+ base size=16 base align=8
+QIconEngine::AvailableSizesArgument (0x0x7f22b7b02540) 0
+
+Class QIconEngine::ScaledPixmapArgument
+ size=56 align=8
+ base size=56 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f22b7b026c0) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 16 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::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f22b7b024e0) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f22b7b02780) 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 (0x0x7f22b7ae85b0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f22b7b02720) 0
+ primary-for QIconEnginePlugin (0x0x7f22b7ae85b0)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))QImageIOHandler::name
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QImageIOHandler::write
+64 (int (*)(...))QImageIOHandler::option
+72 (int (*)(...))QImageIOHandler::setOption
+80 (int (*)(...))QImageIOHandler::supportsOption
+88 (int (*)(...))QImageIOHandler::jumpToNextImage
+96 (int (*)(...))QImageIOHandler::jumpToImage
+104 (int (*)(...))QImageIOHandler::loopCount
+112 (int (*)(...))QImageIOHandler::imageCount
+120 (int (*)(...))QImageIOHandler::nextImageDelay
+128 (int (*)(...))QImageIOHandler::currentImageNumber
+136 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f22b7b028a0) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f22b7b02ae0) 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 (0x0x7f22b7ae8618) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f22b7b02a80) 0
+ primary-for QImageIOPlugin (0x0x7f22b7ae8618)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f22b7b91300) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f22b7b91420) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f22b7b91540) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f22b7c236c0) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f22b78a7900) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f22b7971240) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f22b76ee0c0) 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 (0x0x7f22b79d8d68) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f22b76ee060) 0
+ primary-for QMovie (0x0x7f22b79d8d68)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f22b76ee4e0) 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 (0x0x7f22b79ef850) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f22b76ee420) 0
+ primary-for QOffscreenSurface (0x0x7f22b79ef850)
+ QSurface (0x0x7f22b76ee480) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f22b76ee720) 0
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f22b76eef60) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f22b739db40) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f22b739dd20) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f22b739dd80) 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 (0x0x7f22b739df60) 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 (0x0x7f22b73cb180) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f22b739cc30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b73cb120) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f22b73cb480) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f22b739cc98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b73cb420) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f22b73cb780) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f22b739cd00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b73cb720) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f22b73cba80) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f22b739cd68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b73cba20) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f22b73cbde0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f22b739cdd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b73cbd80) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f22b7400120) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f22b739ce38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b74000c0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f22b7400420) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f22b739cea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b74003c0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f22b7400720) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f22b739cf08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b74006c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f22b7400a20) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f22b739cf70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b74009c0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f22b7400d20) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f22b7446000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b7400cc0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f22b704f060) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f22b7446068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b704f000) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f22b704f360) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f22b74460d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b704f300) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f22b704f660) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f22b7446138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b704f600) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f22b704f960) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f22b74461a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b704f900) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f22b704fc60) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f22b7446208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b704fc00) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f22b704ff60) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f22b7446270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b704ff00) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f22b70b92a0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f22b74462d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b70b9240) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f22b70b9600) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f22b7446340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b70b95a0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f22b70b9900) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f22b74463a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b70b98a0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f22b70b9c00) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f22b7446410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b70b9ba0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f22b70b9f00) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f22b7446478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b70b9ea0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f22b7142240) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f22b74464e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b71421e0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f22b7142540) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f22b7446548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b71424e0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f22b7142840) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f22b74465b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b71427e0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f22b7142b40) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f22b7446618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b7142ae0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f22b7142e40) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f22b7446680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b7142de0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f22b717d180) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f22b74466e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f22b717d120) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f22b717d420) 0
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f22b717df00) 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 (0x0x7f22b71ac138) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f22b717dea0) 0
+ primary-for QOpenGLContextGroup (0x0x7f22b71ac138)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f22b71b9180) 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 (0x0x7f22b71ac1a0) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f22b71b9120) 0
+ primary-for QOpenGLContext (0x0x7f22b71ac1a0)
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f22b71b93c0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f22b6e70b40) 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 (0x0x7f22b721dbc8) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f22b6e70ae0) 0
+ primary-for QOpenGLDebugLogger (0x0x7f22b721dbc8)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f22b6ec7000) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f22b6ec7960) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f22b6ec7900) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f22b721df70) 0
+ QOpenGLFunctions (0x0x7f22b7015720) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f22b7015a80) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f22b6c8b000) 0
+ QOpenGLFunctionsPrivate (0x0x7f22b7015a20) 0
+
+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 (0x0x7f22b6df3540) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f22b6df37e0) 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=32 align=8
+ base size=32 base align=8
+QOpenGLPaintDevice (0x0x7f22b6ddbd68) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f22b6df3840) 0
+ primary-for QOpenGLPaintDevice (0x0x7f22b6ddbd68)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f22b6df3a80) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f22b6a848a0) 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 (0x0x7f22b6a75ea0) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f22b6a84840) 0
+ primary-for QOpenGLShader (0x0x7f22b6a75ea0)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f22b6ac11e0) 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 (0x0x7f22b6aca000) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f22b6ac1180) 0
+ primary-for QOpenGLShaderProgram (0x0x7f22b6aca000)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f22b6ac13c0) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f22b6b7a8a0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f22b6b7aae0) 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 (0x0x7f22b6aca138) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f22b6b7aa80) 0
+ primary-for QOpenGLTimerQuery (0x0x7f22b6aca138)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f22b6b7ad20) 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 (0x0x7f22b6aca1a0) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f22b6b7acc0) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f22b6aca1a0)
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f22b6b7af60) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f22b6bdb000) 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 (0x0x7f22b6aca208) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f22b6b7af00) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f22b6aca208)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f22b6bdb6c0) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 58 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QPaintDeviceWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))-16
+328 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+336 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+384 (int (*)(...))-40
+392 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+400 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+416 (int (*)(...))QPaintDevice::devType
+424 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+440 (int (*)(...))QPaintDevice::initPainter
+448 (int (*)(...))QPaintDevice::redirected
+456 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=64 align=8
+ base size=64 base align=8
+QPaintDeviceWindow (0x0x7f22b6b93e70) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f22b6b93ee0) 0
+ primary-for QPaintDeviceWindow (0x0x7f22b6b93e70)
+ QObject (0x0x7f22b6bdb5a0) 0
+ primary-for QWindow (0x0x7f22b6b93ee0)
+ QSurface (0x0x7f22b6bdb600) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 336)
+ QPaintDevice (0x0x7f22b6bdb660) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 400)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f22b6bdb9c0) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 64 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QOpenGLWindow::paintEvent
+304 (int (*)(...))QOpenGLWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QOpenGLWindow::initializeGL
+328 (int (*)(...))QOpenGLWindow::resizeGL
+336 (int (*)(...))QOpenGLWindow::paintGL
+344 (int (*)(...))QOpenGLWindow::paintUnderGL
+352 (int (*)(...))QOpenGLWindow::paintOverGL
+360 (int (*)(...))QOpenGLWindow::redirected
+368 (int (*)(...))-16
+376 (int (*)(...))(& _ZTI13QOpenGLWindow)
+384 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+400 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+432 (int (*)(...))-40
+440 (int (*)(...))(& _ZTI13QOpenGLWindow)
+448 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+464 (int (*)(...))QPaintDevice::devType
+472 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+480 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QPaintDevice::initPainter
+496 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+504 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLWindow (0x0x7f22b6aca2d8) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f22b6bfd0e0) 0
+ primary-for QOpenGLWindow (0x0x7f22b6aca2d8)
+ QWindow (0x0x7f22b6bfd150) 0
+ primary-for QPaintDeviceWindow (0x0x7f22b6bfd0e0)
+ QObject (0x0x7f22b6bdb8a0) 0
+ primary-for QWindow (0x0x7f22b6bfd150)
+ QSurface (0x0x7f22b6bdb900) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 384)
+ QPaintDevice (0x0x7f22b6bdb960) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 448)
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f22b6bdbba0) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f22b6882600) 0
+
+Class QPagedPaintDevice::Margins
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice::Margins (0x0x7f22b6916180) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 14 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::setPageSize
+96 (int (*)(...))QPagedPaintDevice::setPageSizeMM
+104 (int (*)(...))QPagedPaintDevice::setMargins
+
+Class QPagedPaintDevice
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice (0x0x7f22b68fe270) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f22b6916120) 0
+ primary-for QPagedPaintDevice (0x0x7f22b68fe270)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f22b6916240) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f22b69161e0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f22b67385a0) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 24 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
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f22b677f4e0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f22b677fcc0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f22b6837480) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 34 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::setPageSize
+128 (int (*)(...))QPdfWriter::setPageSizeMM
+136 (int (*)(...))QPdfWriter::setMargins
+144 (int (*)(...))QPdfWriter::paintEngine
+152 (int (*)(...))QPdfWriter::metric
+160 (int (*)(...))-16
+168 (int (*)(...))(& _ZTI10QPdfWriter)
+176 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+184 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+192 (int (*)(...))QPaintDevice::devType
+200 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+208 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+216 (int (*)(...))QPaintDevice::initPainter
+224 (int (*)(...))QPaintDevice::redirected
+232 (int (*)(...))QPaintDevice::sharedPainter
+240 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+248 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter11setPageSizeEN17QPagedPaintDevice8PageSizeE
+256 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter13setPageSizeMMERK6QSizeF
+264 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter10setMarginsERKN17QPagedPaintDevice7MarginsE
+
+Class QPdfWriter
+ size=48 align=8
+ base size=48 base align=8
+QPdfWriter (0x0x7f22b683b1c0) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f22b68373c0) 0
+ primary-for QPdfWriter (0x0x7f22b683b1c0)
+ QPagedPaintDevice (0x0x7f22b6781618) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 176)
+ QPaintDevice (0x0x7f22b6837420) 16
+ primary-for QPagedPaintDevice (0x0x7f22b6781618)
+
+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=32 align=8
+ base size=32 base align=8
+QPicture (0x0x7f22b6781680) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f22b6837780) 0
+ primary-for QPicture (0x0x7f22b6781680)
+
+Class QPictureIO
+ size=8 align=8
+ base size=8 base align=8
+QPictureIO (0x0x7f22b64a1a20) 0
+
+Class QPictureFormatPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPictureFormatPlugin::QPrivateSignal (0x0x7f22b64a1ae0) 0 empty
+
+Vtable for QPictureFormatPlugin
+QPictureFormatPlugin::_ZTV20QPictureFormatPlugin: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QPictureFormatPlugin)
+16 (int (*)(...))QPictureFormatPlugin::metaObject
+24 (int (*)(...))QPictureFormatPlugin::qt_metacast
+32 (int (*)(...))QPictureFormatPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPictureFormatPlugin::loadPicture
+120 (int (*)(...))QPictureFormatPlugin::savePicture
+128 (int (*)(...))__cxa_pure_virtual
+
+Class QPictureFormatPlugin
+ size=16 align=8
+ base size=16 base align=8
+QPictureFormatPlugin (0x0x7f22b64a7820) 0
+ vptr=((& QPictureFormatPlugin::_ZTV20QPictureFormatPlugin) + 16)
+ QObject (0x0x7f22b64a1a80) 0
+ primary-for QPictureFormatPlugin (0x0x7f22b64a7820)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f22b64a1c60) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f22b64a1c00) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f22b657c420) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 59 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QRasterWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QRasterWindow::redirected
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI13QRasterWindow)
+344 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+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 (*)(...))(& _ZTI13QRasterWindow)
+408 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=64 align=8
+ base size=64 base align=8
+QRasterWindow (0x0x7f22b6577478) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f22b6585000) 0
+ primary-for QRasterWindow (0x0x7f22b6577478)
+ QWindow (0x0x7f22b6585070) 0
+ primary-for QPaintDeviceWindow (0x0x7f22b6585000)
+ QObject (0x0x7f22b657c300) 0
+ primary-for QWindow (0x0x7f22b6585070)
+ QSurface (0x0x7f22b657c360) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 344)
+ QPaintDevice (0x0x7f22b657c3c0) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 408)
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f22b657c660) 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 (0x0x7f22b6577548) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f22b657c600) 0
+ primary-for QScreen (0x0x7f22b6577548)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f22b657c8a0) 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 (0x0x7f22b65775b0) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f22b657c840) 0
+ primary-for QSessionManager (0x0x7f22b65775b0)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::setData
+48 (int (*)(...))QStandardItem::clone
+56 (int (*)(...))QStandardItem::type
+64 (int (*)(...))QStandardItem::read
+72 (int (*)(...))QStandardItem::write
+80 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f22b657ca80) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f22b6276240) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 48 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 (*)(...))QStandardItemModel::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::mimeTypes
+216 (int (*)(...))QStandardItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QStandardItemModel::dropMimeData
+240 (int (*)(...))QStandardItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStandardItemModel::insertRows
+264 (int (*)(...))QStandardItemModel::insertColumns
+272 (int (*)(...))QStandardItemModel::removeRows
+280 (int (*)(...))QStandardItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStandardItemModel::flags
+328 (int (*)(...))QStandardItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f22b6577b60) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f22b6577bc8) 0
+ primary-for QStandardItemModel (0x0x7f22b6577b60)
+ QObject (0x0x7f22b62761e0) 0
+ primary-for QAbstractItemModel (0x0x7f22b6577bc8)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f22b6276600) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f22b62f99c0) 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 (0x0x7f22b62edf08) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f22b62f9960) 0
+ primary-for QStyleHints (0x0x7f22b62edf08)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f22b62f9c00) 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 (0x0x7f22b62edf70) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f22b62f9ba0) 0
+ primary-for QTextObject (0x0x7f22b62edf70)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f22b62f9e40) 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 (0x0x7f22b6328000) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f22b6328068) 0
+ primary-for QTextBlockGroup (0x0x7f22b6328000)
+ QObject (0x0x7f22b62f9de0) 0
+ primary-for QTextObject (0x0x7f22b6328068)
+
+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 (0x0x7f22b6337060) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f22b6337120) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f22b6337180) 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 (0x0x7f22b63280d0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f22b6328138) 0
+ primary-for QTextFrame (0x0x7f22b63280d0)
+ QObject (0x0x7f22b63370c0) 0
+ primary-for QTextObject (0x0x7f22b6328138)
+
+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 (0x0x7f22b6391ae0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f22b6391ba0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f22b6391b40) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f22b64378a0) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f22b60910c0) 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 (0x0x7f22b608c3a8) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f22b6091060) 0
+ primary-for QSyntaxHighlighter (0x0x7f22b608c3a8)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f22b60912a0) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f22b6091300) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f22b60913c0) 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 (0x0x7f22b608c410) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f22b608c478) 0
+ primary-for QTextList (0x0x7f22b608c410)
+ QTextObject (0x0x7f22b608c4e0) 0
+ primary-for QTextBlockGroup (0x0x7f22b608c478)
+ QObject (0x0x7f22b6091360) 0
+ primary-for QTextObject (0x0x7f22b608c4e0)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f22b60919c0) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f22b60d2240) 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 (0x0x7f22b608c548) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f22b608c5b0) 0
+ primary-for QTextTable (0x0x7f22b608c548)
+ QTextObject (0x0x7f22b608c618) 0
+ primary-for QTextFrame (0x0x7f22b608c5b0)
+ QObject (0x0x7f22b60d21e0) 0
+ primary-for QTextObject (0x0x7f22b608c618)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f22b60d27e0) 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 (0x0x7f22b608c680) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f22b60d2780) 0
+ primary-for QValidator (0x0x7f22b608c680)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f22b60d2a20) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 17 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
+128 (int (*)(...))QIntValidator::setRange
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f22b608c6e8) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f22b608c750) 0
+ primary-for QIntValidator (0x0x7f22b608c6e8)
+ QObject (0x0x7f22b60d29c0) 0
+ primary-for QValidator (0x0x7f22b608c750)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f22b60d2c60) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 17 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
+128 (int (*)(...))QDoubleValidator::setRange
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f22b608c7b8) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f22b608c820) 0
+ primary-for QDoubleValidator (0x0x7f22b608c7b8)
+ QObject (0x0x7f22b60d2c00) 0
+ primary-for QValidator (0x0x7f22b608c820)
+
+Class QRegExpValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegExpValidator::QPrivateSignal (0x0x7f22b611b120) 0 empty
+
+Vtable for QRegExpValidator
+QRegExpValidator::_ZTV16QRegExpValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QRegExpValidator)
+16 (int (*)(...))QRegExpValidator::metaObject
+24 (int (*)(...))QRegExpValidator::qt_metacast
+32 (int (*)(...))QRegExpValidator::qt_metacall
+40 (int (*)(...))QRegExpValidator::~QRegExpValidator
+48 (int (*)(...))QRegExpValidator::~QRegExpValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegExpValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegExpValidator
+ size=24 align=8
+ base size=24 base align=8
+QRegExpValidator (0x0x7f22b608c888) 0
+ vptr=((& QRegExpValidator::_ZTV16QRegExpValidator) + 16)
+ QValidator (0x0x7f22b608c8f0) 0
+ primary-for QRegExpValidator (0x0x7f22b608c888)
+ QObject (0x0x7f22b611b0c0) 0
+ primary-for QValidator (0x0x7f22b608c8f0)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f22b611b300) 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 (0x0x7f22b608c958) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f22b608c9c0) 0
+ primary-for QRegularExpressionValidator (0x0x7f22b608c958)
+ QObject (0x0x7f22b611b2a0) 0
+ primary-for QValidator (0x0x7f22b608c9c0)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f22b611b4e0) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f22b6186e40) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f22b61fa420) 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 (0x0x7f22b61f4618) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7f22b61fa3c0) 0
+ primary-for QAbstractNetworkCache (0x0x7f22b61f4618)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f22b61fa660) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 41 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f22b61f4680) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7f22b61f46e8) 0
+ primary-for QAbstractSocket (0x0x7f22b61f4680)
+ QObject (0x0x7f22b61fa600) 0
+ primary-for QIODevice (0x0x7f22b61f46e8)
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f22b5e64d80) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f22b5e64e40) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f22b5f01000) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f22b5f4d180) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f22b5f9c240) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f22b5fe44e0) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f22b602da20) 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 (0x0x7f22b6024c98) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7f22b602d9c0) 0
+ primary-for QDnsLookup (0x0x7f22b6024c98)
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f22b602dde0) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 41 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f22b6024d00) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7f22b6024d68) 0
+ primary-for QTcpSocket (0x0x7f22b6024d00)
+ QIODevice (0x0x7f22b6024dd0) 0
+ primary-for QAbstractSocket (0x0x7f22b6024d68)
+ QObject (0x0x7f22b602dd80) 0
+ primary-for QIODevice (0x0x7f22b6024dd0)
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f22b5c676c0) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f22b5cdfe40) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f22b5df4060) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 41 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::writeData
+240 (int (*)(...))QSslSocket::resume
+248 (int (*)(...))QSslSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QSslSocket::disconnectFromHost
+272 (int (*)(...))QSslSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QSslSocket::setSocketDescriptor
+296 (int (*)(...))QSslSocket::setSocketOption
+304 (int (*)(...))QSslSocket::socketOption
+312 (int (*)(...))QSslSocket::waitForConnected
+320 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f22b5dbd138) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7f22b5dbd1a0) 0
+ primary-for QSslSocket (0x0x7f22b5dbd138)
+ QAbstractSocket (0x0x7f22b5dbd208) 0
+ primary-for QTcpSocket (0x0x7f22b5dbd1a0)
+ QIODevice (0x0x7f22b5dbd270) 0
+ primary-for QAbstractSocket (0x0x7f22b5dbd208)
+ QObject (0x0x7f22b5df4000) 0
+ primary-for QIODevice (0x0x7f22b5dbd270)
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f22b5df42a0) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f22b5df4300) 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 (0x0x7f22b5dbd2d8) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7f22b5df4240) 0
+ primary-for QDtlsClientVerifier (0x0x7f22b5dbd2d8)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f22b5df4540) 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 (0x0x7f22b5dbd340) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7f22b5df44e0) 0
+ primary-for QDtls (0x0x7f22b5dbd340)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f22b5df4780) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f22b5df48a0) 0
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f22b5a4e660) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f22b5b29480) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f22b5bbb0c0) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f22b580c240) 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 (0x0x7f22b580d138) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7f22b580c1e0) 0
+ primary-for QHttpMultiPart (0x0x7f22b580d138)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f22c6235f00) 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 (0x0x7f22ba1a3270) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7f22c6235d80) 0
+ primary-for QLocalServer (0x0x7f22ba1a3270)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f22c2b5ad80) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 30 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::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f22ba1a3ea0) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7f22ba1a3f08) 0
+ primary-for QLocalSocket (0x0x7f22ba1a3ea0)
+ QObject (0x0x7f22c2b5ad20) 0
+ primary-for QIODevice (0x0x7f22ba1a3f08)
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f22c2b972a0) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f22c29f88a0) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f22c0f08540) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 15 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::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f22c0dda8f0) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7f22c0eecf00) 0
+ primary-for QNetworkAccessManager (0x0x7f22c0dda8f0)
+
+Class QNetworkConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QNetworkConfiguration (0x0x7f22c0fc1600) 0
+
+Class QNetworkConfigurationManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkConfigurationManager::QPrivateSignal (0x0x7f22bf9dac60) 0 empty
+
+Vtable for QNetworkConfigurationManager
+QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QNetworkConfigurationManager)
+16 (int (*)(...))QNetworkConfigurationManager::metaObject
+24 (int (*)(...))QNetworkConfigurationManager::qt_metacast
+32 (int (*)(...))QNetworkConfigurationManager::qt_metacall
+40 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+48 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkConfigurationManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkConfigurationManager (0x0x7f22bf594f08) 0
+ vptr=((& QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager) + 16)
+ QObject (0x0x7f22c0069300) 0
+ primary-for QNetworkConfigurationManager (0x0x7f22bf594f08)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f22bf7a3b40) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f22bf1a2240) 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 (0x0x7f22bec58478) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7f22bf1a2180) 0
+ primary-for QNetworkCookieJar (0x0x7f22bec58478)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f22bee8e3c0) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f22bdfd6540) 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 (0x0x7f22bd6d1f70) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7f22bd6e7888) 0
+ primary-for QNetworkDiskCache (0x0x7f22bd6d1f70)
+ QObject (0x0x7f22bdfb29c0) 0
+ primary-for QAbstractNetworkCache (0x0x7f22bd6e7888)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f22bdff4600) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f22bd1d6f00) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f22bcbc0420) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f22bc59aae0) 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 (0x0x7f22bb801660) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f22bb820ba0) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 36 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 (*)(...))QNetworkReply::writeData
+240 (int (*)(...))QNetworkReply::setReadBufferSize
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))QNetworkReply::ignoreSslErrors
+264 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+272 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f22ba217958) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7f22ba2179c0) 0
+ primary-for QNetworkReply (0x0x7f22ba217958)
+ QObject (0x0x7f22bb820b40) 0
+ primary-for QIODevice (0x0x7f22ba2179c0)
+
+Class QNetworkSession::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkSession::QPrivateSignal (0x0x7f22bb542900) 0 empty
+
+Vtable for QNetworkSession
+QNetworkSession::_ZTV15QNetworkSession: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QNetworkSession)
+16 (int (*)(...))QNetworkSession::metaObject
+24 (int (*)(...))QNetworkSession::qt_metacast
+32 (int (*)(...))QNetworkSession::qt_metacall
+40 (int (*)(...))QNetworkSession::~QNetworkSession
+48 (int (*)(...))QNetworkSession::~QNetworkSession
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QNetworkSession::connectNotify
+104 (int (*)(...))QNetworkSession::disconnectNotify
+
+Class QNetworkSession
+ size=24 align=8
+ base size=24 base align=8
+QNetworkSession (0x0x7f22ba22e0d0) 0
+ vptr=((& QNetworkSession::_ZTV15QNetworkSession) + 16)
+ QObject (0x0x7f22bb49ed80) 0
+ primary-for QNetworkSession (0x0x7f22ba22e0d0)
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f22bb2b0cc0) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f22ba91cf00) 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 (0x0x7f22b98ad478) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7f22ba91cae0) 0
+ primary-for QTcpServer (0x0x7f22b98ad478)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f22ba9f7480) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f22ba1c8420) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f22b905f9c0) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f22b8bd7cc0) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f22b87893c0) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f22b7e89ae0) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 41 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f22c0c0c208) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7f22c0c0c270) 0
+ primary-for QUdpSocket (0x0x7f22c0c0c208)
+ QIODevice (0x0x7f22c0c0c2d8) 0
+ primary-for QAbstractSocket (0x0x7f22c0c0c270)
+ QObject (0x0x7f22b7e89a80) 0
+ primary-for QIODevice (0x0x7f22c0c0c2d8)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f22b7eca1e0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f22b7f015a0) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f22b7f01720) 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 (0x0x7f22c0c0c3a8) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7f22b7f01660) 0
+ primary-for QJSEngine (0x0x7f22c0c0c3a8)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f22b7fb2d20) 0
+
+Class QQmlPrivate::RegisterType
+ size=128 align=8
+ base size=124 base align=8
+QQmlPrivate::RegisterType (0x0x7f22b7d25120) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f22b7d25180) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f22b7d253c0) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=64 align=8
+ base size=64 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f22b7d25420) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f22b7d25f00) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f22b7d25f60) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f22b7d422a0) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f22b7d42300) 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 (0x0x7f22b7d6f060) 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 (0x0x7f22b7d6f4e0) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f22b7c095a0) 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 (0x0x7f22b6d8bf60) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f22b6dbf600) 0
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlImageProviderBase
+ size=8 align=8
+ base size=8 base align=8
+QQmlImageProviderBase (0x0x7f22b6391300) 0 nearly-empty
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f22b6437120) 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 (0x0x7f22bea17a90) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7f22bea17af8) 0
+ primary-for QQmlEngine (0x0x7f22bea17a90)
+ QObject (0x0x7f22b6437060) 0
+ primary-for QJSEngine (0x0x7f22bea17af8)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f22b6057660) 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 (0x0x7f22bea17bc8) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7f22bea17c30) 0
+ primary-for QQmlApplicationEngine (0x0x7f22bea17bc8)
+ QJSEngine (0x0x7f22bea17c98) 0
+ primary-for QQmlEngine (0x0x7f22bea17c30)
+ QObject (0x0x7f22b6057600) 0
+ primary-for QJSEngine (0x0x7f22bea17c98)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f22b6073720) 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 (0x0x7f22bea17d00) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7f22b6057ae0) 0
+ primary-for QQmlComponent (0x0x7f22bea17d00)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f22b61fa180) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=24 align=8
+ base size=24 base align=8
+QQmlContext::PropertyPair (0x0x7f22b61fa240) 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 (0x0x7f22bda81270) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7f22b61fa120) 0
+ primary-for QQmlContext (0x0x7f22bda81270)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f22b5ee6e40) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f22b5f31ea0) 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 (0x0x7f22bda812d8) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7f22b5f31ba0) 0
+ primary-for QQmlExpression (0x0x7f22bda812d8)
+
+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 (0x0x7f22b5f7e9c0) 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 (0x0x7f22bda81340) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7f22b5f7ea20) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f22bda81340)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f22b5fca660) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 22 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::initializeEngine
+128 (int (*)(...))-16
+136 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+144 0
+152 0
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f22c10e87e0) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7f22b5fca0c0) 0
+ primary-for QQmlExtensionPlugin (0x0x7f22c10e87e0)
+ QQmlExtensionInterface (0x0x7f22bda813a8) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 144)
+ QQmlTypesExtensionInterface (0x0x7f22b5fca600) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f22bda813a8)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f22b5fe42a0) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f22b5fe4b40) 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 (0x0x7f22bda81478) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7f22b5fe4360) 0
+ primary-for QQmlFileSelector (0x0x7f22bda81478)
+
+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 (0x0x7f22b5fe4f00) 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 (0x0x7f22b6010120) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f22bda814e0) 0
+ QDebug (0x0x7f22b6010180) 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 (0x0x7f22b5a0c8a0) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f22b5a0c960) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f22b9665f00) 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 (0x0x7f22b973db60) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7f22b9665ea0) 0
+ primary-for QQmlPropertyMap (0x0x7f22b973db60)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f22b91461e0) 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 (0x0x7f22b973dbc8) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+ QObject (0x0x7f22b9146180) 0
+ primary-for QQuickTransform (0x0x7f22b973dbc8)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f22b9146480) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f22b91464e0) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f22b9146540) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 55 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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickItem::updatePaintNode
+376 (int (*)(...))QQuickItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI10QQuickItem)
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f22c0f1aa80) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+ QObject (0x0x7f22b91463c0) 0
+ primary-for QQuickItem (0x0x7f22c0f1aa80)
+ QQmlParserStatus (0x0x7f22b9146420) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 408)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f22b8125ea0) 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 (0x0x7f22b8125f00) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 56 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 (*)(...))QQuickItem::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickFramebufferObject::geometryChanged
+368 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+376 (int (*)(...))QQuickFramebufferObject::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+416 0
+424 0
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f22b973dd00) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+ QQuickItem (0x0x7f22c0ff9d20) 0
+ primary-for QQuickFramebufferObject (0x0x7f22b973dd00)
+ QObject (0x0x7f22b8125de0) 0
+ primary-for QQuickItem (0x0x7f22c0ff9d20)
+ QQmlParserStatus (0x0x7f22b8125e40) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 416)
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f22b7bc1180) 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 (0x0x7f22b973dd68) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+ QObject (0x0x7f22b7bc1120) 0
+ primary-for QQuickTextureFactory (0x0x7f22b973dd68)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f22b7bc1300) 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 (0x0x7f22b973ddd0) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+ QObject (0x0x7f22b7bc12a0) 0
+ primary-for QQuickImageResponse (0x0x7f22b973ddd0)
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+24 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageProvider (0x0x7f22b973de38) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+ QQmlImageProviderBase (0x0x7f22b7bc14e0) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7f22b973de38)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 0
+24 0
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickAsyncImageProvider (0x0x7f22b973dea0) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+ QQuickImageProvider (0x0x7f22b973df08) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f22b973dea0)
+ QQmlImageProviderBase (0x0x7f22b7bc1720) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7f22b973df08)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f22b7bc17e0) 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 (0x0x7f22b973df70) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+ QObject (0x0x7f22b7bc1780) 0
+ primary-for QQuickItemGrabResult (0x0x7f22b973df70)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f22b7bc1a80) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 56 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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickPaintedItem::updatePaintNode
+376 (int (*)(...))QQuickPaintedItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+416 0
+424 0
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f22b79fd000) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+ QQuickItem (0x0x7f22c102d3f0) 0
+ primary-for QQuickPaintedItem (0x0x7f22b79fd000)
+ QObject (0x0x7f22b7bc19c0) 0
+ primary-for QQuickItem (0x0x7f22c102d3f0)
+ QQmlParserStatus (0x0x7f22b7bc1a20) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 416)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f22b7a2e540) 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 (0x0x7f22b79fd1a0) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+ QObject (0x0x7f22b7a2e4e0) 0
+ primary-for QQuickRenderControl (0x0x7f22b79fd1a0)
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f22b7a2e7e0) 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 (0x0x7f22b79fd208) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+ QObject (0x0x7f22b7a2e780) 0
+ primary-for QQuickTextDocument (0x0x7f22b79fd208)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f22b7a2ee40) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f22b7a2eea0) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f22b7a2ef00) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f22b7a2ef60) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f22b691d000) 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 (0x0x7f22b7a2ede0) 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=80 align=8
+ base size=80 base align=8
+QSGNode (0x0x7f22bb8cf000) 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=112 align=8
+ base size=112 base align=8
+QSGBasicGeometryNode (0x0x7f22b79fd8f0) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+ QSGNode (0x0x7f22bb8cf960) 0
+ primary-for QSGBasicGeometryNode (0x0x7f22b79fd8f0)
+
+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=144 align=8
+ base size=144 base align=8
+QSGGeometryNode (0x0x7f22b79fd958) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+ QSGBasicGeometryNode (0x0x7f22b79fd9c0) 0
+ primary-for QSGGeometryNode (0x0x7f22b79fd958)
+ QSGNode (0x0x7f22bb8cfc00) 0
+ primary-for QSGBasicGeometryNode (0x0x7f22b79fd9c0)
+
+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=152 align=8
+ base size=152 base align=8
+QSGClipNode (0x0x7f22b79fda28) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+ QSGBasicGeometryNode (0x0x7f22b79fda90) 0
+ primary-for QSGClipNode (0x0x7f22b79fda28)
+ QSGNode (0x0x7f22bb8cfde0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f22b79fda90)
+
+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=216 align=8
+ base size=216 base align=8
+QSGTransformNode (0x0x7f22b79fdaf8) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+ QSGNode (0x0x7f22bb8cff00) 0
+ primary-for QSGTransformNode (0x0x7f22b79fdaf8)
+
+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=88 align=8
+ base size=88 base align=8
+QSGRootNode (0x0x7f22b79fdb60) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+ QSGNode (0x0x7f22b77ff060) 0
+ primary-for QSGRootNode (0x0x7f22b79fdb60)
+
+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=96 align=8
+ base size=96 base align=8
+QSGOpacityNode (0x0x7f22b79fdc30) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+ QSGNode (0x0x7f22b77ff1e0) 0
+ primary-for QSGOpacityNode (0x0x7f22b79fdc30)
+
+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 (0x0x7f22b77ff300) 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 (0x0x7f22b7846120) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f22b747d000) 0 empty
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 45 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickWindow::keyPressEvent
+216 (int (*)(...))QQuickWindow::keyReleaseEvent
+224 (int (*)(...))QQuickWindow::mousePressEvent
+232 (int (*)(...))QQuickWindow::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickWindow::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI12QQuickWindow)
+312 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+320 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f22b79fde38) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+ QWindow (0x0x7f22c0beb0e0) 0
+ primary-for QQuickWindow (0x0x7f22b79fde38)
+ QObject (0x0x7f22b7846f00) 0
+ primary-for QWindow (0x0x7f22c0beb0e0)
+ QSurface (0x0x7f22b7846f60) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 312)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f22b747da20) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 45 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickView::keyPressEvent
+216 (int (*)(...))QQuickView::keyReleaseEvent
+224 (int (*)(...))QQuickView::mousePressEvent
+232 (int (*)(...))QQuickView::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickView::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI10QQuickView)
+312 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+320 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f22b79fdf70) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+ QQuickWindow (0x0x7f22b74b5000) 0
+ primary-for QQuickView (0x0x7f22b79fdf70)
+ QWindow (0x0x7f22c0c04310) 0
+ primary-for QQuickWindow (0x0x7f22b74b5000)
+ QObject (0x0x7f22b747d960) 0
+ primary-for QWindow (0x0x7f22c0c04310)
+ QSurface (0x0x7f22b747d9c0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 312)
+
+Class QSGAbstractRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGAbstractRenderer::QPrivateSignal (0x0x7f22b747dde0) 0 empty
+
+Vtable for QSGAbstractRenderer
+QSGAbstractRenderer::_ZTV19QSGAbstractRenderer: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QSGAbstractRenderer)
+16 (int (*)(...))QSGAbstractRenderer::metaObject
+24 (int (*)(...))QSGAbstractRenderer::qt_metacast
+32 (int (*)(...))QSGAbstractRenderer::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QSGAbstractRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSGAbstractRenderer (0x0x7f22b74b5068) 0
+ vptr=((& QSGAbstractRenderer::_ZTV19QSGAbstractRenderer) + 16)
+ QObject (0x0x7f22b747dd80) 0
+ primary-for QSGAbstractRenderer (0x0x7f22b74b5068)
+
+Class QSGEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGEngine::QPrivateSignal (0x0x7f22b74de8a0) 0 empty
+
+Vtable for QSGEngine
+QSGEngine::_ZTV9QSGEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSGEngine)
+16 (int (*)(...))QSGEngine::metaObject
+24 (int (*)(...))QSGEngine::qt_metacast
+32 (int (*)(...))QSGEngine::qt_metacall
+40 (int (*)(...))QSGEngine::~QSGEngine
+48 (int (*)(...))QSGEngine::~QSGEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSGEngine
+ size=16 align=8
+ base size=16 base align=8
+QSGEngine (0x0x7f22b74b51a0) 0
+ vptr=((& QSGEngine::_ZTV9QSGEngine) + 16)
+ QObject (0x0x7f22b74de840) 0
+ primary-for QSGEngine (0x0x7f22b74b51a0)
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f22b74def60) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 0
+24 0
+32 (int (*)(...))QSGMaterialShader::activate
+40 (int (*)(...))QSGMaterialShader::deactivate
+48 (int (*)(...))QSGMaterialShader::updateState
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGMaterialShader::compile
+72 (int (*)(...))QSGMaterialShader::initialize
+80 (int (*)(...))QSGMaterialShader::vertexShader
+88 (int (*)(...))QSGMaterialShader::fragmentShader
+
+Class QSGMaterialShader
+ size=32 align=8
+ base size=32 base align=8
+QSGMaterialShader (0x0x7f22b74def00) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f22b7517540) 0 empty
+
+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 (0x0x7f22b75175a0) 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 (0x0x7f22b74b54e0) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+ QSGMaterial (0x0x7f22b75582a0) 0
+ primary-for QSGFlatColorMaterial (0x0x7f22b74b54e0)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f22b75583c0) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 22 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 (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f22b74b5548) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+ QObject (0x0x7f22b7558360) 0
+ primary-for QSGTexture (0x0x7f22b74b5548)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f22b7558660) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 23 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 (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f22b74b55b0) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+ QSGTexture (0x0x7f22b74b5618) 0
+ primary-for QSGDynamicTexture (0x0x7f22b74b55b0)
+ QObject (0x0x7f22b7558600) 0
+ primary-for QSGTexture (0x0x7f22b74b5618)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 20 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
+
+Class QSGImageNode
+ size=144 align=8
+ base size=144 base align=8
+QSGImageNode (0x0x7f22b74b5680) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+ QSGGeometryNode (0x0x7f22b74b56e8) 0
+ primary-for QSGImageNode (0x0x7f22b74b5680)
+ QSGBasicGeometryNode (0x0x7f22b74b5750) 0
+ primary-for QSGGeometryNode (0x0x7f22b74b56e8)
+ QSGNode (0x0x7f22b7558780) 0
+ primary-for QSGBasicGeometryNode (0x0x7f22b74b5750)
+
+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=144 align=8
+ base size=144 base align=8
+QSGNinePatchNode (0x0x7f22b74b5888) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+ QSGGeometryNode (0x0x7f22b74b58f0) 0
+ primary-for QSGNinePatchNode (0x0x7f22b74b5888)
+ QSGBasicGeometryNode (0x0x7f22b74b5958) 0
+ primary-for QSGGeometryNode (0x0x7f22b74b58f0)
+ QSGNode (0x0x7f22b7558f60) 0
+ primary-for QSGBasicGeometryNode (0x0x7f22b74b5958)
+
+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=144 align=8
+ base size=144 base align=8
+QSGRectangleNode (0x0x7f22b74b59c0) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+ QSGGeometryNode (0x0x7f22b74b5a28) 0
+ primary-for QSGRectangleNode (0x0x7f22b74b59c0)
+ QSGBasicGeometryNode (0x0x7f22b74b5a90) 0
+ primary-for QSGGeometryNode (0x0x7f22b74b5a28)
+ QSGNode (0x0x7f22b7596000) 0
+ primary-for QSGBasicGeometryNode (0x0x7f22b74b5a90)
+
+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 (0x0x7f22b7596120) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 11 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 (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGRenderNode::releaseResources
+72 (int (*)(...))QSGRenderNode::flags
+80 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=88 align=8
+ base size=88 base align=8
+QSGRenderNode (0x0x7f22b74b5af8) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+ QSGNode (0x0x7f22b75960c0) 0
+ primary-for QSGRenderNode (0x0x7f22b74b5af8)
+
+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=320 align=8
+ base size=320 base align=8
+QSGSimpleRectNode (0x0x7f22b74b5f70) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+ QSGGeometryNode (0x0x7f22b75f6000) 0
+ primary-for QSGSimpleRectNode (0x0x7f22b74b5f70)
+ QSGBasicGeometryNode (0x0x7f22b75f6068) 0
+ primary-for QSGGeometryNode (0x0x7f22b75f6000)
+ QSGNode (0x0x7f22b75d3840) 0
+ primary-for QSGBasicGeometryNode (0x0x7f22b75f6068)
+
+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 (0x0x7f22b75f60d0) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+ QSGMaterial (0x0x7f22b75d3900) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f22b75f60d0)
+
+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 (0x0x7f22b75f6138) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+ QSGOpaqueTextureMaterial (0x0x7f22b75f61a0) 0
+ primary-for QSGTextureMaterial (0x0x7f22b75f6138)
+ QSGMaterial (0x0x7f22b75d3d80) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f22b75f61a0)
+
+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=384 align=8
+ base size=384 base align=8
+QSGSimpleTextureNode (0x0x7f22b75f6208) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+ QSGGeometryNode (0x0x7f22b75f6270) 0
+ primary-for QSGSimpleTextureNode (0x0x7f22b75f6208)
+ QSGBasicGeometryNode (0x0x7f22b75f62d8) 0
+ primary-for QSGGeometryNode (0x0x7f22b75f6270)
+ QSGNode (0x0x7f22b75d3de0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f22b75f62d8)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f22b7614780) 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 (0x0x7f22b75f6478) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+ QObject (0x0x7f22b7614720) 0
+ primary-for QSGTextureProvider (0x0x7f22b75f6478)
+
+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 (0x0x7f22b75f64e0) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+ QSGMaterial (0x0x7f22b76148a0) 0
+ primary-for QSGVertexColorMaterial (0x0x7f22b75f64e0)
+
+Class QQuickStyle
+ size=1 align=1
+ base size=0 base align=1
+QQuickStyle (0x0x7f22b7614900) 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 = 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 (0x0x7f22b7250c00) 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 (0x0x7f22b7250f60) 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 (0x0x7f22b7270180) 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 (0x0x7f22b72704e0) 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 (0x0x7f22b72706c0) 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 (0x0x7f22b7270a20) 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 (0x0x7f22b7270c00) 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 (0x0x7f22b7270f60) 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 (0x0x7f22b729c180) 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 (0x0x7f22b729c4e0) 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 (0x0x7f22b729c6c0) 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 (0x0x7f22b729ca20) 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 (0x0x7f22b729cc00) 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 (0x0x7f22b729cf60) 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 (0x0x7f22b72c3180) 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 (0x0x7f22b72c34e0) 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 (0x0x7f22b72da9c0) 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 (0x0x7f22b72dad20) 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 (0x0x7f22b72daea0) 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 (0x0x7f22b72f7240) 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 (0x0x7f22b72f73c0) 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 (0x0x7f22b72f7720) 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 (0x0x7f22b72f78a0) 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 (0x0x7f22b72f7c00) 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 (0x0x7f22b72f7d80) 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 (0x0x7f22b731a120) 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 (0x0x7f22b731a2a0) 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 (0x0x7f22b731a600) 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 (0x0x7f22b731a780) 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 (0x0x7f22b731aae0) 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 (0x0x7f22b731ac60) 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 (0x0x7f22b73f3000) 0 empty
+
diff --git a/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.14.0.linux-gcc-amd64.txt b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.14.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..db7b454b59
--- /dev/null
+++ b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.5.14.0.linux-gcc-amd64.txt
@@ -0,0 +1,11603 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f31cd96d000) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f31cd9b7780) 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 (0x0x7f31cd9b79c0) 0 empty
+
+Class std::__do_is_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_default_constructible_impl (0x0x7f31cd9b7c00) 0 empty
+
+Class std::__do_is_static_castable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_static_castable_impl (0x0x7f31cd9b7e40) 0 empty
+
+Class std::__do_is_direct_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_direct_constructible_impl (0x0x7f31cd9e3000) 0 empty
+
+Class std::__do_is_nary_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nary_constructible_impl (0x0x7f31cd9e33c0) 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 (0x0x7f31cda214e0) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f31cd677ba0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f31cd677c60) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f31cd6a7060) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f31cd6a70c0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f31cd6a7120) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f31cd6a7180) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f31cd6a71e0) 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 (0x0x7f31cd6a72a0) 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 (0x0x7f31cd6a7360) 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 (0x0x7f31cd6a7420) 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 (0x0x7f31cd6a74e0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f31cd6a7840) 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 (0x0x7f31cd6a7ba0) 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 (0x0x7f31cd6a7c00) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f31cd6f01e0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f31cd6f0840) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f31cd6e9270) 0 empty
+ std::__nonesuch (0x0x7f31cd6f0d20) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f31cd7726c0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f31cd772720) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f31cd7cc420) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f31cd7cc480) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f31cd6e9750) 0 empty
+ std::input_iterator_tag (0x0x7f31cd7cc4e0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f31cd6e97b8) 0 empty
+ std::forward_iterator_tag (0x0x7f31cd6e9820) 0 empty
+ std::input_iterator_tag (0x0x7f31cd7cc540) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f31cd6e9888) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f31cd6e98f0) 0 empty
+ std::forward_iterator_tag (0x0x7f31cd6e9958) 0 empty
+ std::input_iterator_tag (0x0x7f31cd7cc5a0) 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 (0x0x7f31cd4800c0) 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 (0x0x7f31cd4801e0) 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 (0x0x7f31cd4804e0) 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 (0x0x7f31cd4807e0) 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 (0x0x7f31cd480900) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f31cd50bc00) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f31cd50bf00) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f31cd50bf60) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f31cd553060) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f31cd5530c0) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f31cd553120) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f31cd553180) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f31cd553420) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f31cd5536c0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f31cd553720) 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 (0x0x7f31cd6094e0) 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 (0x0x7f31cd6e9c98) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f31cd6096c0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f31cd6e9c98)
+
+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 (0x0x7f31cd6098a0) 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 (0x0x7f31cd6e9d00) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f31cd609c60) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f31cd6e9d00)
+
+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 (0x0x7f31cd6e9d68) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f31cd609e40) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f31cd6e9d68)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f31cd63a060) 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 (0x0x7f31cd63a600) 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 (0x0x7f31cd6e9dd0) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f31cd63acc0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f31cd6e9dd0)
+
+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 (0x0x7f31cd6e9e38) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f31cd6e9ea0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f31cd6e9e38)
+ std::exception (0x0x7f31cd63aea0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f31cd6e9ea0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f31cd2740c0) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f31cd2742a0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f31cd2e5780) 0 empty
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f31ccf5fcc0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f31ccf5fde0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f31ccf92000) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f31ccf926c0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f31ccfdbe40) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f31ccc8b360) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f31cd022d00) 0
+ std::__atomic_flag_base (0x0x7f31ccc8b3c0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f31cce2b478) 0
+ QAtomicInteger<int> (0x0x7f31cce2b4e0) 0
+ QBasicAtomicInteger<int> (0x0x7f31ccbc0600) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f31cc819180) 0 empty
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f31cc45c720) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f31cc45ce40) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f31cc493138) 0
+ QGenericArgument (0x0x7f31cc49c120) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f31cc49c5a0) 0
+
+Class QMetaObject
+ size=48 align=8
+ base size=48 base align=8
+QMetaObject (0x0x7f31cc49c540) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f31cc49ce40) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f31cc54f960) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f31cc5720c0) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f31cc61fea0) 0
+
+Class QArrayData
+ size=24 align=8
+ base size=24 base align=8
+QArrayData (0x0x7f31cc644240) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f31cc2a7540) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f31cc355d80) 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 (0x0x7f31cc355e40) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f31cc41df60) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f31cc04e060) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f31cc04e0c0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f31cc04e120) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f31cc04e180) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f31cc04e2a0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f31cc04e300) 0
+
+Class _IO_marker
+ size=24 align=8
+ base size=24 base align=8
+_IO_marker (0x0x7f31cc1912a0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f31cc191300) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f31cbf43360) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f31cbf434e0) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f31cbcbd660) 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 (0x0x7f31cbcbda20) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f31cbcbdcc0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f31cbcbdea0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f31cbd17ea0) 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 (0x0x7f31cbd520d0) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f31cbd17f60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f31cbd520d0)
+
+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 (0x0x7f31cbd52138) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f31cbd521a0) 0
+ primary-for std::domain_error (0x0x7f31cbd52138)
+ std::exception (0x0x7f31cbd68000) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f31cbd521a0)
+
+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 (0x0x7f31cbd52208) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f31cbd52270) 0
+ primary-for std::invalid_argument (0x0x7f31cbd52208)
+ std::exception (0x0x7f31cbd68060) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f31cbd52270)
+
+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 (0x0x7f31cbd522d8) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f31cbd52340) 0
+ primary-for std::length_error (0x0x7f31cbd522d8)
+ std::exception (0x0x7f31cbd680c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f31cbd52340)
+
+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 (0x0x7f31cbd523a8) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f31cbd52410) 0
+ primary-for std::out_of_range (0x0x7f31cbd523a8)
+ std::exception (0x0x7f31cbd68120) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f31cbd52410)
+
+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 (0x0x7f31cbd52478) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f31cbd68180) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f31cbd52478)
+
+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 (0x0x7f31cbd524e0) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f31cbd52548) 0
+ primary-for std::range_error (0x0x7f31cbd524e0)
+ std::exception (0x0x7f31cbd681e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f31cbd52548)
+
+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 (0x0x7f31cbd525b0) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f31cbd52618) 0
+ primary-for std::overflow_error (0x0x7f31cbd525b0)
+ std::exception (0x0x7f31cbd68240) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f31cbd52618)
+
+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 (0x0x7f31cbd52680) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f31cbd526e8) 0
+ primary-for std::underflow_error (0x0x7f31cbd52680)
+ std::exception (0x0x7f31cbd682a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f31cbd526e8)
+
+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 (0x0x7f31cbd68420) 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 (0x0x7f31cbd68780) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f31cbdac000) 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 (0x0x7f31cbd52af8) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f31cbd52b60) 0
+ primary-for std::system_error (0x0x7f31cbd52af8)
+ std::exception (0x0x7f31cbdacba0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f31cbd52b60)
+
+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 (0x0x7f31cbd52dd0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f31cbd52e38) 0
+ primary-for std::ios_base::failure (0x0x7f31cbd52dd0)
+ std::runtime_error (0x0x7f31cbd52ea0) 0
+ primary-for std::system_error (0x0x7f31cbd52e38)
+ std::exception (0x0x7f31cbe0a180) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f31cbd52ea0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f31cbe0a1e0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f31cbe0a240) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f31cbe0a2a0) 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 (0x0x7f31cbe0a120) 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 (0x0x7f31cbad8ba0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f31cbb81d80) 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> (0x0x7f31cb7505b0 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> (0x0x7f31cb750680 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> (0x0x7f31cb792340 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> (0x0x7f31cb792410 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 QByteArrayDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QByteArrayDataPtr (0x0x7f31cb7ba720) 0
+
+Class QByteArray
+ size=8 align=8
+ base size=8 base align=8
+QByteArray (0x0x7f31cb7ba780) 0
+
+Class QByteRef
+ size=16 align=8
+ base size=12 base align=8
+QByteRef (0x0x7f31cb4e7b40) 0
+
+Class QStringDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QStringDataPtr (0x0x7f31cb58d9c0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f31cb58de40) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f31cb26df00) 0
+
+Class QString::Null
+ size=1 align=1
+ base size=0 base align=1
+QString::Null (0x0x7f31cb323ea0) 0 empty
+
+Class QString
+ size=8 align=8
+ base size=8 base align=8
+QString (0x0x7f31cb323d80) 0
+
+Class QCharRef
+ size=16 align=8
+ base size=12 base align=8
+QCharRef (0x0x7f31cb1e2d20) 0
+
+Class QStringRef
+ size=16 align=8
+ base size=16 base align=8
+QStringRef (0x0x7f31caf7c900) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f31cad02720) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f31cb022270) 0
+ QtPrivate::ArgBase (0x0x7f31cad02780) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f31cb0222d8) 0
+ QtPrivate::ArgBase (0x0x7f31cad02960) 0
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f31cadd68a0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f31cadd6900) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f31cadd6a80) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f31cadd6b40) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f31cb022680) 0
+ std::__uses_alloc_base (0x0x7f31cadd6ae0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f31cab34ea0) 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 (0x0x7f31cab9b8f0) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f31cabac7e0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f31cab9b8f0)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f31cabac8a0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f31cabac900) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f31cabacc00) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f31ca9e20c0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f31ca9e2180) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f31cdae28a0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f31caa20478) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f31cdb08000) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f31caa205b0) 0
+ std::_Bit_iterator_base (0x0x7f31caa20618) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f31cdb08660) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f31caa20680) 0
+ std::_Bit_iterator_base (0x0x7f31caa206e8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f31cdb08e40) 0 empty
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f31ca3569c0) 0
+
+Class QListData::NotArrayCompatibleLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotArrayCompatibleLayout (0x0x7f31ca42c780) 0 empty
+
+Class QListData::NotIndirectLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotIndirectLayout (0x0x7f31ca42c7e0) 0 empty
+
+Class QListData::ArrayCompatibleLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::ArrayCompatibleLayout (0x0x7f31ca36e208) 0 empty
+ QListData::NotIndirectLayout (0x0x7f31ca42c840) 0 empty
+
+Class QListData::InlineWithPaddingLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::InlineWithPaddingLayout (0x0x7f31ca380930) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f31ca42c8a0) 0 empty
+ QListData::NotIndirectLayout (0x0x7f31ca42c900) 0 empty
+
+Class QListData::IndirectLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::IndirectLayout (0x0x7f31ca36e270) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f31ca42c960) 0 empty
+
+Class QListData::Data
+ size=24 align=8
+ base size=24 base align=8
+QListData::Data (0x0x7f31ca42c9c0) 0
+
+Class QListData
+ size=8 align=8
+ base size=8 base align=8
+QListData (0x0x7f31ca42c720) 0
+
+Class QRegExp
+ size=8 align=8
+ base size=8 base align=8
+QRegExp (0x0x7f31ca121b40) 0
+
+Class QStringMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QStringMatcher::Data (0x0x7f31ca2190c0) 0
+
+Class QStringMatcher
+ size=1048 align=8
+ base size=1048 base align=8
+QStringMatcher (0x0x7f31ca219060) 0
+
+Class QStringList
+ size=8 align=8
+ base size=8 base align=8
+QStringList (0x0x7f31ca204f08) 0
+ QList<QString> (0x0x7f31ca204f70) 0
+ QListSpecialMethods<QString> (0x0x7f31ca219300) 0 empty
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f31c9efd240) 0 empty
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f31c9f80480) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f31c9f807e0) 0
+
+Class QtPrivate::AbstractDebugStreamFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::AbstractDebugStreamFunction (0x0x7f31c9dccde0) 0
+
+Class QtPrivate::AbstractComparatorFunction
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::AbstractComparatorFunction (0x0x7f31c9de7180) 0
+
+Class QtPrivate::AbstractConverterFunction
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::AbstractConverterFunction (0x0x7f31c9de76c0) 0
+
+Class QMetaType
+ size=80 align=8
+ base size=80 base align=8
+QMetaType (0x0x7f31c9de7c00) 0
+
+Class QtMetaTypePrivate::VariantData
+ size=24 align=8
+ base size=20 base align=8
+QtMetaTypePrivate::VariantData (0x0x7f31c9e3ade0) 0
+
+Class QtMetaTypePrivate::VectorBoolElements
+ size=1 align=1
+ base size=0 base align=1
+QtMetaTypePrivate::VectorBoolElements (0x0x7f31c9a734e0) 0 empty
+
+Class QtMetaTypePrivate::QSequentialIterableImpl
+ size=104 align=8
+ base size=104 base align=8
+QtMetaTypePrivate::QSequentialIterableImpl (0x0x7f31c9b0a360) 0
+
+Class QtMetaTypePrivate::QAssociativeIterableImpl
+ size=112 align=8
+ base size=112 base align=8
+QtMetaTypePrivate::QAssociativeIterableImpl (0x0x7f31c9b60a20) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f31c9bb6f60) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f31c967f540) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f31c97ae000) 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=48 align=8
+ base size=48 base align=8
+QObjectData (0x0x7f31c97ae060) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f31c97ae240) 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 (0x0x7f31c97ae1e0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Vtable for QObjectUserData
+QObjectUserData::_ZTV15QObjectUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QObjectUserData)
+16 (int (*)(...))QObjectUserData::~QObjectUserData
+24 (int (*)(...))QObjectUserData::~QObjectUserData
+
+Class QObjectUserData
+ size=8 align=8
+ base size=8 base align=8
+QObjectUserData (0x0x7f31c9480060) 0 nearly-empty
+ vptr=((& QObjectUserData::_ZTV15QObjectUserData) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f31c94801e0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f31c9480a80) 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 (0x0x7f31c947b0d0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f31c9480a20) 0
+ primary-for QAbstractAnimation (0x0x7f31c947b0d0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f31c9480e40) 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 (0x0x7f31c947b138) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f31c9480de0) 0
+ primary-for QAnimationDriver (0x0x7f31c947b138)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f31c94c50c0) 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 (0x0x7f31c947b1a0) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f31c94c5060) 0
+ primary-for QEventLoop (0x0x7f31c947b1a0)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f31c94c5960) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f31c94c5a20) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f31c94c5a80) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 28 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 (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))QAbstractEventDispatcher::startingUp
+216 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f31c947b2d8) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f31c94c59c0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f31c947b2d8)
+
+Class QMapNodeBase
+ size=24 align=8
+ base size=24 base align=8
+QMapNodeBase (0x0x7f31c9537a80) 0
+
+Class QMapDataBase
+ size=40 align=8
+ base size=40 base align=8
+QMapDataBase (0x0x7f31c9564720) 0
+
+Class QHashData::Node
+ size=16 align=8
+ base size=16 base align=8
+QHashData::Node (0x0x7f31c92530c0) 0
+
+Class QHashData
+ size=48 align=8
+ base size=44 base align=8
+QHashData (0x0x7f31c9253060) 0
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f31c9253360) 0 empty
+
+Class QVariant::PrivateShared
+ size=16 align=8
+ base size=12 base align=8
+QVariant::PrivateShared (0x0x7f31c9366a80) 0
+
+Class QVariant::Private::Data
+ size=8 align=8
+ base size=8 base align=8
+QVariant::Private::Data (0x0x7f31c9366b40) 0
+
+Class QVariant::Private
+ size=16 align=8
+ base size=12 base align=8
+QVariant::Private (0x0x7f31c9366ae0) 0
+
+Class QVariant::Handler
+ size=72 align=8
+ base size=72 base align=8
+QVariant::Handler (0x0x7f31c9366ba0) 0
+
+Class QVariant
+ size=16 align=8
+ base size=16 base align=8
+QVariant (0x0x7f31c9366a20) 0
+
+Class QVariantComparisonHelper
+ size=8 align=8
+ base size=8 base align=8
+QVariantComparisonHelper (0x0x7f31c9057e40) 0
+
+Class QSequentialIterable::const_iterator
+ size=112 align=8
+ base size=112 base align=8
+QSequentialIterable::const_iterator (0x0x7f31c91264e0) 0
+
+Class QSequentialIterable
+ size=104 align=8
+ base size=104 base align=8
+QSequentialIterable (0x0x7f31c9126480) 0
+
+Class QAssociativeIterable::const_iterator
+ size=120 align=8
+ base size=120 base align=8
+QAssociativeIterable::const_iterator (0x0x7f31c9126600) 0
+
+Class QAssociativeIterable
+ size=112 align=8
+ base size=112 base align=8
+QAssociativeIterable (0x0x7f31c91265a0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f31c91ef780) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f31c8e633c0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f31c8f311e0) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 48 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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractItemModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractItemModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f31c8f2f478) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f31c8f31180) 0
+ primary-for QAbstractItemModel (0x0x7f31c8f2f478)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f31c8ff95a0) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 48 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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractTableModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractTableModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f31c8f2fa90) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f31c8f2faf8) 0
+ primary-for QAbstractTableModel (0x0x7f31c8f2fa90)
+ QObject (0x0x7f31c8ff9540) 0
+ primary-for QAbstractItemModel (0x0x7f31c8f2faf8)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f31c8ff9720) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 48 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::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractListModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f31c8f2fb60) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f31c8f2fbc8) 0
+ primary-for QAbstractListModel (0x0x7f31c8f2fb60)
+ QObject (0x0x7f31c8ff96c0) 0
+ primary-for QAbstractItemModel (0x0x7f31c8f2fbc8)
+
+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 (0x0x7f31c8ff9e40) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f31c8ff9f00) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 53 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QAbstractProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QAbstractProxyModel::setSourceModel
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))__cxa_pure_virtual
+408 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+416 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f31c8f2fc98) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f31c8f2fd00) 0
+ primary-for QAbstractProxyModel (0x0x7f31c8f2fc98)
+ QObject (0x0x7f31c8ff9ea0) 0
+ primary-for QAbstractItemModel (0x0x7f31c8f2fd00)
+
+Class QAbstractState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractState::QPrivateSignal (0x0x7f31c8c7e180) 0 empty
+
+Vtable for QAbstractState
+QAbstractState::_ZTV14QAbstractState: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QAbstractState)
+16 (int (*)(...))QAbstractState::metaObject
+24 (int (*)(...))QAbstractState::qt_metacast
+32 (int (*)(...))QAbstractState::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractState
+ size=16 align=8
+ base size=16 base align=8
+QAbstractState (0x0x7f31c8f2fd68) 0
+ vptr=((& QAbstractState::_ZTV14QAbstractState) + 16)
+ QObject (0x0x7f31c8c7e120) 0
+ primary-for QAbstractState (0x0x7f31c8f2fd68)
+
+Class QAbstractTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTransition::QPrivateSignal (0x0x7f31c8c7e3c0) 0 empty
+
+Vtable for QAbstractTransition
+QAbstractTransition::_ZTV19QAbstractTransition: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTransition)
+16 (int (*)(...))QAbstractTransition::metaObject
+24 (int (*)(...))QAbstractTransition::qt_metacast
+32 (int (*)(...))QAbstractTransition::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QAbstractTransition
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTransition (0x0x7f31c8f2fdd0) 0
+ vptr=((& QAbstractTransition::_ZTV19QAbstractTransition) + 16)
+ QObject (0x0x7f31c8c7e360) 0
+ primary-for QAbstractTransition (0x0x7f31c8f2fdd0)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f31c8c7e6c0) 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 (0x0x7f31c8f2fe38) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f31c8f2fea0) 0
+ primary-for QAnimationGroup (0x0x7f31c8f2fe38)
+ QObject (0x0x7f31c8c7e660) 0
+ primary-for QAbstractAnimation (0x0x7f31c8f2fea0)
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f31c8cee9c0) 0
+
+Class QBitArray
+ size=8 align=8
+ base size=8 base align=8
+QBitArray (0x0x7f31c8d86360) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=12 base align=8
+QBitRef (0x0x7f31c8dd87e0) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f31c8e2ca80) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 30 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 (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f31c8e39478) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f31c8e2ca20) 0
+ primary-for QIODevice (0x0x7f31c8e39478)
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f31c8a7a420) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 30 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 (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f31c8e395b0) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f31c8e39618) 0
+ primary-for QBuffer (0x0x7f31c8e395b0)
+ QObject (0x0x7f31c8a7a3c0) 0
+ primary-for QIODevice (0x0x7f31c8e39618)
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f31c8a7a6c0) 0
+
+Class QByteArrayMatcher
+ size=1040 align=8
+ base size=1040 base align=8
+QByteArrayMatcher (0x0x7f31c8a7a660) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f31c8a7a840) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f31c8a7a7e0) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f31c8ac9720) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f31c8b0c600) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f31c8866ae0) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f31c8866a80) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f31c88af300) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f31c8904ba0) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f31c8974840) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f31c89748a0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f31c89747e0) 0
+
+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 (0x0x7f31c8a44f60) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f31c8686840) 0
+
+Class QContiguousCacheData
+ size=24 align=4
+ base size=24 base align=4
+QContiguousCacheData (0x0x7f31c87384e0) 0
+
+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 (0x0x7f31c8659618) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f31c8787360) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f31c8659618)
+
+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 (0x0x7f31c8659680) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f31c8787480) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f31c8659680)
+
+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 (0x0x7f31c86596e8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f31c87875a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f31c86596e8)
+
+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 (0x0x7f31c86597b8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f31c87876c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f31c86597b8)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f31c87ac720) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f31c87aca20) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f31c87acd20) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f31c87d10c0) 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 (0x0x7f31c8659820) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f31c844e2a0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f31c8659820)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f31c84b6240) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f31c84b6660) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f31c85f54e0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f31c862b9c0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f31c862bb40) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f31c82b4480) 0 empty
+
+Class QDebug::Stream
+ size=80 align=8
+ base size=76 base align=8
+QDebug::Stream (0x0x7f31c82deb40) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f31c82deae0) 0
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f31c8073480) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f31c8073540) 0 empty
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f31c80f7780) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f31c80f7f00) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f31c81b2de0) 0
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f31c8217ba0) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f31c7e95600) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f31c7fdf5a0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=12 base align=8
+QCborParserError (0x0x7f31c7c63120) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f31c7c631e0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f31c7aa4d80) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f31c7b5d7e0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f31c7b5d840) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f31c7b5d780) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f31c78d7420) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f31c78d7480) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f31c78d73c0) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f31c76e1c00) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f31c76e1ba0) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f31c77c58a0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f31c77fa600) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f31c747f720) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f31c747f900) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f31c7578f00) 0
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+
+Class QEvent
+ size=24 align=8
+ base size=20 base align=8
+QEvent (0x0x7f31c7270480) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+
+Class QTimerEvent
+ size=24 align=8
+ base size=24 base align=8
+QTimerEvent (0x0x7f31c7251270) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f31c7270840) 0
+ primary-for QTimerEvent (0x0x7f31c7251270)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+
+Class QChildEvent
+ size=32 align=8
+ base size=32 base align=8
+QChildEvent (0x0x7f31c72512d8) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f31c7270900) 0
+ primary-for QChildEvent (0x0x7f31c72512d8)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+
+Class QDynamicPropertyChangeEvent
+ size=32 align=8
+ base size=32 base align=8
+QDynamicPropertyChangeEvent (0x0x7f31c7251820) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f31c7270f60) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f31c7251820)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=24 base align=8
+QDeferredDeleteEvent (0x0x7f31c7251888) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f31c72b3060) 0
+ primary-for QDeferredDeleteEvent (0x0x7f31c7251888)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f31c72b3180) 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 (0x0x7f31c72518f0) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f31c72b3120) 0
+ primary-for QCoreApplication (0x0x7f31c72518f0)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f31c72b33c0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f31c72b3540) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 48 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 (*)(...))QConcatenateTablesProxyModel::mimeTypes
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+224 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QConcatenateTablesProxyModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QConcatenateTablesProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7f31c7251958) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f31c72519c0) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f31c7251958)
+ QObject (0x0x7f31c72b34e0) 0
+ primary-for QAbstractItemModel (0x0x7f31c72519c0)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f31c72b3720) 0
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f31c72b3840) 0
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f31c72b39c0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f31c736f120) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f31c736f840) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f31c70b3540) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 34 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFileDevice::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f31c70a3bc8) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f31c70a3c30) 0
+ primary-for QFileDevice (0x0x7f31c70a3bc8)
+ QObject (0x0x7f31c70b34e0) 0
+ primary-for QIODevice (0x0x7f31c70a3c30)
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f31c70b3e40) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 34 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f31c70a3d68) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f31c70a3dd0) 0
+ primary-for QFile (0x0x7f31c70a3d68)
+ QIODevice (0x0x7f31c70a3e38) 0
+ primary-for QFileDevice (0x0x7f31c70a3dd0)
+ QObject (0x0x7f31c70b3de0) 0
+ primary-for QIODevice (0x0x7f31c70a3e38)
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f31c71234e0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f31c71f33c0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f31c6f103c0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f31c6f10b40) 0
+
+Class QEventTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventTransition::QPrivateSignal (0x0x7f31c6c4cc60) 0 empty
+
+Vtable for QEventTransition
+QEventTransition::_ZTV16QEventTransition: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QEventTransition)
+16 (int (*)(...))QEventTransition::metaObject
+24 (int (*)(...))QEventTransition::qt_metacast
+32 (int (*)(...))QEventTransition::qt_metacall
+40 (int (*)(...))QEventTransition::~QEventTransition
+48 (int (*)(...))QEventTransition::~QEventTransition
+56 (int (*)(...))QEventTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QEventTransition::eventTest
+120 (int (*)(...))QEventTransition::onTransition
+
+Class QEventTransition
+ size=16 align=8
+ base size=16 base align=8
+QEventTransition (0x0x7f31c7016af8) 0
+ vptr=((& QEventTransition::_ZTV16QEventTransition) + 16)
+ QAbstractTransition (0x0x7f31c7016b60) 0
+ primary-for QEventTransition (0x0x7f31c7016af8)
+ QObject (0x0x7f31c6c4cc00) 0
+ primary-for QAbstractTransition (0x0x7f31c7016b60)
+
+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 (0x0x7f31c7016bc8) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f31c6c4ce40) 0 nearly-empty
+ primary-for QException (0x0x7f31c7016bc8)
+
+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=8 align=8
+ base size=8 base align=8
+QUnhandledException (0x0x7f31c7016c30) 0 nearly-empty
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f31c7016c98) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f31c7016c30)
+ std::exception (0x0x7f31c6c4cea0) 0 nearly-empty
+ primary-for QException (0x0x7f31c7016c98)
+
+Class QtPrivate::ExceptionHolder
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionHolder (0x0x7f31c6c4cf00) 0
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f31c6c92000) 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 (0x0x7f31c6c92060) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f31c6c922a0) 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 (0x0x7f31c7016d00) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f31c6c92240) 0
+ primary-for QFileSelector (0x0x7f31c7016d00)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f31c6c924e0) 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 (0x0x7f31c7016d68) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f31c6c92480) 0
+ primary-for QFileSystemWatcher (0x0x7f31c7016d68)
+
+Class QFinalState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFinalState::QPrivateSignal (0x0x7f31c6c92720) 0 empty
+
+Vtable for QFinalState
+QFinalState::_ZTV11QFinalState: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFinalState)
+16 (int (*)(...))QFinalState::metaObject
+24 (int (*)(...))QFinalState::qt_metacast
+32 (int (*)(...))QFinalState::qt_metacall
+40 (int (*)(...))QFinalState::~QFinalState
+48 (int (*)(...))QFinalState::~QFinalState
+56 (int (*)(...))QFinalState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFinalState::onEntry
+120 (int (*)(...))QFinalState::onExit
+
+Class QFinalState
+ size=16 align=8
+ base size=16 base align=8
+QFinalState (0x0x7f31c7016dd0) 0
+ vptr=((& QFinalState::_ZTV11QFinalState) + 16)
+ QAbstractState (0x0x7f31c7016e38) 0
+ primary-for QFinalState (0x0x7f31c7016dd0)
+ QObject (0x0x7f31c6c926c0) 0
+ primary-for QAbstractState (0x0x7f31c7016e38)
+
+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=12 base align=8
+QRunnable (0x0x7f31c6c92900) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f31c6c92ba0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f31c7016f08) 0
+ QBasicMutex (0x0x7f31c6d2f840) 0
+
+Class QRecursiveMutex
+ size=8 align=8
+ base size=8 base align=8
+QRecursiveMutex (0x0x7f31c7016f70) 0
+ QMutex (0x0x7f31c6d49000) 0
+ QBasicMutex (0x0x7f31c6d2fa80) 0
+
+Class QMutexLocker
+ size=8 align=8
+ base size=8 base align=8
+QMutexLocker (0x0x7f31c6d2fae0) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f31c6d5b120) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f31c6d5b720) 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 (0x0x7f31c6d5b900) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f31c6dec120) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f31c6de18f0) 0
+ std::__mutex_base (0x0x7f31c6dec180) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f31c6dec360) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f31c6dec3c0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f31c6dec420) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f31c6dece40) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f31c6de1958) 0
+ std::__recursive_mutex_base (0x0x7f31c6decea0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f31c6deeb60) 0
+ std::__mutex_base (0x0x7f31c6e282a0) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f31c6e28300) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f31c6deeee0) 0
+ std::__recursive_mutex_base (0x0x7f31c6e28660) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f31c6e286c0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f31c6e28de0) 0
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f31c6a6f060) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f31c6b173c0) 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 (0x0x7f31c6a9e750) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f31c6b17360) 0
+ primary-for QFutureWatcherBase (0x0x7f31c6a9e750)
+
+Class QHistoryState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHistoryState::QPrivateSignal (0x0x7f31c6b3f720) 0 empty
+
+Vtable for QHistoryState
+QHistoryState::_ZTV13QHistoryState: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QHistoryState)
+16 (int (*)(...))QHistoryState::metaObject
+24 (int (*)(...))QHistoryState::qt_metacast
+32 (int (*)(...))QHistoryState::qt_metacall
+40 (int (*)(...))QHistoryState::~QHistoryState
+48 (int (*)(...))QHistoryState::~QHistoryState
+56 (int (*)(...))QHistoryState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHistoryState::onEntry
+120 (int (*)(...))QHistoryState::onExit
+
+Class QHistoryState
+ size=16 align=8
+ base size=16 base align=8
+QHistoryState (0x0x7f31c6a9ef70) 0
+ vptr=((& QHistoryState::_ZTV13QHistoryState) + 16)
+ QAbstractState (0x0x7f31c6b4f000) 0
+ primary-for QHistoryState (0x0x7f31c6a9ef70)
+ QObject (0x0x7f31c6b3f6c0) 0
+ primary-for QAbstractState (0x0x7f31c6b4f000)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f31c6b3fa20) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 53 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QIdentityProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QIdentityProxyModel::insertRows
+264 (int (*)(...))QIdentityProxyModel::insertColumns
+272 (int (*)(...))QIdentityProxyModel::removeRows
+280 (int (*)(...))QIdentityProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QIdentityProxyModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QIdentityProxyModel::setSourceModel
+392 (int (*)(...))QIdentityProxyModel::mapToSource
+400 (int (*)(...))QIdentityProxyModel::mapFromSource
+408 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+416 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f31c6b4f068) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f31c6b4f0d0) 0
+ primary-for QIdentityProxyModel (0x0x7f31c6b4f068)
+ QAbstractItemModel (0x0x7f31c6b4f138) 0
+ primary-for QAbstractProxyModel (0x0x7f31c6b4f0d0)
+ QObject (0x0x7f31c6b3f9c0) 0
+ primary-for QAbstractItemModel (0x0x7f31c6b4f138)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f31c6b3fc00) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f31c6c26540) 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 (0x0x7f31c6c22a90) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f31c6c264e0) 0
+ primary-for QItemSelectionModel (0x0x7f31c6c22a90)
+
+Class QItemSelection
+ size=8 align=8
+ base size=8 base align=8
+QItemSelection (0x0x7f31c6c22c30) 0
+ QList<QItemSelectionRange> (0x0x7f31c6c22c98) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f31c6874060) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=20 base align=8
+QJsonValue (0x0x7f31c68d9960) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=12 base align=8
+QJsonValueRef (0x0x7f31c6a2e600) 0
+
+Class QJsonValuePtr
+ size=24 align=8
+ base size=24 base align=8
+QJsonValuePtr (0x0x7f31c66805a0) 0
+
+Class QJsonValueRefPtr
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRefPtr (0x0x7f31c6680840) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::iterator (0x0x7f31c66c0ba0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::const_iterator (0x0x7f31c66c0c00) 0
+
+Class QJsonArray
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray (0x0x7f31c66c0b40) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f31c67f0ae0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f31c67f0b40) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::iterator (0x0x7f31c645d360) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::const_iterator (0x0x7f31c645d3c0) 0
+
+Class QJsonObject
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject (0x0x7f31c645d300) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f31c65807e0) 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=32 align=8
+ base size=25 base align=8
+QLibrary (0x0x7f31c657d8f0) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f31c6580780) 0
+ primary-for QLibrary (0x0x7f31c657d8f0)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f31c65c3660) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f31c65c3180) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f31c6262de0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f31c6262e40) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f31c62d4cc0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f31c6345ea0) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f31c63d62a0) 0
+
+Class QLinkedListData
+ size=32 align=8
+ base size=25 base align=8
+QLinkedListData (0x0x7f31c6052540) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f31c60f6a80) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f31c60f6cc0) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f31c60f6c60) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f31c6167120) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f31c61ea060) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f31c601d840) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=12 base align=8
+QMetaMethod (0x0x7f31c601d8a0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=12 base align=8
+QMetaEnum (0x0x7f31c5ca7120) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f31c5cec300) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=12 base align=8
+QMetaClassInfo (0x0x7f31c5cec420) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f31c5d2d9c0) 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 (0x0x7f31c5d32548) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f31c5d2d960) 0
+ primary-for QMimeData (0x0x7f31c5d32548)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f31c5d2dba0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f31c5df7ae0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f31c5df7ba0) 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=24 align=8
+ base size=24 base align=8
+QObjectCleanupHandler (0x0x7f31c5e0a0d0) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f31c5df7b40) 0
+ primary-for QObjectCleanupHandler (0x0x7f31c5e0a0d0)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f31c5df7cc0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f31c5a89480) 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 (0x0x7f31c5a83958) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f31c5a839c0) 0
+ primary-for QParallelAnimationGroup (0x0x7f31c5a83958)
+ QAbstractAnimation (0x0x7f31c5a83a28) 0
+ primary-for QAnimationGroup (0x0x7f31c5a839c0)
+ QObject (0x0x7f31c5a89420) 0
+ primary-for QAbstractAnimation (0x0x7f31c5a83a28)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f31c5a896c0) 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 (0x0x7f31c5a83a90) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f31c5a83af8) 0
+ primary-for QPauseAnimation (0x0x7f31c5a83a90)
+ QObject (0x0x7f31c5a89660) 0
+ primary-for QAbstractAnimation (0x0x7f31c5a83af8)
+
+Class QStaticPlugin
+ size=16 align=8
+ base size=16 base align=8
+QStaticPlugin (0x0x7f31c5abf240) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f31c5afc3c0) 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 (0x0x7f31c5aeae38) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f31c5afc360) 0
+ primary-for QPluginLoader (0x0x7f31c5aeae38)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f31c5afc4e0) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f31c5bcb960) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 31 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 (*)(...))QProcess::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QProcess::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QProcess::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QProcess::writeData
+240 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f31c5bd32d8) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f31c5bd3340) 0
+ primary-for QProcess (0x0x7f31c5bd32d8)
+ QObject (0x0x7f31c5bcb900) 0
+ primary-for QIODevice (0x0x7f31c5bd3340)
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f31c5c09060) 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 (0x0x7f31c5bd33a8) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f31c5bd3410) 0
+ primary-for QVariantAnimation (0x0x7f31c5bd33a8)
+ QObject (0x0x7f31c5c09000) 0
+ primary-for QAbstractAnimation (0x0x7f31c5bd3410)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f31c5c09300) 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 (0x0x7f31c5bd34e0) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f31c5bd3548) 0
+ primary-for QPropertyAnimation (0x0x7f31c5bd34e0)
+ QAbstractAnimation (0x0x7f31c5bd35b0) 0
+ primary-for QVariantAnimation (0x0x7f31c5bd3548)
+ QObject (0x0x7f31c5c092a0) 0
+ primary-for QAbstractAnimation (0x0x7f31c5bd35b0)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f31c5893a20) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f31c599b780) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f31c599b720) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f31c578f4e0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f31c55c4180) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f31c55c4120) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f31c5645270) 0
+ QRandomGenerator (0x0x7f31c5642c60) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f31c5268840) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f31c5268ae0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f31c52ee000) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f31c52ee4e0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f31c53603c0) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f31c53db420) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f31c5090480) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f31c51525a0) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f31c5152840) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 34 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 (*)(...))QSaveFile::writeData
+240 (int (*)(...))QSaveFile::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f31c50f6c30) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f31c50f6c98) 0
+ primary-for QSaveFile (0x0x7f31c50f6c30)
+ QIODevice (0x0x7f31c50f6d00) 0
+ primary-for QFileDevice (0x0x7f31c50f6c98)
+ QObject (0x0x7f31c51527e0) 0
+ primary-for QIODevice (0x0x7f31c50f6d00)
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f31c5152e40) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f31c51e7000) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f31c4e4fc00) 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 (0x0x7f31c4e634e0) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f31c4e63548) 0
+ primary-for QSequentialAnimationGroup (0x0x7f31c4e634e0)
+ QAbstractAnimation (0x0x7f31c4e635b0) 0
+ primary-for QAnimationGroup (0x0x7f31c4e63548)
+ QObject (0x0x7f31c4e4fba0) 0
+ primary-for QAbstractAnimation (0x0x7f31c4e635b0)
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f31c4e4fe40) 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 (0x0x7f31c4e63618) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f31c4e4fde0) 0
+ primary-for QSettings (0x0x7f31c4e63618)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f31c4e96300) 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 (0x0x7f31c4e63680) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f31c4e962a0) 0
+ primary-for QSharedMemory (0x0x7f31c4e63680)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f31c4e96540) 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 (0x0x7f31c4e636e8) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f31c4e964e0) 0
+ primary-for QSignalMapper (0x0x7f31c4e636e8)
+
+Class QSignalTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalTransition::QPrivateSignal (0x0x7f31c4e96780) 0 empty
+
+Vtable for QSignalTransition
+QSignalTransition::_ZTV17QSignalTransition: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSignalTransition)
+16 (int (*)(...))QSignalTransition::metaObject
+24 (int (*)(...))QSignalTransition::qt_metacast
+32 (int (*)(...))QSignalTransition::qt_metacall
+40 (int (*)(...))QSignalTransition::~QSignalTransition
+48 (int (*)(...))QSignalTransition::~QSignalTransition
+56 (int (*)(...))QSignalTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSignalTransition::eventTest
+120 (int (*)(...))QSignalTransition::onTransition
+
+Class QSignalTransition
+ size=16 align=8
+ base size=16 base align=8
+QSignalTransition (0x0x7f31c4e63750) 0
+ vptr=((& QSignalTransition::_ZTV17QSignalTransition) + 16)
+ QAbstractTransition (0x0x7f31c4e637b8) 0
+ primary-for QSignalTransition (0x0x7f31c4e63750)
+ QObject (0x0x7f31c4e96720) 0
+ primary-for QAbstractTransition (0x0x7f31c4e637b8)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f31c4e96a20) 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 (0x0x7f31c4e63820) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f31c4e969c0) 0
+ primary-for QSocketNotifier (0x0x7f31c4e63820)
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f31c4e96c60) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 56 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 (*)(...))QSortFilterProxyModel::mimeTypes
+216 (int (*)(...))QSortFilterProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QSortFilterProxyModel::dropMimeData
+240 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QSortFilterProxyModel::insertRows
+264 (int (*)(...))QSortFilterProxyModel::insertColumns
+272 (int (*)(...))QSortFilterProxyModel::removeRows
+280 (int (*)(...))QSortFilterProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QSortFilterProxyModel::fetchMore
+312 (int (*)(...))QSortFilterProxyModel::canFetchMore
+320 (int (*)(...))QSortFilterProxyModel::flags
+328 (int (*)(...))QSortFilterProxyModel::sort
+336 (int (*)(...))QSortFilterProxyModel::buddy
+344 (int (*)(...))QSortFilterProxyModel::match
+352 (int (*)(...))QSortFilterProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QSortFilterProxyModel::setSourceModel
+392 (int (*)(...))QSortFilterProxyModel::mapToSource
+400 (int (*)(...))QSortFilterProxyModel::mapFromSource
+408 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+416 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+424 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+432 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+440 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f31c4e63888) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f31c4e638f0) 0
+ primary-for QSortFilterProxyModel (0x0x7f31c4e63888)
+ QAbstractItemModel (0x0x7f31c4e63958) 0
+ primary-for QAbstractProxyModel (0x0x7f31c4e638f0)
+ QObject (0x0x7f31c4e96c00) 0
+ primary-for QAbstractItemModel (0x0x7f31c4e63958)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f31c4f060c0) 0 empty
+
+Class QState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QState::QPrivateSignal (0x0x7f31c4f069c0) 0 empty
+
+Vtable for QState
+QState::_ZTV6QState: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QState)
+16 (int (*)(...))QState::metaObject
+24 (int (*)(...))QState::qt_metacast
+32 (int (*)(...))QState::qt_metacall
+40 (int (*)(...))QState::~QState
+48 (int (*)(...))QState::~QState
+56 (int (*)(...))QState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QState::onEntry
+120 (int (*)(...))QState::onExit
+
+Class QState
+ size=16 align=8
+ base size=16 base align=8
+QState (0x0x7f31c4e63af8) 0
+ vptr=((& QState::_ZTV6QState) + 16)
+ QAbstractState (0x0x7f31c4e63b60) 0
+ primary-for QState (0x0x7f31c4e63af8)
+ QObject (0x0x7f31c4f06960) 0
+ primary-for QAbstractState (0x0x7f31c4e63b60)
+
+Class QStateMachine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStateMachine::QPrivateSignal (0x0x7f31c4f06e40) 0 empty
+
+Vtable for QStateMachine::SignalEvent
+QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine11SignalEventE)
+16 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+24 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+
+Class QStateMachine::SignalEvent
+ size=48 align=8
+ base size=48 base align=8
+QStateMachine::SignalEvent (0x0x7f31c4e63d00) 0
+ vptr=((& QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE) + 16)
+ QEvent (0x0x7f31c4f06ea0) 0
+ primary-for QStateMachine::SignalEvent (0x0x7f31c4e63d00)
+
+Vtable for QStateMachine::WrappedEvent
+QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine12WrappedEventE)
+16 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+24 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+
+Class QStateMachine::WrappedEvent
+ size=40 align=8
+ base size=40 base align=8
+QStateMachine::WrappedEvent (0x0x7f31c4e63d68) 0
+ vptr=((& QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE) + 16)
+ QEvent (0x0x7f31c4f06f00) 0
+ primary-for QStateMachine::WrappedEvent (0x0x7f31c4e63d68)
+
+Vtable for QStateMachine
+QStateMachine::_ZTV13QStateMachine: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStateMachine)
+16 (int (*)(...))QStateMachine::metaObject
+24 (int (*)(...))QStateMachine::qt_metacast
+32 (int (*)(...))QStateMachine::qt_metacall
+40 (int (*)(...))QStateMachine::~QStateMachine
+48 (int (*)(...))QStateMachine::~QStateMachine
+56 (int (*)(...))QStateMachine::event
+64 (int (*)(...))QStateMachine::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStateMachine::onEntry
+120 (int (*)(...))QStateMachine::onExit
+128 (int (*)(...))QStateMachine::beginSelectTransitions
+136 (int (*)(...))QStateMachine::endSelectTransitions
+144 (int (*)(...))QStateMachine::beginMicrostep
+152 (int (*)(...))QStateMachine::endMicrostep
+
+Class QStateMachine
+ size=16 align=8
+ base size=16 base align=8
+QStateMachine (0x0x7f31c4e63bc8) 0
+ vptr=((& QStateMachine::_ZTV13QStateMachine) + 16)
+ QState (0x0x7f31c4e63c30) 0
+ primary-for QStateMachine (0x0x7f31c4e63bc8)
+ QAbstractState (0x0x7f31c4e63c98) 0
+ primary-for QState (0x0x7f31c4e63c30)
+ QObject (0x0x7f31c4f06de0) 0
+ primary-for QAbstractState (0x0x7f31c4e63c98)
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f31c4f74300) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f31c4c6a0c0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f31c4cf3420) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 48 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 (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QStringListModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStringListModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QStringListModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QStringListModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStringListModel::flags
+328 (int (*)(...))QStringListModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStringListModel
+ size=24 align=8
+ base size=24 base align=8
+QStringListModel (0x0x7f31c4ce0680) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f31c4ce06e8) 0
+ primary-for QStringListModel (0x0x7f31c4ce0680)
+ QAbstractItemModel (0x0x7f31c4ce0750) 0
+ primary-for QAbstractListModel (0x0x7f31c4ce06e8)
+ QObject (0x0x7f31c4cf33c0) 0
+ primary-for QAbstractItemModel (0x0x7f31c4ce0750)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f31c4cf3540) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f31c4cf3600) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f31c4cf3720) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 34 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 (*)(...))QFileDevice::writeData
+240 (int (*)(...))QTemporaryFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f31c4ce07b8) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f31c4ce0820) 0
+ primary-for QTemporaryFile (0x0x7f31c4ce07b8)
+ QFileDevice (0x0x7f31c4ce0888) 0
+ primary-for QFile (0x0x7f31c4ce0820)
+ QIODevice (0x0x7f31c4ce08f0) 0
+ primary-for QFileDevice (0x0x7f31c4ce0888)
+ QObject (0x0x7f31c4cf36c0) 0
+ primary-for QIODevice (0x0x7f31c4ce08f0)
+
+Class QTextBoundaryFinder
+ size=48 align=8
+ base size=48 base align=8
+QTextBoundaryFinder (0x0x7f31c4cf3a80) 0
+
+Class QTextCodec::ConverterState
+ size=32 align=8
+ base size=32 base align=8
+QTextCodec::ConverterState (0x0x7f31c4d6f300) 0
+
+Vtable for QTextCodec
+QTextCodec::_ZTV10QTextCodec: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextCodec)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))QTextCodec::aliases
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 0
+64 0
+
+Class QTextCodec
+ size=8 align=8
+ base size=8 base align=8
+QTextCodec (0x0x7f31c4d6f2a0) 0 nearly-empty
+ vptr=((& QTextCodec::_ZTV10QTextCodec) + 16)
+
+Class QTextEncoder
+ size=40 align=8
+ base size=40 base align=8
+QTextEncoder (0x0x7f31c4d6fcc0) 0
+
+Class QTextDecoder
+ size=40 align=8
+ base size=40 base align=8
+QTextDecoder (0x0x7f31c4d6fea0) 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 (0x0x7f31c4dc9120) 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 (0x0x7f31c4dc9180) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f31c4dc90c0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f31c4857540) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f31c4857900) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f31c4857960) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f31c49e8c60) 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 (0x0x7f31c49ebc98) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f31c49ebd00) 0
+ primary-for std::future_error (0x0x7f31c49ebc98)
+ std::exception (0x0x7f31c4a163c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f31c49ebd00)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f31c4a16ae0) 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 (0x0x7f31c4a16a80) 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 (0x0x7f31c4821240) 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 (0x0x7f31c4814548) 0
+ std::__at_thread_exit_elt (0x0x7f31c4821300) 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 (0x0x7f31c4a16c60) 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 (0x0x7f31c4a16a20) 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 (0x0x7f31c3fab270) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f31c3fcc300) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f31c3fab270)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f31c3fccba0) 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 (0x0x7f31c3fab5b0) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f31c3fccb40) 0
+ primary-for QThread (0x0x7f31c3fab5b0)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f31c3fccf60) 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 (0x0x7f31c3fab618) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f31c3fccf00) 0
+ primary-for QThreadPool (0x0x7f31c3fab618)
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f31c4013180) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f31c4013840) 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 (0x0x7f31c3fab680) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f31c40137e0) 0
+ primary-for QTimeLine (0x0x7f31c3fab680)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f31c4013a80) 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=32 align=8
+ base size=29 base align=8
+QTimer (0x0x7f31c3fab6e8) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f31c4013a20) 0
+ primary-for QTimer (0x0x7f31c3fab6e8)
+
+Class QTimeZone::OffsetData
+ size=32 align=8
+ base size=28 base align=8
+QTimeZone::OffsetData (0x0x7f31c3c85420) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f31c3c853c0) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f31c3d1f4e0) 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 (0x0x7f31c3d11dd0) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f31c3d1f480) 0
+ primary-for QTranslator (0x0x7f31c3d11dd0)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f31c3d1f720) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 53 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::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QAbstractProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QTransposeProxyModel::insertRows
+264 (int (*)(...))QTransposeProxyModel::insertColumns
+272 (int (*)(...))QTransposeProxyModel::removeRows
+280 (int (*)(...))QTransposeProxyModel::removeColumns
+288 (int (*)(...))QTransposeProxyModel::moveRows
+296 (int (*)(...))QTransposeProxyModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QTransposeProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QTransposeProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QTransposeProxyModel::setSourceModel
+392 (int (*)(...))QTransposeProxyModel::mapToSource
+400 (int (*)(...))QTransposeProxyModel::mapFromSource
+408 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+416 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7f31c3d11e38) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f31c3d11ea0) 0
+ primary-for QTransposeProxyModel (0x0x7f31c3d11e38)
+ QAbstractItemModel (0x0x7f31c3d11f08) 0
+ primary-for QAbstractProxyModel (0x0x7f31c3d11ea0)
+ QObject (0x0x7f31c3d1f6c0) 0
+ primary-for QAbstractItemModel (0x0x7f31c3d11f08)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f31c3d1f900) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f31c3e1bde0) 0
+
+Class QXmlStreamStringRef
+ size=16 align=8
+ base size=16 base align=8
+QXmlStreamStringRef (0x0x7f31c3e1bf00) 0
+
+Class QXmlStreamAttribute
+ size=80 align=8
+ base size=73 base align=8
+QXmlStreamAttribute (0x0x7f31c3aca300) 0
+
+Class QXmlStreamAttributes
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamAttributes (0x0x7f31c3b38208) 0
+ QVector<QXmlStreamAttribute> (0x0x7f31c3b31a20) 0
+
+Class QXmlStreamNamespaceDeclaration
+ size=40 align=8
+ base size=40 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f31c3b31d20) 0
+
+Class QXmlStreamNotationDeclaration
+ size=56 align=8
+ base size=56 base align=8
+QXmlStreamNotationDeclaration (0x0x7f31c3bb0cc0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=88 align=8
+ base size=88 base align=8
+QXmlStreamEntityDeclaration (0x0x7f31c3c0dcc0) 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 (0x0x7f31c387ad80) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f31c387ade0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f31c38b4cc0) 0
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f31c3908300) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f31c39aa3c0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f31c39aa360) 0
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f31c366e2a0) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f31c366e240) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f31c37d9ea0) 0
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f31c34c7a20) 0
+
+Class QTouchDevice
+ size=8 align=8
+ base size=8 base align=8
+QTouchDevice (0x0x7f31c3534ae0) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+
+Class QInputEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputEvent (0x0x7f31c35218f0) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f31c357b3c0) 0
+ primary-for QInputEvent (0x0x7f31c35218f0)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+
+Class QEnterEvent
+ size=72 align=8
+ base size=72 base align=8
+QEnterEvent (0x0x7f31c3521958) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QEvent (0x0x7f31c357b5a0) 0
+ primary-for QEnterEvent (0x0x7f31c3521958)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+
+Class QMouseEvent
+ size=104 align=8
+ base size=100 base align=8
+QMouseEvent (0x0x7f31c35219c0) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QInputEvent (0x0x7f31c3521a28) 0
+ primary-for QMouseEvent (0x0x7f31c35219c0)
+ QEvent (0x0x7f31c357b960) 0
+ primary-for QInputEvent (0x0x7f31c3521a28)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+
+Class QHoverEvent
+ size=64 align=8
+ base size=64 base align=8
+QHoverEvent (0x0x7f31c3521a90) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QInputEvent (0x0x7f31c3521af8) 0
+ primary-for QHoverEvent (0x0x7f31c3521a90)
+ QEvent (0x0x7f31c357be40) 0
+ primary-for QInputEvent (0x0x7f31c3521af8)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f31c3521b60) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QInputEvent (0x0x7f31c3521bc8) 0
+ primary-for QWheelEvent (0x0x7f31c3521b60)
+ QEvent (0x0x7f31c35b6060) 0
+ primary-for QInputEvent (0x0x7f31c3521bc8)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+
+Class QTabletEvent
+ size=128 align=8
+ base size=128 base align=8
+QTabletEvent (0x0x7f31c3521c30) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QInputEvent (0x0x7f31c3521c98) 0
+ primary-for QTabletEvent (0x0x7f31c3521c30)
+ QEvent (0x0x7f31c35b6780) 0
+ primary-for QInputEvent (0x0x7f31c3521c98)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f31c3521d00) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QInputEvent (0x0x7f31c3521d68) 0
+ primary-for QNativeGestureEvent (0x0x7f31c3521d00)
+ QEvent (0x0x7f31c35f10c0) 0
+ primary-for QInputEvent (0x0x7f31c3521d68)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+
+Class QKeyEvent
+ size=64 align=8
+ base size=59 base align=8
+QKeyEvent (0x0x7f31c3521dd0) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f31c3521e38) 0
+ primary-for QKeyEvent (0x0x7f31c3521dd0)
+ QEvent (0x0x7f31c35f13c0) 0
+ primary-for QInputEvent (0x0x7f31c3521e38)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+
+Class QFocusEvent
+ size=24 align=8
+ base size=24 base align=8
+QFocusEvent (0x0x7f31c3521ea0) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f31c35f16c0) 0
+ primary-for QFocusEvent (0x0x7f31c3521ea0)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+
+Class QPaintEvent
+ size=56 align=8
+ base size=49 base align=8
+QPaintEvent (0x0x7f31c3521f08) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f31c35f17e0) 0
+ primary-for QPaintEvent (0x0x7f31c3521f08)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+
+Class QMoveEvent
+ size=40 align=8
+ base size=36 base align=8
+QMoveEvent (0x0x7f31c3521f70) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f31c35f1900) 0
+ primary-for QMoveEvent (0x0x7f31c3521f70)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+
+Class QExposeEvent
+ size=32 align=8
+ base size=32 base align=8
+QExposeEvent (0x0x7f31c3626000) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f31c35f1a20) 0
+ primary-for QExposeEvent (0x0x7f31c3626000)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=24 base align=8
+QPlatformSurfaceEvent (0x0x7f31c3626068) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f31c35f1ae0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f31c3626068)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+
+Class QResizeEvent
+ size=40 align=8
+ base size=36 base align=8
+QResizeEvent (0x0x7f31c36260d0) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f31c35f1ba0) 0
+ primary-for QResizeEvent (0x0x7f31c36260d0)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+
+Class QCloseEvent
+ size=24 align=8
+ base size=20 base align=8
+QCloseEvent (0x0x7f31c3626138) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f31c35f1cc0) 0
+ primary-for QCloseEvent (0x0x7f31c3626138)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+
+Class QIconDragEvent
+ size=24 align=8
+ base size=20 base align=8
+QIconDragEvent (0x0x7f31c36261a0) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f31c35f1d20) 0
+ primary-for QIconDragEvent (0x0x7f31c36261a0)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+
+Class QShowEvent
+ size=24 align=8
+ base size=20 base align=8
+QShowEvent (0x0x7f31c3626208) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f31c35f1d80) 0
+ primary-for QShowEvent (0x0x7f31c3626208)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+
+Class QHideEvent
+ size=24 align=8
+ base size=20 base align=8
+QHideEvent (0x0x7f31c3626270) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f31c35f1de0) 0
+ primary-for QHideEvent (0x0x7f31c3626270)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+
+Class QContextMenuEvent
+ size=56 align=8
+ base size=49 base align=8
+QContextMenuEvent (0x0x7f31c36262d8) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f31c3626340) 0
+ primary-for QContextMenuEvent (0x0x7f31c36262d8)
+ QEvent (0x0x7f31c35f1e40) 0
+ primary-for QInputEvent (0x0x7f31c3626340)
+
+Class QInputMethodEvent::Attribute
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodEvent::Attribute (0x0x7f31c36461e0) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+
+Class QInputMethodEvent
+ size=56 align=8
+ base size=56 base align=8
+QInputMethodEvent (0x0x7f31c36263a8) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f31c3646180) 0
+ primary-for QInputMethodEvent (0x0x7f31c36263a8)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=24 align=8
+ base size=24 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f31c32bf540) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+
+Class QInputMethodQueryEvent
+ size=32 align=8
+ base size=32 base align=8
+QInputMethodQueryEvent (0x0x7f31c32c05b0) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f31c32bf4e0) 0
+ primary-for QInputMethodQueryEvent (0x0x7f31c32c05b0)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+
+Class QDropEvent
+ size=72 align=8
+ base size=72 base align=8
+QDropEvent (0x0x7f31c3335680) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f31c333e2a0) 0
+ primary-for QDropEvent (0x0x7f31c3335680)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+
+Class QDragMoveEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragMoveEvent (0x0x7f31c33356e8) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f31c3335750) 0
+ primary-for QDragMoveEvent (0x0x7f31c33356e8)
+ QEvent (0x0x7f31c333e660) 0
+ primary-for QDropEvent (0x0x7f31c3335750)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+
+Class QDragEnterEvent
+ size=88 align=8
+ base size=88 base align=8
+QDragEnterEvent (0x0x7f31c33357b8) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f31c3335820) 0
+ primary-for QDragEnterEvent (0x0x7f31c33357b8)
+ QDropEvent (0x0x7f31c3335888) 0
+ primary-for QDragMoveEvent (0x0x7f31c3335820)
+ QEvent (0x0x7f31c333e8a0) 0
+ primary-for QDropEvent (0x0x7f31c3335888)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+
+Class QDragLeaveEvent
+ size=24 align=8
+ base size=20 base align=8
+QDragLeaveEvent (0x0x7f31c33358f0) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f31c333e900) 0
+ primary-for QDragLeaveEvent (0x0x7f31c33358f0)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+
+Class QHelpEvent
+ size=40 align=8
+ base size=36 base align=8
+QHelpEvent (0x0x7f31c3335958) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f31c333e960) 0
+ primary-for QHelpEvent (0x0x7f31c3335958)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+
+Class QStatusTipEvent
+ size=32 align=8
+ base size=32 base align=8
+QStatusTipEvent (0x0x7f31c33359c0) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f31c333ec00) 0
+ primary-for QStatusTipEvent (0x0x7f31c33359c0)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+
+Class QWhatsThisClickedEvent
+ size=32 align=8
+ base size=32 base align=8
+QWhatsThisClickedEvent (0x0x7f31c3335a28) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f31c333ecc0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f31c3335a28)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+
+Class QActionEvent
+ size=40 align=8
+ base size=40 base align=8
+QActionEvent (0x0x7f31c3335a90) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f31c333ed80) 0
+ primary-for QActionEvent (0x0x7f31c3335a90)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+
+Class QFileOpenEvent
+ size=40 align=8
+ base size=40 base align=8
+QFileOpenEvent (0x0x7f31c3335af8) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f31c333eea0) 0
+ primary-for QFileOpenEvent (0x0x7f31c3335af8)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QToolBarChangeEvent (0x0x7f31c3335b60) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f31c3379000) 0
+ primary-for QToolBarChangeEvent (0x0x7f31c3335b60)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+
+Class QShortcutEvent
+ size=40 align=8
+ base size=40 base align=8
+QShortcutEvent (0x0x7f31c3335bc8) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f31c33790c0) 0
+ primary-for QShortcutEvent (0x0x7f31c3335bc8)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+
+Class QWindowStateChangeEvent
+ size=32 align=8
+ base size=25 base align=8
+QWindowStateChangeEvent (0x0x7f31c3335c30) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f31c3379240) 0
+ primary-for QWindowStateChangeEvent (0x0x7f31c3335c30)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f31c33793c0) 0
+
+Class QTouchEvent::TouchPoint
+ size=8 align=8
+ base size=8 base align=8
+QTouchEvent::TouchPoint (0x0x7f31c33ca780) 0
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+
+Class QTouchEvent
+ size=72 align=8
+ base size=72 base align=8
+QTouchEvent (0x0x7f31c33d4478) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QInputEvent (0x0x7f31c33d44e0) 0
+ primary-for QTouchEvent (0x0x7f31c33d4478)
+ QEvent (0x0x7f31c33ca720) 0
+ primary-for QInputEvent (0x0x7f31c33d44e0)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+
+Class QScrollPrepareEvent
+ size=112 align=8
+ base size=112 base align=8
+QScrollPrepareEvent (0x0x7f31c30e31a0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f31c30dcd20) 0
+ primary-for QScrollPrepareEvent (0x0x7f31c30e31a0)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+
+Class QScrollEvent
+ size=64 align=8
+ base size=60 base align=8
+QScrollEvent (0x0x7f31c30e3208) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f31c30dcd80) 0
+ primary-for QScrollEvent (0x0x7f31c30e3208)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+
+Class QScreenOrientationChangeEvent
+ size=40 align=8
+ base size=36 base align=8
+QScreenOrientationChangeEvent (0x0x7f31c30e3270) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f31c30dcde0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f31c30e3270)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=24 base align=8
+QApplicationStateChangeEvent (0x0x7f31c30e32d8) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f31c30dce40) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f31c30e32d8)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f31c30dcea0) 0
+
+Class QPolygon
+ size=8 align=8
+ base size=8 base align=8
+QPolygon (0x0x7f31c3219750) 0
+ QVector<QPoint> (0x0x7f31c3209f00) 0
+
+Class QPolygonF
+ size=8 align=8
+ base size=8 base align=8
+QPolygonF (0x0x7f31c2e3aa90) 0
+ QVector<QPointF> (0x0x7f31c2e61060) 0
+
+Class QMatrix
+ size=48 align=8
+ base size=48 base align=8
+QMatrix (0x0x7f31c2ecef00) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f31c2f3fd20) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f31c2f3fcc0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f31c2c920c0) 0
+
+Class QTransform
+ size=88 align=8
+ base size=88 base align=8
+QTransform (0x0x7f31c2c92780) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPaintDevice (0x0x7f31c2d6d240) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f31c2d6d840) 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=32 align=8
+ base size=32 base align=8
+QImage (0x0x7f31c2a1b8f0) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f31c2a3a180) 0
+ primary-for QImage (0x0x7f31c2a1b8f0)
+
+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=32 align=8
+ base size=32 base align=8
+QPixmap (0x0x7f31c2b35340) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f31c2b23f00) 0
+ primary-for QPixmap (0x0x7f31c2b35340)
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f31c281d240) 0
+
+Class QBrushData
+ size=112 align=8
+ base size=112 base align=8
+QBrushData (0x0x7f31c28e0780) 0
+
+Class QGradient
+ size=64 align=8
+ base size=64 base align=8
+QGradient (0x0x7f31c28e09c0) 0
+
+Class QLinearGradient
+ size=64 align=8
+ base size=64 base align=8
+QLinearGradient (0x0x7f31c28d6d00) 0
+ QGradient (0x0x7f31c2948120) 0
+
+Class QRadialGradient
+ size=64 align=8
+ base size=64 base align=8
+QRadialGradient (0x0x7f31c28d6d68) 0
+ QGradient (0x0x7f31c2948240) 0
+
+Class QConicalGradient
+ size=64 align=8
+ base size=64 base align=8
+QConicalGradient (0x0x7f31c28d6dd0) 0
+ QGradient (0x0x7f31c2948360) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f31c2948420) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f31c2606d80) 0
+
+Class QTextOption
+ size=32 align=8
+ base size=32 base align=8
+QTextOption (0x0x7f31c2606d20) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f31c26704e0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f31c26c6e40) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f31c2435af8) 0
+ QTextFormat (0x0x7f31c2461540) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f31c24d6f08) 0
+ QTextFormat (0x0x7f31c24d7f00) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f31c2547478) 0
+ QTextFormat (0x0x7f31c253acc0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f31c258f888) 0
+ QTextCharFormat (0x0x7f31c258f8f0) 0
+ QTextFormat (0x0x7f31c2598480) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f31c21cfe38) 0
+ QTextFormat (0x0x7f31c21d9ae0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f31c22373a8) 0
+ QTextFrameFormat (0x0x7f31c2237410) 0
+ QTextFormat (0x0x7f31c223d720) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f31c228f958) 0
+ QTextCharFormat (0x0x7f31c228f9c0) 0
+ QTextFormat (0x0x7f31c22a00c0) 0
+
+Class QFontDatabase
+ size=8 align=8
+ base size=8 base align=8
+QFontDatabase (0x0x7f31c22f1f00) 0
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f31c231f120) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f31c1ff9900) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f31c20e4840) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f31c21bf4e0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f31c21bf900) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f31c21bf8a0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f31c1e75000) 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 (0x0x7f31c1e75480) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f31c1e75720) 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 (0x0x7f31c1e741a0) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f31c1e756c0) 0
+ primary-for QTextDocument (0x0x7f31c1e741a0)
+
+Class QPalette::Data
+ size=4 align=4
+ base size=4 base align=4
+QPalette::Data (0x0x7f31c1ee8720) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f31c1ee86c0) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f31c1bdaae0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f31c1bdab40) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=64 align=8
+ base size=64 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f31c1bdaba0) 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 (0x0x7f31c1bcff70) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f31c1bdaa80) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f31c1bcff70)
+
+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 (0x0x7f31c1ca8780) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f31c1ca89c0) 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 (0x0x7f31c1ca8a20) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f31c1ca8960) 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 (0x0x7f31c1ce3600) 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 (0x0x7f31c1ce3960) 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 (0x0x7f31c1ce39c0) 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 (0x0x7f31c1ce3a20) 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 (0x0x7f31c1ce3a80) 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 (0x0x7f31c1ce3ae0) 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 (0x0x7f31c1ce3b40) 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 (0x0x7f31c1ce3c60) 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 (0x0x7f31c1ce3cc0) 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 (0x0x7f31c1ce05b0) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f31c1d476c0) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f31c1ce05b0)
+
+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 (0x0x7f31c1ce0618) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f31c1d47a80) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f31c1ce0618)
+
+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 (0x0x7f31c1ce0680) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f31c1ce06e8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f31c1ce0680)
+ QAccessibleEvent (0x0x7f31c1d47ea0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f31c1ce06e8)
+
+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=48 align=8
+ base size=48 base align=8
+QAccessibleTextInsertEvent (0x0x7f31c1ce0750) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f31c1ce07b8) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f31c1ce0750)
+ QAccessibleEvent (0x0x7f31c1db7360) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f31c1ce07b8)
+
+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=48 align=8
+ base size=48 base align=8
+QAccessibleTextRemoveEvent (0x0x7f31c1ce0820) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f31c1ce0888) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f31c1ce0820)
+ QAccessibleEvent (0x0x7f31c1db7780) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f31c1ce0888)
+
+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=56 align=8
+ base size=56 base align=8
+QAccessibleTextUpdateEvent (0x0x7f31c1ce08f0) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f31c1ce0958) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f31c1ce08f0)
+ QAccessibleEvent (0x0x7f31c1db7ba0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f31c1ce0958)
+
+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=48 align=8
+ base size=48 base align=8
+QAccessibleValueChangeEvent (0x0x7f31c1ce09c0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f31c19e4060) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f31c1ce09c0)
+
+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 (0x0x7f31c1ce0a28) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f31c19e4480) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f31c1ce0a28)
+
+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 (0x0x7f31c19e4d20) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f31c1a14000) 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 (0x0x7f31c1ce0a90) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f31c19e4f60) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f31c1ce0a90)
+
+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 (0x0x7f31c1ce0af8) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f31c1a14120) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f31c1ce0af8)
+
+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 (0x0x7f31c1ce0b60) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f31c1ce0bc8) 0
+ primary-for QAccessibleApplication (0x0x7f31c1ce0b60)
+ QAccessibleInterface (0x0x7f31c1a14180) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f31c1ce0bc8)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f31c1a14240) 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 (0x0x7f31c1ce0c30) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f31c1a141e0) 0
+ primary-for QAccessiblePlugin (0x0x7f31c1ce0c30)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f31c1a14360) 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 (0x0x7f31c1a14ea0) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f31c1a852a0) 0
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f31c1b3fde0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f31c180aba0) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 45 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::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI7QWindow)
+312 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+320 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f31c1810770) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f31c180aae0) 0
+ primary-for QWindow (0x0x7f31c1810770)
+ QSurface (0x0x7f31c180ab40) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 312)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f31c185b480) 0
+
+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=32 align=8
+ base size=32 base align=8
+QBitmap (0x0x7f31c17fef08) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f31c17fef70) 0
+ primary-for QBitmap (0x0x7f31c17fef08)
+ QPaintDevice (0x0x7f31c185b540) 0
+ primary-for QPixmap (0x0x7f31c17fef70)
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f31c18b3a80) 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 (0x0x7f31c18bb270) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f31c18b3a20) 0
+ primary-for QClipboard (0x0x7f31c18bb270)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f31c18b3ba0) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f31c1978d20) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f31c1650ae0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f31c1650ba0) 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 (0x0x7f31c164cf08) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f31c1650b40) 0
+ primary-for QDrag (0x0x7f31c164cf08)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f31c1650d80) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f31c16a9de0) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f31c1712180) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f31c147d300) 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 (0x0x7f31c1758af8) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f31c147d2a0) 0
+ primary-for QGenericPlugin (0x0x7f31c1758af8)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f31c147d420) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f31c147d4e0) 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 (0x0x7f31c1758b60) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f31c147d480) 0
+ primary-for QInputMethod (0x0x7f31c1758b60)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f31c147d7e0) 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 (0x0x7f31c1758bc8) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f31c1758c30) 0
+ primary-for QGuiApplication (0x0x7f31c1758bc8)
+ QObject (0x0x7f31c147d780) 0
+ primary-for QCoreApplication (0x0x7f31c1758c30)
+
+Class QIconEngine::AvailableSizesArgument
+ size=16 align=8
+ base size=16 base align=8
+QIconEngine::AvailableSizesArgument (0x0x7f31c147df60) 0
+
+Class QIconEngine::ScaledPixmapArgument
+ size=56 align=8
+ base size=56 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f31c14de120) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 16 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::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f31c147df00) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f31c14de1e0) 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 (0x0x7f31c14cc208) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f31c14de180) 0
+ primary-for QIconEnginePlugin (0x0x7f31c14cc208)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))QImageIOHandler::name
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QImageIOHandler::write
+64 (int (*)(...))QImageIOHandler::option
+72 (int (*)(...))QImageIOHandler::setOption
+80 (int (*)(...))QImageIOHandler::supportsOption
+88 (int (*)(...))QImageIOHandler::jumpToNextImage
+96 (int (*)(...))QImageIOHandler::jumpToImage
+104 (int (*)(...))QImageIOHandler::loopCount
+112 (int (*)(...))QImageIOHandler::imageCount
+120 (int (*)(...))QImageIOHandler::nextImageDelay
+128 (int (*)(...))QImageIOHandler::currentImageNumber
+136 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f31c14de300) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f31c14de540) 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 (0x0x7f31c14cc270) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f31c14de4e0) 0
+ primary-for QImageIOPlugin (0x0x7f31c14cc270)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f31c14ded20) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f31c14dee40) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f31c14def60) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f31c118a120) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f31c120a360) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f31c129dc60) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f31c0f83ae0) 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 (0x0x7f31c13269c0) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f31c0f83a80) 0
+ primary-for QMovie (0x0x7f31c13269c0)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f31c0f83f00) 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 (0x0x7f31c133a770) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f31c0f83e40) 0
+ primary-for QOffscreenSurface (0x0x7f31c133a770)
+ QSurface (0x0x7f31c0f83ea0) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f31c1065180) 0
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f31c10659c0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f31c0d135a0) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f31c0d13780) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f31c0d137e0) 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 (0x0x7f31c0d139c0) 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 (0x0x7f31c0d13ba0) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f31c0d0f888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0d13b40) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f31c0d13ea0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f31c0d0f8f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0d13e40) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f31c09521e0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f31c0d0f958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0952180) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f31c09524e0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f31c0d0f9c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0952480) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f31c0952840) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f31c0d0fa28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c09527e0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f31c0952b40) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f31c0d0fa90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0952ae0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f31c0952e40) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f31c0d0faf8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0952de0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f31c0991180) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f31c0d0fb60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0991120) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f31c0991480) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f31c0d0fbc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0991420) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f31c0991780) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f31c0d0fc30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0991720) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f31c0991a80) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f31c0d0fc98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0991a20) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f31c0991d80) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f31c0d0fd00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0991d20) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f31c09dd0c0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f31c0d0fd68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c09dd060) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f31c09dd3c0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f31c0d0fdd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c09dd360) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f31c09dd6c0) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f31c0d0fe38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c09dd660) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f31c09dd9c0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f31c0d0fea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c09dd960) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f31c09ddcc0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f31c0d0ff08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c09ddc60) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f31c0a2f060) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f31c0d0ff70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0a2f000) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f31c0a2f360) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f31c0a5a000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0a2f300) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f31c0a2f660) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f31c0a5a068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0a2f600) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f31c0a2f960) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f31c0a5a0d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0a2f900) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f31c0a2fc60) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f31c0a5a138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0a2fc00) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f31c0a2ff60) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f31c0a5a1a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0a2ff00) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f31c0ac32a0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f31c0a5a208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0ac3240) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f31c0ac35a0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f31c0a5a270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0ac3540) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f31c0ac38a0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f31c0a5a2d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0ac3840) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f31c0ac3ba0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f31c0a5a340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f31c0ac3b40) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f31c0ac3e40) 0
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f31c0b01960) 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 (0x0x7f31c0a5ad68) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f31c0b01900) 0
+ primary-for QOpenGLContextGroup (0x0x7f31c0a5ad68)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f31c0b01ba0) 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 (0x0x7f31c0a5add0) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f31c0b01b40) 0
+ primary-for QOpenGLContext (0x0x7f31c0a5add0)
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f31c0b01de0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f31c087e3c0) 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 (0x0x7f31c0860068) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f31c087e360) 0
+ primary-for QOpenGLDebugLogger (0x0x7f31c0860068)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f31c087e840) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f31c090c1e0) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f31c090c180) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f31c0860410) 0
+ QOpenGLFunctions (0x0x7f31c05e4f60) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f31c0669300) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f31c0860478) 0
+ QOpenGLFunctionsPrivate (0x0x7f31c06692a0) 0
+
+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 (0x0x7f31c03b3d80) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f31c0405060) 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=32 align=8
+ base size=32 base align=8
+QOpenGLPaintDevice (0x0x7f31c03e2208) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f31c04050c0) 0
+ primary-for QOpenGLPaintDevice (0x0x7f31c03e2208)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f31c0405300) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f31c0470120) 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 (0x0x7f31c046b340) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f31c04700c0) 0
+ primary-for QOpenGLShader (0x0x7f31c046b340)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f31c0470a20) 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 (0x0x7f31c046b478) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f31c04709c0) 0
+ primary-for QOpenGLShaderProgram (0x0x7f31c046b478)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f31c0470c00) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f31c0189120) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f31c0189360) 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 (0x0x7f31c046b5b0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f31c0189300) 0
+ primary-for QOpenGLTimerQuery (0x0x7f31c046b5b0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f31c01895a0) 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 (0x0x7f31c046b618) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f31c0189540) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f31c046b618)
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f31c01897e0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f31c0189840) 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 (0x0x7f31c046b680) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f31c0189780) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f31c046b680)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f31c0189f00) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 58 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QPaintDeviceWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))-16
+328 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+336 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+384 (int (*)(...))-40
+392 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+400 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+416 (int (*)(...))QPaintDevice::devType
+424 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+440 (int (*)(...))QPaintDevice::initPainter
+448 (int (*)(...))QPaintDevice::redirected
+456 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=64 align=8
+ base size=64 base align=8
+QPaintDeviceWindow (0x0x7f31c01ae7e0) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f31c01ae850) 0
+ primary-for QPaintDeviceWindow (0x0x7f31c01ae7e0)
+ QObject (0x0x7f31c0189de0) 0
+ primary-for QWindow (0x0x7f31c01ae850)
+ QSurface (0x0x7f31c0189e40) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 336)
+ QPaintDevice (0x0x7f31c0189ea0) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 400)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f31c01e1240) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 64 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QOpenGLWindow::paintEvent
+304 (int (*)(...))QOpenGLWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QOpenGLWindow::initializeGL
+328 (int (*)(...))QOpenGLWindow::resizeGL
+336 (int (*)(...))QOpenGLWindow::paintGL
+344 (int (*)(...))QOpenGLWindow::paintUnderGL
+352 (int (*)(...))QOpenGLWindow::paintOverGL
+360 (int (*)(...))QOpenGLWindow::redirected
+368 (int (*)(...))-16
+376 (int (*)(...))(& _ZTI13QOpenGLWindow)
+384 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+400 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+432 (int (*)(...))-40
+440 (int (*)(...))(& _ZTI13QOpenGLWindow)
+448 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+464 (int (*)(...))QPaintDevice::devType
+472 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+480 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QPaintDevice::initPainter
+496 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+504 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLWindow (0x0x7f31c046b750) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f31c01aea10) 0
+ primary-for QOpenGLWindow (0x0x7f31c046b750)
+ QWindow (0x0x7f31c01aea80) 0
+ primary-for QPaintDeviceWindow (0x0x7f31c01aea10)
+ QObject (0x0x7f31c01e1120) 0
+ primary-for QWindow (0x0x7f31c01aea80)
+ QSurface (0x0x7f31c01e1180) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 384)
+ QPaintDevice (0x0x7f31c01e11e0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 448)
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f31c01e1420) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f31c02d7960) 0
+
+Class QPagedPaintDevice::Margins
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice::Margins (0x0x7f31bffd3420) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 14 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::setPageSize
+96 (int (*)(...))QPagedPaintDevice::setPageSizeMM
+104 (int (*)(...))QPagedPaintDevice::setMargins
+
+Class QPagedPaintDevice
+ size=32 align=8
+ base size=32 base align=8
+QPagedPaintDevice (0x0x7f31bffb6b60) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f31bffd33c0) 0
+ primary-for QPagedPaintDevice (0x0x7f31bffb6b60)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f31bffd34e0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f31bffd3480) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f31cce6bcc0) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 24 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
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f31cc513f60) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f31cc603f60) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f31cb56a9c0) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 34 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::setPageSize
+128 (int (*)(...))QPdfWriter::setPageSizeMM
+136 (int (*)(...))QPdfWriter::setMargins
+144 (int (*)(...))QPdfWriter::paintEngine
+152 (int (*)(...))QPdfWriter::metric
+160 (int (*)(...))-16
+168 (int (*)(...))(& _ZTI10QPdfWriter)
+176 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+184 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+192 (int (*)(...))QPaintDevice::devType
+200 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+208 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+216 (int (*)(...))QPaintDevice::initPainter
+224 (int (*)(...))QPaintDevice::redirected
+232 (int (*)(...))QPaintDevice::sharedPainter
+240 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+248 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter11setPageSizeEN17QPagedPaintDevice8PageSizeE
+256 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter13setPageSizeMMERK6QSizeF
+264 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter10setMarginsERKN17QPagedPaintDevice7MarginsE
+
+Class QPdfWriter
+ size=48 align=8
+ base size=48 base align=8
+QPdfWriter (0x0x7f31c55bc000) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f31cb56a420) 0
+ primary-for QPdfWriter (0x0x7f31c55bc000)
+ QPagedPaintDevice (0x0x7f31cc558b60) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 176)
+ QPaintDevice (0x0x7f31cb56a960) 16
+ primary-for QPagedPaintDevice (0x0x7f31cc558b60)
+
+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=32 align=8
+ base size=32 base align=8
+QPicture (0x0x7f31cc558e38) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f31cb250420) 0
+ primary-for QPicture (0x0x7f31cc558e38)
+
+Class QPictureIO
+ size=8 align=8
+ base size=8 base align=8
+QPictureIO (0x0x7f31c9706060) 0
+
+Class QPictureFormatPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPictureFormatPlugin::QPrivateSignal (0x0x7f31c97061e0) 0 empty
+
+Vtable for QPictureFormatPlugin
+QPictureFormatPlugin::_ZTV20QPictureFormatPlugin: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QPictureFormatPlugin)
+16 (int (*)(...))QPictureFormatPlugin::metaObject
+24 (int (*)(...))QPictureFormatPlugin::qt_metacast
+32 (int (*)(...))QPictureFormatPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPictureFormatPlugin::loadPicture
+120 (int (*)(...))QPictureFormatPlugin::savePicture
+128 (int (*)(...))__cxa_pure_virtual
+
+Class QPictureFormatPlugin
+ size=16 align=8
+ base size=16 base align=8
+QPictureFormatPlugin (0x0x7f31c96ebbc8) 0
+ vptr=((& QPictureFormatPlugin::_ZTV20QPictureFormatPlugin) + 16)
+ QObject (0x0x7f31c97060c0) 0
+ primary-for QPictureFormatPlugin (0x0x7f31c96ebbc8)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f31c9706f60) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f31c97064e0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f31c834cba0) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 59 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 (*)(...))QWindow::moveEvent
+176 (int (*)(...))QWindow::focusInEvent
+184 (int (*)(...))QWindow::focusOutEvent
+192 (int (*)(...))QWindow::showEvent
+200 (int (*)(...))QWindow::hideEvent
+208 (int (*)(...))QWindow::keyPressEvent
+216 (int (*)(...))QWindow::keyReleaseEvent
+224 (int (*)(...))QWindow::mousePressEvent
+232 (int (*)(...))QWindow::mouseReleaseEvent
+240 (int (*)(...))QWindow::mouseDoubleClickEvent
+248 (int (*)(...))QWindow::mouseMoveEvent
+256 (int (*)(...))QWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))QPaintDeviceWindow::paintEvent
+304 (int (*)(...))QRasterWindow::metric
+312 (int (*)(...))QPaintDeviceWindow::paintEngine
+320 (int (*)(...))QRasterWindow::redirected
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI13QRasterWindow)
+344 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+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 (*)(...))(& _ZTI13QRasterWindow)
+408 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=64 align=8
+ base size=64 base align=8
+QRasterWindow (0x0x7f31c7e455b0) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f31cd66aa80) 0
+ primary-for QRasterWindow (0x0x7f31c7e455b0)
+ QWindow (0x0x7f31cd66aaf0) 0
+ primary-for QPaintDeviceWindow (0x0x7f31cd66aa80)
+ QObject (0x0x7f31c834c960) 0
+ primary-for QWindow (0x0x7f31cd66aaf0)
+ QSurface (0x0x7f31c834ca80) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 344)
+ QPaintDevice (0x0x7f31c834cae0) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 408)
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f31c83873c0) 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 (0x0x7f31c7e45958) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f31c8387360) 0
+ primary-for QScreen (0x0x7f31c7e45958)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f31c8436d20) 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 (0x0x7f31c7e459c0) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f31c8436cc0) 0
+ primary-for QSessionManager (0x0x7f31c7e459c0)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::setData
+48 (int (*)(...))QStandardItem::clone
+56 (int (*)(...))QStandardItem::type
+64 (int (*)(...))QStandardItem::read
+72 (int (*)(...))QStandardItem::write
+80 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f31c80731e0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f31c7d39240) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 48 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 (*)(...))QStandardItemModel::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::mimeTypes
+216 (int (*)(...))QStandardItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QStandardItemModel::dropMimeData
+240 (int (*)(...))QStandardItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStandardItemModel::insertRows
+264 (int (*)(...))QStandardItemModel::insertColumns
+272 (int (*)(...))QStandardItemModel::removeRows
+280 (int (*)(...))QStandardItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStandardItemModel::flags
+328 (int (*)(...))QStandardItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f31c78d1208) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f31c78d1270) 0
+ primary-for QStandardItemModel (0x0x7f31c78d1208)
+ QObject (0x0x7f31c7d391e0) 0
+ primary-for QAbstractItemModel (0x0x7f31c78d1270)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f31c7d7b840) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f31c6ef57e0) 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 (0x0x7f31c69288f0) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f31c6ef5780) 0
+ primary-for QStyleHints (0x0x7f31c69288f0)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f31c6f81960) 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 (0x0x7f31c6928958) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f31c6f81780) 0
+ primary-for QTextObject (0x0x7f31c6928958)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f31c6fa7c00) 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 (0x0x7f31c6954410) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f31c6954478) 0
+ primary-for QTextBlockGroup (0x0x7f31c6954410)
+ QObject (0x0x7f31c6fa7b40) 0
+ primary-for QTextObject (0x0x7f31c6954478)
+
+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 (0x0x7f31c6fc17e0) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f31c6fc1a20) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f31c6fe2a80) 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 (0x0x7f31c6954888) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f31c69548f0) 0
+ primary-for QTextFrame (0x0x7f31c6954888)
+ QObject (0x0x7f31c6fc19c0) 0
+ primary-for QTextObject (0x0x7f31c69548f0)
+
+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 (0x0x7f31c670db40) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f31c670dde0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f31c670dc00) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f31c5dddcc0) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f31c4fd5ae0) 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 (0x0x7f31c40f42d8) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f31c4fd5360) 0
+ primary-for QSyntaxHighlighter (0x0x7f31c40f42d8)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f31c4ff0060) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f31c4ff04e0) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f31c4ff0600) 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 (0x0x7f31c423b270) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f31c423b2d8) 0
+ primary-for QTextList (0x0x7f31c423b270)
+ QTextObject (0x0x7f31c423b340) 0
+ primary-for QTextBlockGroup (0x0x7f31c423b2d8)
+ QObject (0x0x7f31c4ff0540) 0
+ primary-for QTextObject (0x0x7f31c423b340)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f31c50459c0) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f31c4e383c0) 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 (0x0x7f31c423b3a8) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f31c423b478) 0
+ primary-for QTextTable (0x0x7f31c423b3a8)
+ QTextObject (0x0x7f31c423b4e0) 0
+ primary-for QTextFrame (0x0x7f31c423b478)
+ QObject (0x0x7f31c4e1dd20) 0
+ primary-for QTextObject (0x0x7f31c423b4e0)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f31c4c1b180) 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 (0x0x7f31c423b548) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f31c4c1b0c0) 0
+ primary-for QValidator (0x0x7f31c423b548)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f31c49a20c0) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 17 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
+128 (int (*)(...))QIntValidator::setRange
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f31c423b5b0) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f31c423b750) 0
+ primary-for QIntValidator (0x0x7f31c423b5b0)
+ QObject (0x0x7f31c496acc0) 0
+ primary-for QValidator (0x0x7f31c423b750)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f31c49e8de0) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 17 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
+128 (int (*)(...))QDoubleValidator::setRange
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f31c423b7b8) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f31c423b8f0) 0
+ primary-for QDoubleValidator (0x0x7f31c423b7b8)
+ QObject (0x0x7f31c49a2780) 0
+ primary-for QValidator (0x0x7f31c423b8f0)
+
+Class QRegExpValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegExpValidator::QPrivateSignal (0x0x7f31c4821000) 0 empty
+
+Vtable for QRegExpValidator
+QRegExpValidator::_ZTV16QRegExpValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QRegExpValidator)
+16 (int (*)(...))QRegExpValidator::metaObject
+24 (int (*)(...))QRegExpValidator::qt_metacast
+32 (int (*)(...))QRegExpValidator::qt_metacall
+40 (int (*)(...))QRegExpValidator::~QRegExpValidator
+48 (int (*)(...))QRegExpValidator::~QRegExpValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegExpValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegExpValidator
+ size=24 align=8
+ base size=24 base align=8
+QRegExpValidator (0x0x7f31c423ba90) 0
+ vptr=((& QRegExpValidator::_ZTV16QRegExpValidator) + 16)
+ QValidator (0x0x7f31c423bb60) 0
+ primary-for QRegExpValidator (0x0x7f31c423ba90)
+ QObject (0x0x7f31c47e14e0) 0
+ primary-for QValidator (0x0x7f31c423bb60)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f31c448aea0) 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 (0x0x7f31c423bbc8) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f31c423bd00) 0
+ primary-for QRegularExpressionValidator (0x0x7f31c423bbc8)
+ QObject (0x0x7f31c448ae40) 0
+ primary-for QValidator (0x0x7f31c423bd00)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f31c44e1780) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f31c34c74e0) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f31c288a300) 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 (0x0x7f31c2225dd0) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7f31c288a2a0) 0
+ primary-for QAbstractNetworkCache (0x0x7f31c2225dd0)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f31c28a5d20) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 41 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f31c2237138) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7f31c22371a0) 0
+ primary-for QAbstractSocket (0x0x7f31c2237138)
+ QObject (0x0x7f31c28a50c0) 0
+ primary-for QIODevice (0x0x7f31c22371a0)
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f31c242bba0) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f31c24be000) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f31c1b3f000) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f31c07f2600) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f31cb810780) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f31cb395660) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f31c9b786c0) 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 (0x0x7f31c9e18b60) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7f31c9b78660) 0
+ primary-for QDnsLookup (0x0x7f31c9e18b60)
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f31c9b78a80) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 41 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f31c9e18bc8) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7f31c9e18c30) 0
+ primary-for QTcpSocket (0x0x7f31c9e18bc8)
+ QIODevice (0x0x7f31c9e18c98) 0
+ primary-for QAbstractSocket (0x0x7f31c9e18c30)
+ QObject (0x0x7f31c9b78a20) 0
+ primary-for QIODevice (0x0x7f31c9e18c98)
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f31c8b59360) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f31c7d9eba0) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f31c6925e40) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 41 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::writeData
+240 (int (*)(...))QSslSocket::resume
+248 (int (*)(...))QSslSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QSslSocket::disconnectFromHost
+272 (int (*)(...))QSslSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QSslSocket::setSocketDescriptor
+296 (int (*)(...))QSslSocket::setSocketOption
+304 (int (*)(...))QSslSocket::socketOption
+312 (int (*)(...))QSslSocket::waitForConnected
+320 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f31c698e958) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7f31c698e9c0) 0
+ primary-for QSslSocket (0x0x7f31c698e958)
+ QAbstractSocket (0x0x7f31c698ea28) 0
+ primary-for QTcpSocket (0x0x7f31c698e9c0)
+ QIODevice (0x0x7f31c698ea90) 0
+ primary-for QAbstractSocket (0x0x7f31c698ea28)
+ QObject (0x0x7f31c6925de0) 0
+ primary-for QIODevice (0x0x7f31c698ea90)
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f31c5bdd0c0) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f31c5bdd120) 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 (0x0x7f31c698eaf8) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7f31c5bdd060) 0
+ primary-for QDtlsClientVerifier (0x0x7f31c698eaf8)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f31c5bdd360) 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 (0x0x7f31c698eb60) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7f31c5bdd300) 0
+ primary-for QDtls (0x0x7f31c698eb60)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f31c5bdd5a0) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f31c5bdd6c0) 0
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f31c34e1480) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f31c2a2cb40) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f31c158e2a0) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f31c12d57e0) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f31c0525480) 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 (0x0x7f31c05382d8) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7f31c0525420) 0
+ primary-for QHttpMultiPart (0x0x7f31c05382d8)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f31c05256c0) 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 (0x0x7f31c0538340) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7f31c0525660) 0
+ primary-for QLocalServer (0x0x7f31c0538340)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f31c53f0180) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 30 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::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f31c05384e0) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7f31c0538548) 0
+ primary-for QLocalSocket (0x0x7f31c05384e0)
+ QObject (0x0x7f31c53f0120) 0
+ primary-for QIODevice (0x0x7f31c0538548)
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f31c53f0360) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f31c0de7840) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f31c0e96ea0) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 15 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::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f31c0ea5a28) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7f31c0e96e40) 0
+ primary-for QNetworkAccessManager (0x0x7f31c0ea5a28)
+
+Class QNetworkConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QNetworkConfiguration (0x0x7f31c0ed5180) 0
+
+Class QNetworkConfigurationManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkConfigurationManager::QPrivateSignal (0x0x7f31c0b7e540) 0 empty
+
+Vtable for QNetworkConfigurationManager
+QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QNetworkConfigurationManager)
+16 (int (*)(...))QNetworkConfigurationManager::metaObject
+24 (int (*)(...))QNetworkConfigurationManager::qt_metacast
+32 (int (*)(...))QNetworkConfigurationManager::qt_metacall
+40 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+48 (int (*)(...))QNetworkConfigurationManager::~QNetworkConfigurationManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkConfigurationManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkConfigurationManager (0x0x7f31c0b70d00) 0
+ vptr=((& QNetworkConfigurationManager::_ZTV28QNetworkConfigurationManager) + 16)
+ QObject (0x0x7f31c0b7e4e0) 0
+ primary-for QNetworkConfigurationManager (0x0x7f31c0b70d00)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f31c0bc90c0) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f31c0c746c0) 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 (0x0x7f31c0c67f70) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7f31c0c74660) 0
+ primary-for QNetworkCookieJar (0x0x7f31c0c67f70)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f31c0c748a0) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f31c0a3c420) 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 (0x0x7f31c0a20e38) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7f31c0a20ea0) 0
+ primary-for QNetworkDiskCache (0x0x7f31c0a20e38)
+ QObject (0x0x7f31c0a3c3c0) 0
+ primary-for QAbstractNetworkCache (0x0x7f31c0a20ea0)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f31c0a3c600) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f31c09245a0) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f31ccd9f0c0) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f31ca1ae3c0) 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 (0x0x7f31c89f7c00) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f31c89f7ea0) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 36 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 (*)(...))QNetworkReply::writeData
+240 (int (*)(...))QNetworkReply::setReadBufferSize
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))QNetworkReply::ignoreSslErrors
+264 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+272 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f31c86e12d8) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7f31c86e1340) 0
+ primary-for QNetworkReply (0x0x7f31c86e12d8)
+ QObject (0x0x7f31c89f7e40) 0
+ primary-for QIODevice (0x0x7f31c86e1340)
+
+Class QNetworkSession::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkSession::QPrivateSignal (0x0x7f31c803d3c0) 0 empty
+
+Vtable for QNetworkSession
+QNetworkSession::_ZTV15QNetworkSession: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QNetworkSession)
+16 (int (*)(...))QNetworkSession::metaObject
+24 (int (*)(...))QNetworkSession::qt_metacast
+32 (int (*)(...))QNetworkSession::qt_metacall
+40 (int (*)(...))QNetworkSession::~QNetworkSession
+48 (int (*)(...))QNetworkSession::~QNetworkSession
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QNetworkSession::connectNotify
+104 (int (*)(...))QNetworkSession::disconnectNotify
+
+Class QNetworkSession
+ size=24 align=8
+ base size=24 base align=8
+QNetworkSession (0x0x7f31c86e13a8) 0
+ vptr=((& QNetworkSession::_ZTV15QNetworkSession) + 16)
+ QObject (0x0x7f31c803d360) 0
+ primary-for QNetworkSession (0x0x7f31c86e13a8)
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f31c803dc00) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f31c75d8480) 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 (0x0x7f31c74eac30) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7f31c75d8420) 0
+ primary-for QTcpServer (0x0x7f31c74eac30)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f31c75d8660) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f31c6529600) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f31c4e366c0) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f31c3f77420) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f31c39eed80) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f31c29b4c60) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 41 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 (*)(...))QAbstractSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QAbstractSocket::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::writeData
+240 (int (*)(...))QAbstractSocket::resume
+248 (int (*)(...))QAbstractSocket::connectToHost
+256 (int (*)(...))QAbstractSocket::connectToHost
+264 (int (*)(...))QAbstractSocket::disconnectFromHost
+272 (int (*)(...))QAbstractSocket::setReadBufferSize
+280 (int (*)(...))QAbstractSocket::socketDescriptor
+288 (int (*)(...))QAbstractSocket::setSocketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketOption
+304 (int (*)(...))QAbstractSocket::socketOption
+312 (int (*)(...))QAbstractSocket::waitForConnected
+320 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f31c26b1208) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7f31c26b1270) 0
+ primary-for QUdpSocket (0x0x7f31c26b1208)
+ QIODevice (0x0x7f31c26b12d8) 0
+ primary-for QAbstractSocket (0x0x7f31c26b1270)
+ QObject (0x0x7f31c29b4c00) 0
+ primary-for QIODevice (0x0x7f31c26b12d8)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f31c29b4ea0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f31c22d0420) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f31c22d04e0) 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 (0x0x7f31c26b13a8) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7f31c22d0480) 0
+ primary-for QJSEngine (0x0x7f31c26b13a8)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f31c1b76060) 0
+
+Class QQmlPrivate::RegisterType
+ size=128 align=8
+ base size=124 base align=8
+QQmlPrivate::RegisterType (0x0x7f31c1b76c00) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f31c1b76c60) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f31c1b76cc0) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=96 align=8
+ base size=96 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f31c1b76d20) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f31c1b76f00) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f31c1b76f60) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f31c125b000) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f31c125b060) 0
+
+Class QQmlPrivate::RegisterSingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::RegisterSingletonFunctor (0x0x7f31c125b0c0) 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 (0x0x7f31c125b480) 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 (0x0x7f31c125b660) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f31c125bc00) 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 (0x0x7f31cb002420) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f31cb002480) 0
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlImageProviderBase
+ size=8 align=8
+ base size=8 base align=8
+QQmlImageProviderBase (0x0x7f31c95173c0) 0 nearly-empty
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f31c9517b40) 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 (0x0x7f31c96fedd0) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7f31c96fee38) 0
+ primary-for QQmlEngine (0x0x7f31c96fedd0)
+ QObject (0x0x7f31c9517ae0) 0
+ primary-for QJSEngine (0x0x7f31c96fee38)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f31c9517de0) 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 (0x0x7f31c96feea0) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7f31c96fef08) 0
+ primary-for QQmlApplicationEngine (0x0x7f31c96feea0)
+ QJSEngine (0x0x7f31c96fef70) 0
+ primary-for QQmlEngine (0x0x7f31c96fef08)
+ QObject (0x0x7f31c9517d80) 0
+ primary-for QJSEngine (0x0x7f31c96fef70)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f31c89d8060) 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 (0x0x7f31c89b6000) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7f31c89d8000) 0
+ primary-for QQmlComponent (0x0x7f31c89b6000)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f31c89d8d20) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=24 align=8
+ base size=24 base align=8
+QQmlContext::PropertyPair (0x0x7f31c89d8d80) 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 (0x0x7f31c89b6548) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7f31c89d8cc0) 0
+ primary-for QQmlContext (0x0x7f31c89b6548)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f31c7dde180) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f31c7dde480) 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 (0x0x7f31c89b65b0) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7f31c7dde420) 0
+ primary-for QQmlExpression (0x0x7f31c89b65b0)
+
+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 (0x0x7f31c7dde660) 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 (0x0x7f31c89b6618) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7f31c7dde6c0) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f31c89b6618)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f31c7ddeae0) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 22 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::initializeEngine
+128 (int (*)(...))-16
+136 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+144 0
+152 0
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f31c53c4ee0) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7f31c7ddea20) 0
+ primary-for QQmlExtensionPlugin (0x0x7f31c53c4ee0)
+ QQmlExtensionInterface (0x0x7f31c89b6680) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 144)
+ QQmlTypesExtensionInterface (0x0x7f31c7ddea80) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f31c89b6680)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f31c7ddecc0) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f31c7dded80) 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 (0x0x7f31c89b6750) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7f31c7dded20) 0
+ primary-for QQmlFileSelector (0x0x7f31c89b6750)
+
+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 (0x0x7f31c7ddef60) 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 (0x0x7f31c6bf3000) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f31c89b67b8) 0
+ QDebug (0x0x7f31c6bf3060) 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 (0x0x7f31c64cb000) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f31c64cb060) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f31c53918a0) 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 (0x0x7f31c5baddd0) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7f31c5391840) 0
+ primary-for QQmlPropertyMap (0x0x7f31c5baddd0)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f31c5391b40) 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 (0x0x7f31c5bade38) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+ QObject (0x0x7f31c5391ae0) 0
+ primary-for QQuickTransform (0x0x7f31c5bade38)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f31c5391de0) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f31c5391e40) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f31c5391ea0) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 55 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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickItem::updatePaintNode
+376 (int (*)(...))QQuickItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI10QQuickItem)
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f31c4c4f150) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+ QObject (0x0x7f31c5391d20) 0
+ primary-for QQuickItem (0x0x7f31c4c4f150)
+ QQmlParserStatus (0x0x7f31c5391d80) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 408)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f31c2e1a840) 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 (0x0x7f31c2e1a8a0) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 56 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 (*)(...))QQuickItem::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickFramebufferObject::geometryChanged
+368 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+376 (int (*)(...))QQuickFramebufferObject::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+416 0
+424 0
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f31c5badf70) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+ QQuickItem (0x0x7f31c4cc77e0) 0
+ primary-for QQuickFramebufferObject (0x0x7f31c5badf70)
+ QObject (0x0x7f31c2e1a780) 0
+ primary-for QQuickItem (0x0x7f31c4cc77e0)
+ QQmlParserStatus (0x0x7f31c2e1a7e0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 416)
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f31c2e1aae0) 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 (0x0x7f31c26bb000) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+ QObject (0x0x7f31c2e1aa80) 0
+ primary-for QQuickTextureFactory (0x0x7f31c26bb000)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f31c2e1ac60) 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 (0x0x7f31c26bb068) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+ QObject (0x0x7f31c2e1ac00) 0
+ primary-for QQuickImageResponse (0x0x7f31c26bb068)
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+24 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageProvider (0x0x7f31c26bb0d0) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+ QQmlImageProviderBase (0x0x7f31c2e1ae40) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7f31c26bb0d0)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 0
+24 0
+32 (int (*)(...))QQuickImageProvider::imageType
+40 (int (*)(...))QQuickImageProvider::flags
+48 (int (*)(...))QQuickImageProvider::requestImage
+56 (int (*)(...))QQuickImageProvider::requestPixmap
+64 (int (*)(...))QQuickImageProvider::requestTexture
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickAsyncImageProvider (0x0x7f31c26bb138) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+ QQuickImageProvider (0x0x7f31c26bb1a0) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f31c26bb138)
+ QQmlImageProviderBase (0x0x7f31c22760c0) 0 nearly-empty
+ primary-for QQuickImageProvider (0x0x7f31c26bb1a0)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f31c2276180) 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 (0x0x7f31c26bb208) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+ QObject (0x0x7f31c2276120) 0
+ primary-for QQuickItemGrabResult (0x0x7f31c26bb208)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f31c2276420) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 56 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::classBegin
+176 (int (*)(...))QQuickItem::componentComplete
+184 (int (*)(...))QQuickItem::keyPressEvent
+192 (int (*)(...))QQuickItem::keyReleaseEvent
+200 (int (*)(...))QQuickItem::inputMethodEvent
+208 (int (*)(...))QQuickItem::focusInEvent
+216 (int (*)(...))QQuickItem::focusOutEvent
+224 (int (*)(...))QQuickItem::mousePressEvent
+232 (int (*)(...))QQuickItem::mouseMoveEvent
+240 (int (*)(...))QQuickItem::mouseReleaseEvent
+248 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+256 (int (*)(...))QQuickItem::mouseUngrabEvent
+264 (int (*)(...))QQuickItem::touchUngrabEvent
+272 (int (*)(...))QQuickItem::wheelEvent
+280 (int (*)(...))QQuickItem::touchEvent
+288 (int (*)(...))QQuickItem::hoverEnterEvent
+296 (int (*)(...))QQuickItem::hoverMoveEvent
+304 (int (*)(...))QQuickItem::hoverLeaveEvent
+312 (int (*)(...))QQuickItem::dragEnterEvent
+320 (int (*)(...))QQuickItem::dragMoveEvent
+328 (int (*)(...))QQuickItem::dragLeaveEvent
+336 (int (*)(...))QQuickItem::dropEvent
+344 (int (*)(...))QQuickItem::childMouseEventFilter
+352 (int (*)(...))QQuickItem::windowDeactivateEvent
+360 (int (*)(...))QQuickItem::geometryChanged
+368 (int (*)(...))QQuickPaintedItem::updatePaintNode
+376 (int (*)(...))QQuickPaintedItem::releaseResources
+384 (int (*)(...))QQuickItem::updatePolish
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))-16
+408 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+416 0
+424 0
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+440 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f31c26bb270) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+ QQuickItem (0x0x7f31c4cc7ee0) 0
+ primary-for QQuickPaintedItem (0x0x7f31c26bb270)
+ QObject (0x0x7f31c2276360) 0
+ primary-for QQuickItem (0x0x7f31c4cc7ee0)
+ QQmlParserStatus (0x0x7f31c22763c0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 416)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f31c2276ea0) 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 (0x0x7f31c26bb410) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+ QObject (0x0x7f31c2276e40) 0
+ primary-for QQuickRenderControl (0x0x7f31c26bb410)
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f31c19ca180) 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 (0x0x7f31c26bb478) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+ QObject (0x0x7f31c19ca120) 0
+ primary-for QQuickTextDocument (0x0x7f31c26bb478)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f31c19ca7e0) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f31c19ca840) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f31c19ca8a0) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f31c19ca900) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f31c19ca960) 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 (0x0x7f31c19ca780) 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=80 align=8
+ base size=80 base align=8
+QSGNode (0x0x7f31c3071960) 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=112 align=8
+ base size=112 base align=8
+QSGBasicGeometryNode (0x0x7f31c26bbb60) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+ QSGNode (0x0x7f31c3d8e300) 0
+ primary-for QSGBasicGeometryNode (0x0x7f31c26bbb60)
+
+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=144 align=8
+ base size=144 base align=8
+QSGGeometryNode (0x0x7f31c26bbbc8) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+ QSGBasicGeometryNode (0x0x7f31c26bbc30) 0
+ primary-for QSGGeometryNode (0x0x7f31c26bbbc8)
+ QSGNode (0x0x7f31c3d8e5a0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f31c26bbc30)
+
+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=152 align=8
+ base size=152 base align=8
+QSGClipNode (0x0x7f31c26bbc98) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+ QSGBasicGeometryNode (0x0x7f31c26bbd00) 0
+ primary-for QSGClipNode (0x0x7f31c26bbc98)
+ QSGNode (0x0x7f31c3d8e780) 0
+ primary-for QSGBasicGeometryNode (0x0x7f31c26bbd00)
+
+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=216 align=8
+ base size=216 base align=8
+QSGTransformNode (0x0x7f31c26bbd68) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+ QSGNode (0x0x7f31c3d8e8a0) 0
+ primary-for QSGTransformNode (0x0x7f31c26bbd68)
+
+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=88 align=8
+ base size=88 base align=8
+QSGRootNode (0x0x7f31c26bbdd0) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+ QSGNode (0x0x7f31c3d8e9c0) 0
+ primary-for QSGRootNode (0x0x7f31c26bbdd0)
+
+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=96 align=8
+ base size=96 base align=8
+QSGOpacityNode (0x0x7f31c26bbea0) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+ QSGNode (0x0x7f31c3d8eb40) 0
+ primary-for QSGOpacityNode (0x0x7f31c26bbea0)
+
+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 (0x0x7f31c3d8ec60) 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 (0x0x7f31c5847a80) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f31c3494960) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f31c34949c0) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 45 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickWindow::keyPressEvent
+216 (int (*)(...))QQuickWindow::keyReleaseEvent
+224 (int (*)(...))QQuickWindow::mousePressEvent
+232 (int (*)(...))QQuickWindow::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickWindow::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI12QQuickWindow)
+312 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+320 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f31c31650d0) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+ QWindow (0x0x7f31c49f32a0) 0
+ primary-for QQuickWindow (0x0x7f31c31650d0)
+ QObject (0x0x7f31c34948a0) 0
+ primary-for QWindow (0x0x7f31c49f32a0)
+ QSurface (0x0x7f31c3494900) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 312)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f31c17ae4e0) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 45 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::moveEvent
+176 (int (*)(...))QQuickWindow::focusInEvent
+184 (int (*)(...))QQuickWindow::focusOutEvent
+192 (int (*)(...))QQuickWindow::showEvent
+200 (int (*)(...))QQuickWindow::hideEvent
+208 (int (*)(...))QQuickView::keyPressEvent
+216 (int (*)(...))QQuickView::keyReleaseEvent
+224 (int (*)(...))QQuickView::mousePressEvent
+232 (int (*)(...))QQuickView::mouseReleaseEvent
+240 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+248 (int (*)(...))QQuickView::mouseMoveEvent
+256 (int (*)(...))QQuickWindow::wheelEvent
+264 (int (*)(...))QWindow::touchEvent
+272 (int (*)(...))QWindow::tabletEvent
+280 (int (*)(...))QWindow::nativeEvent
+288 (int (*)(...))QWindow::surfaceHandle
+296 (int (*)(...))-16
+304 (int (*)(...))(& _ZTI10QQuickView)
+312 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+320 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+328 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+336 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f31c3165208) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+ QQuickWindow (0x0x7f31c3165270) 0
+ primary-for QQuickView (0x0x7f31c3165208)
+ QWindow (0x0x7f31c4a2a8c0) 0
+ primary-for QQuickWindow (0x0x7f31c3165270)
+ QObject (0x0x7f31c17ae420) 0
+ primary-for QWindow (0x0x7f31c4a2a8c0)
+ QSurface (0x0x7f31c17ae480) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 312)
+
+Class QSGAbstractRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGAbstractRenderer::QPrivateSignal (0x0x7f31c17ae8a0) 0 empty
+
+Vtable for QSGAbstractRenderer
+QSGAbstractRenderer::_ZTV19QSGAbstractRenderer: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QSGAbstractRenderer)
+16 (int (*)(...))QSGAbstractRenderer::metaObject
+24 (int (*)(...))QSGAbstractRenderer::qt_metacast
+32 (int (*)(...))QSGAbstractRenderer::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::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 QSGAbstractRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSGAbstractRenderer (0x0x7f31c31652d8) 0
+ vptr=((& QSGAbstractRenderer::_ZTV19QSGAbstractRenderer) + 16)
+ QObject (0x0x7f31c17ae840) 0
+ primary-for QSGAbstractRenderer (0x0x7f31c31652d8)
+
+Class QSGEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGEngine::QPrivateSignal (0x0x7f31c09ff5a0) 0 empty
+
+Vtable for QSGEngine
+QSGEngine::_ZTV9QSGEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSGEngine)
+16 (int (*)(...))QSGEngine::metaObject
+24 (int (*)(...))QSGEngine::qt_metacast
+32 (int (*)(...))QSGEngine::qt_metacall
+40 (int (*)(...))QSGEngine::~QSGEngine
+48 (int (*)(...))QSGEngine::~QSGEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSGEngine
+ size=16 align=8
+ base size=16 base align=8
+QSGEngine (0x0x7f31c31654e0) 0
+ vptr=((& QSGEngine::_ZTV9QSGEngine) + 16)
+ QObject (0x0x7f31c09ff540) 0
+ primary-for QSGEngine (0x0x7f31c31654e0)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f31c09ffc00) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f31c09ffcc0) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 0
+24 0
+32 (int (*)(...))QSGMaterialShader::activate
+40 (int (*)(...))QSGMaterialShader::deactivate
+48 (int (*)(...))QSGMaterialShader::updateState
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGMaterialShader::compile
+72 (int (*)(...))QSGMaterialShader::initialize
+80 (int (*)(...))QSGMaterialShader::vertexShader
+88 (int (*)(...))QSGMaterialShader::fragmentShader
+
+Class QSGMaterialShader
+ size=32 align=8
+ base size=32 base align=8
+QSGMaterialShader (0x0x7f31c09ffc60) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Class QSGMaterialRhiShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialRhiShader::RenderState (0x0x7f31c082e840) 0
+
+Class QSGMaterialRhiShader::GraphicsPipelineState
+ size=36 align=4
+ base size=36 base align=4
+QSGMaterialRhiShader::GraphicsPipelineState (0x0x7f31c082e8a0) 0
+
+Vtable for QSGMaterialRhiShader
+QSGMaterialRhiShader::_ZTV20QSGMaterialRhiShader: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGMaterialRhiShader)
+16 (int (*)(...))QSGMaterialRhiShader::~QSGMaterialRhiShader
+24 (int (*)(...))QSGMaterialRhiShader::~QSGMaterialRhiShader
+32 (int (*)(...))QSGMaterialShader::activate
+40 (int (*)(...))QSGMaterialShader::deactivate
+48 (int (*)(...))QSGMaterialShader::updateState
+56 (int (*)(...))QSGMaterialRhiShader::attributeNames
+64 (int (*)(...))QSGMaterialShader::compile
+72 (int (*)(...))QSGMaterialShader::initialize
+80 (int (*)(...))QSGMaterialShader::vertexShader
+88 (int (*)(...))QSGMaterialShader::fragmentShader
+96 (int (*)(...))QSGMaterialRhiShader::updateUniformData
+104 (int (*)(...))QSGMaterialRhiShader::updateSampledImage
+112 (int (*)(...))QSGMaterialRhiShader::updateGraphicsPipelineState
+
+Class QSGMaterialRhiShader
+ size=40 align=8
+ base size=40 base align=8
+QSGMaterialRhiShader (0x0x7f31c31656e8) 0
+ vptr=((& QSGMaterialRhiShader::_ZTV20QSGMaterialRhiShader) + 16)
+ QSGMaterialShader (0x0x7f31c082e7e0) 0
+ primary-for QSGMaterialRhiShader (0x0x7f31c31656e8)
+
+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 (0x0x7f31c0680960) 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 (0x0x7f31c3165a28) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+ QSGMaterial (0x0x7f31c022a120) 0
+ primary-for QSGFlatColorMaterial (0x0x7f31c3165a28)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f31c022a240) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 22 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 (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f31c3165a90) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+ QObject (0x0x7f31c022a1e0) 0
+ primary-for QSGTexture (0x0x7f31c3165a90)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f31c022a4e0) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 23 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 (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QSGTexture::normalizedTextureSubRect
+152 (int (*)(...))QSGTexture::isAtlasTexture
+160 (int (*)(...))QSGTexture::removedFromAtlas
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f31c3165af8) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+ QSGTexture (0x0x7f31c3165b60) 0
+ primary-for QSGDynamicTexture (0x0x7f31c3165af8)
+ QObject (0x0x7f31c022a480) 0
+ primary-for QSGTexture (0x0x7f31c3165b60)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 20 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
+
+Class QSGImageNode
+ size=144 align=8
+ base size=144 base align=8
+QSGImageNode (0x0x7f31c3165bc8) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+ QSGGeometryNode (0x0x7f31c3165c30) 0
+ primary-for QSGImageNode (0x0x7f31c3165bc8)
+ QSGBasicGeometryNode (0x0x7f31c3165c98) 0
+ primary-for QSGGeometryNode (0x0x7f31c3165c30)
+ QSGNode (0x0x7f31c022a600) 0
+ primary-for QSGBasicGeometryNode (0x0x7f31c3165c98)
+
+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=144 align=8
+ base size=144 base align=8
+QSGNinePatchNode (0x0x7f31c3165dd0) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+ QSGGeometryNode (0x0x7f31c3165e38) 0
+ primary-for QSGNinePatchNode (0x0x7f31c3165dd0)
+ QSGBasicGeometryNode (0x0x7f31c3165ea0) 0
+ primary-for QSGGeometryNode (0x0x7f31c3165e38)
+ QSGNode (0x0x7f31c022ade0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f31c3165ea0)
+
+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=144 align=8
+ base size=144 base align=8
+QSGRectangleNode (0x0x7f31c3165f08) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+ QSGGeometryNode (0x0x7f31c3165f70) 0
+ primary-for QSGRectangleNode (0x0x7f31c3165f08)
+ QSGBasicGeometryNode (0x0x7f31ca88f000) 0
+ primary-for QSGGeometryNode (0x0x7f31c3165f70)
+ QSGNode (0x0x7f31c022ae40) 0
+ primary-for QSGBasicGeometryNode (0x0x7f31ca88f000)
+
+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 (0x0x7f31c022af60) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 11 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 (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QSGRenderNode::releaseResources
+72 (int (*)(...))QSGRenderNode::flags
+80 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=88 align=8
+ base size=88 base align=8
+QSGRenderNode (0x0x7f31ca88f068) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+ QSGNode (0x0x7f31c022af00) 0
+ primary-for QSGRenderNode (0x0x7f31ca88f068)
+
+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=320 align=8
+ base size=320 base align=8
+QSGSimpleRectNode (0x0x7f31ca88f4e0) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+ QSGGeometryNode (0x0x7f31ca88f548) 0
+ primary-for QSGSimpleRectNode (0x0x7f31ca88f4e0)
+ QSGBasicGeometryNode (0x0x7f31ca88f5b0) 0
+ primary-for QSGGeometryNode (0x0x7f31ca88f548)
+ QSGNode (0x0x7f31c765d6c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f31ca88f5b0)
+
+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 (0x0x7f31ca88f618) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+ QSGMaterial (0x0x7f31c765d780) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f31ca88f618)
+
+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 (0x0x7f31ca88f680) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+ QSGOpaqueTextureMaterial (0x0x7f31ca88f6e8) 0
+ primary-for QSGTextureMaterial (0x0x7f31ca88f680)
+ QSGMaterial (0x0x7f31c765dc00) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f31ca88f6e8)
+
+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=384 align=8
+ base size=384 base align=8
+QSGSimpleTextureNode (0x0x7f31ca88f750) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+ QSGGeometryNode (0x0x7f31ca88f7b8) 0
+ primary-for QSGSimpleTextureNode (0x0x7f31ca88f750)
+ QSGBasicGeometryNode (0x0x7f31ca88f820) 0
+ primary-for QSGGeometryNode (0x0x7f31ca88f7b8)
+ QSGNode (0x0x7f31c765dc60) 0
+ primary-for QSGBasicGeometryNode (0x0x7f31ca88f820)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f31c6a41600) 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 (0x0x7f31ca88f9c0) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+ QObject (0x0x7f31c6a415a0) 0
+ primary-for QSGTextureProvider (0x0x7f31ca88f9c0)
+
+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 (0x0x7f31ca88fa28) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+ QSGMaterial (0x0x7f31c6a41720) 0
+ primary-for QSGVertexColorMaterial (0x0x7f31ca88fa28)
+
+Class QQuickStyle
+ size=1 align=1
+ base size=0 base align=1
+QQuickStyle (0x0x7f31c6a41780) 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 = 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 (0x0x7f31c3aeba80) 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 (0x0x7f31c3aebde0) 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 (0x0x7f31c38b0000) 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 (0x0x7f31c38b0360) 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 (0x0x7f31c38b0540) 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 (0x0x7f31c38b08a0) 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 (0x0x7f31c38b0a80) 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 (0x0x7f31c38b0de0) 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 (0x0x7f31c3944000) 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 (0x0x7f31c3944360) 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 (0x0x7f31c3944540) 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 (0x0x7f31c39448a0) 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 (0x0x7f31c3944a80) 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 (0x0x7f31c3944de0) 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 (0x0x7f31c367b000) 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 (0x0x7f31c367b360) 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 (0x0x7f31c36bd840) 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 (0x0x7f31c36bdba0) 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 (0x0x7f31c36bdd20) 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 (0x0x7f31c38070c0) 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 (0x0x7f31c3807240) 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 (0x0x7f31c38075a0) 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 (0x0x7f31c3807720) 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 (0x0x7f31c3807a80) 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 (0x0x7f31c3807c00) 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 (0x0x7f31c3807f60) 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 (0x0x7f31c2f9f120) 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 (0x0x7f31c2f9f480) 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 (0x0x7f31c2f9f600) 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 (0x0x7f31c2f9f960) 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 (0x0x7f31c2f9fae0) 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 (0x0x7f31c2f9fe40) 0 empty
+
diff --git a/tests/auto/quickcontrols2/bic/data/QtQuickControls2.6.0.0.linux-gcc-amd64.txt b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.6.0.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..21b78d6349
--- /dev/null
+++ b/tests/auto/quickcontrols2/bic/data/QtQuickControls2.6.0.0.linux-gcc-amd64.txt
@@ -0,0 +1,14468 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f4475a49840) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f4475adc060) 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 (0x0x7f4475adc2a0) 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 (0x0x7f4475b0e3c0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f447573eba0) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f44757b79c0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f44757b7a80) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f44757b7f60) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f44757e6000) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f44757e6060) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f44757e60c0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f44757e6120) 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 (0x0x7f44757e61e0) 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 (0x0x7f44757e62a0) 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 (0x0x7f44757e6360) 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 (0x0x7f44757e6420) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f44757e6780) 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 (0x0x7f44757e6ae0) 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 (0x0x7f44757e6b40) 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 (0x0x7f44757e6de0) 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 (0x0x7f44757e6e40) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f44758376c0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f4475883c60) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f44758880d0) 0 empty
+ std::__nonesuch (0x0x7f44758bd180) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f4475903ea0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f4475936180) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f44759361e0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f4475d6df00) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f4475d6df60) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f4475888618) 0 empty
+ std::input_iterator_tag (0x0x7f4475d95000) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f4475888680) 0 empty
+ std::forward_iterator_tag (0x0x7f44758886e8) 0 empty
+ std::input_iterator_tag (0x0x7f4475d95060) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f4475888750) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f44758887b8) 0 empty
+ std::forward_iterator_tag (0x0x7f4475888820) 0 empty
+ std::input_iterator_tag (0x0x7f4475d950c0) 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 (0x0x7f4475e1ed80) 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 (0x0x7f4475e1eea0) 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 (0x0x7f4475e4e1e0) 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 (0x0x7f4475e4e4e0) 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 (0x0x7f4475e4e600) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f4475ed7de0) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f4475f21180) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f4475f211e0) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f4475f212a0) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f4475f21300) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f4475f21360) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f4475f213c0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f4475f21420) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f4475f216c0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f4475f21960) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f4475f219c0) 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 (0x0x7f4475bd1780) 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 (0x0x7f4475888bc8) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f4475bd1960) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f4475888bc8)
+
+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 (0x0x7f4475bd1b40) 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 (0x0x7f4475888c30) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f4475bd1f00) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f4475888c30)
+
+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 (0x0x7f4475888c98) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f4475c07120) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f4475888c98)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f4475c07300) 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 (0x0x7f4475c07840) 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 (0x0x7f4475888d00) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f4475c07f00) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f4475888d00)
+
+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 (0x0x7f4475888d68) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f4475888dd0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f4475888d68)
+ std::exception (0x0x7f4475c3c120) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f4475888dd0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f4475c3c300) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f4475c3c540) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f4475cbecc0) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f4474ce30c0) 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 (0x0x7f4474ce3180) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f4474940060) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f4474940120) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f4474940180) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f44749401e0) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f4474940240) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f4474940360) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f44749403c0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f44749d7a20) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f44749d7ba0) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f44747f6a20) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f44747f6a80) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f44747f6ae0) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f44747f6b40) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f4474450300) 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 (0x0x7f44743ced68) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f44744503c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f44743ced68)
+
+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 (0x0x7f44743cedd0) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f44743cee38) 0
+ primary-for std::domain_error (0x0x7f44743cedd0)
+ std::exception (0x0x7f4474450420) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f44743cee38)
+
+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 (0x0x7f44743ceea0) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f44743cef08) 0
+ primary-for std::invalid_argument (0x0x7f44743ceea0)
+ std::exception (0x0x7f4474450480) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f44743cef08)
+
+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 (0x0x7f44743cef70) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f4474474000) 0
+ primary-for std::length_error (0x0x7f44743cef70)
+ std::exception (0x0x7f44744504e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f4474474000)
+
+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 (0x0x7f4474474068) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f44744740d0) 0
+ primary-for std::out_of_range (0x0x7f4474474068)
+ std::exception (0x0x7f4474450540) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f44744740d0)
+
+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 (0x0x7f4474474138) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f44744505a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4474474138)
+
+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 (0x0x7f44744741a0) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f4474474208) 0
+ primary-for std::range_error (0x0x7f44744741a0)
+ std::exception (0x0x7f4474450600) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4474474208)
+
+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 (0x0x7f4474474270) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f44744742d8) 0
+ primary-for std::overflow_error (0x0x7f4474474270)
+ std::exception (0x0x7f4474450660) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f44744742d8)
+
+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 (0x0x7f4474474340) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f44744743a8) 0
+ primary-for std::underflow_error (0x0x7f4474474340)
+ std::exception (0x0x7f44744506c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f44744743a8)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f44744b89c0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f44744b8a20) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f44744b8ba0) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f44744b8c60) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f4474474618) 0
+ std::__uses_alloc_base (0x0x7f44744b8c00) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f44742582a0) 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 (0x0x7f44742d1a28) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f44742f2960) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f44742d1a28)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f44742f2a20) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f44742f2a80) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f44742f2d80) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f4473fcbc00) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f4473fcbcc0) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f4473ff51e0) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f447401c060) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f447401c120) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f447401c180) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f447401c540) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f447401c660) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f4473e00720) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f4473e3d000) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f4473e3d9c0) 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 (0x0x7f4473e21958) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f4473e3dc00) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f4473e21958)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f44739185a0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f4473808478) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f4473918d20) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f4473808548) 0
+ std::_Bit_iterator_base (0x0x7f44738085b0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f447354a300) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f4473808680) 0
+ std::_Bit_iterator_base (0x0x7f44738086e8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f447354aae0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f447335a000) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f447335a180) 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 (0x0x7f447335a300) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f447335a480) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f4473456f60) 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 (0x0x7f4473496000) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f447351ca80) 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 (0x0x7f4473478a90) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f4473183000) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f4473478a90)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f44732199c0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f4473219a20) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f4473219cc0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f44732614e0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f4473296600) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f4473329420) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f44732c2d00) 0
+ std::__atomic_flag_base (0x0x7f4473329480) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f4472ee3000) 0
+ QAtomicInteger<int> (0x0x7f4472ee3068) 0
+ QBasicAtomicInteger<int> (0x0x7f4472eb2360) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f4472b1b660) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f4472b1b6c0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f44727d39c0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f4472811120) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f4472811180) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f44727e1478) 0
+ QGenericArgument (0x0x7f4472811420) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f4472811900) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f4472811960) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f44728118a0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f447285d300) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f447288dd20) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f44728b3720) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f447258c240) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f447258c5a0) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f447261ef60) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f44726450c0) 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 (0x0x7f4472645480) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f4472645720) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f4472645900) 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 (0x0x7f44726a1a20) 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 (0x0x7f44726a1d80) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f44726e75a0) 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 (0x0x7f4472641958) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f44726419c0) 0
+ primary-for std::system_error (0x0x7f4472641958)
+ std::exception (0x0x7f4472712180) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f44726419c0)
+
+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 (0x0x7f4472641d00) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f4472641d68) 0
+ primary-for std::ios_base::failure (0x0x7f4472641d00)
+ std::runtime_error (0x0x7f4472641dd0) 0
+ primary-for std::system_error (0x0x7f4472641d68)
+ std::exception (0x0x7f4472348900) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4472641dd0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f4472348960) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f44723489c0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f4472348a20) 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 (0x0x7f44723488a0) 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 (0x0x7f4472401660) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f44724b9960) 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> (0x0x7f4472021958 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> (0x0x7f4472021a28 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> (0x0x7f4472021f70 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> (0x0x7f4472021b60 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 (0x0x7f44720944e0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f44720ac360) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f44720944e0)
+
+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 (0x0x7f4472094548) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f44720ac480) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f4472094548)
+
+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 (0x0x7f44720945b0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f44720ac5a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f44720945b0)
+
+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 (0x0x7f4472094680) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f44720ac6c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f4472094680)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f44720acf60) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f44720d8300) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f44720d8600) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f44720d8960) 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 (0x0x7f44720947b8) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f4471d88120) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f44720947b8)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f4471dc8ea0) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f4471def420) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f4471f35240) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f4471c660c0) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f447194ea80) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f44717ac180) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f4471819c60) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f4471578000) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f4471578420) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f4471578480) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f44715fc600) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f44716dbc00) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f44716dbba0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f447171dc60) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f4471480f60) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f44710a7300) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f4471099548) 0
+ QtPrivate::ArgBase (0x0x7f44710a7360) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f4471099618) 0
+ QtPrivate::ArgBase (0x0x7f44710a75a0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f4471124d80) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f4471124e40) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f4470b43060) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f4470bdc120) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f4470bdcde0) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f4470c00060) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f4470c92120) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f4470db4af8) 0
+ QIODeviceBase (0x0x7f4470c92180) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f4470c92300) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f4470949720) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f447094a2d8) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f44709497e0) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f447094a3a8) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f44709498a0) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f4470a363c0) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f447094a750) 0
+ QMetaContainer (0x0x7f4470a365a0) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f447094a7b8) 0
+ QMetaContainer (0x0x7f4470a36960) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f447066d000) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f44705fe820) 0
+ std::__detail::_List_node_base (0x0x7f447066d060) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f4470347120) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f4470347480) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f44701aaa80) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f4470238120) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f4470120f60) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f446fd52000) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f446fc5d6c0) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f446fc5da20) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f446fcc7a80) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f446fcc7ba0) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f446fd33240) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f446fd331e0) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f446fd332a0) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f446fd33720) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f446fd33780) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f446fd33d80) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f446f95f4e0) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f446f95f7e0) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f446f95f900) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f446f95fba0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f446fd2c958) 0
+ QPropertyObserverBase (0x0x7f446f95fd20) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f446f9c5c00) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f446f9ee840) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7f446fa20ae0) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f446fa20b40) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f446fb28720) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f446f7d8480) 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 (0x0x7f446f818de0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f446f8c9780) 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 (0x0x7f446f8c9720) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f446f57f6c0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f446f57ff60) 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 (0x0x7f446f885b60) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f446f57ff00) 0
+ primary-for QAbstractAnimation (0x0x7f446f885b60)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f446f5bb300) 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 (0x0x7f446f885bc8) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f446f5bb2a0) 0
+ primary-for QAnimationDriver (0x0x7f446f885bc8)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f446f5bb4e0) 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 (0x0x7f446f885c30) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f446f5bb480) 0
+ primary-for QEventLoop (0x0x7f446f885c30)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f446f5bb960) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f446f5bba20) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f446f5bba80) 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 (0x0x7f446f885dd0) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f446f5bb9c0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f446f885dd0)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f446f63f240) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f446f4e7cc0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f446f4e7c60) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f446f507900) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f446f13f000) 0
+ QStringConverterBase (0x0x7f446f5078a0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f446f13f068) 0
+ QStringConverter (0x0x7f446f13f0d0) 0
+ QStringConverterBase (0x0x7f446f15a300) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f446f13f138) 0
+ QStringConverter (0x0x7f446f13f1a0) 0
+ QStringConverterBase (0x0x7f446f17e180) 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 (0x0x7f446f13f208) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f446f17ee40) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f446f1d1540) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f446f2735a0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f446f2c9000) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f446f2c9180) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f446ef73360) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f446ef98360) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f446ef46c98) 0
+ QIODeviceBase (0x0x7f446ef98300) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f446f0c02a0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f446f0c0360) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f446ee67d80) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f446ee67de0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f446ee67d20) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f446ec371e0) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f446ec37420) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f446ec37600) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f446ec77540) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f446ecc2540) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f446ed0f720) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f446e9a2000) 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 (0x0x7f446e98dd68) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f446e981f60) 0
+ primary-for QAbstractItemModel (0x0x7f446e98dd68)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f446eaa9cc0) 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 (0x0x7f446e9ed618) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f446e9ed680) 0
+ primary-for QAbstractTableModel (0x0x7f446e9ed618)
+ QObject (0x0x7f446eaa9c60) 0
+ primary-for QAbstractItemModel (0x0x7f446e9ed680)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f446eaa9de0) 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 (0x0x7f446e9ed6e8) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f446e9ed750) 0
+ primary-for QAbstractListModel (0x0x7f446e9ed6e8)
+ QObject (0x0x7f446eaa9d80) 0
+ primary-for QAbstractItemModel (0x0x7f446e9ed750)
+
+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 (0x0x7f446eb21240) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f446eb21300) 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 (0x0x7f446eb1aaf8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f446eb1ab60) 0
+ primary-for QAbstractProxyModel (0x0x7f446eb1aaf8)
+ QObject (0x0x7f446eb212a0) 0
+ primary-for QAbstractItemModel (0x0x7f446eb1ab60)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f446eb214e0) 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 (0x0x7f446eb1abc8) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f446eb1ac30) 0
+ primary-for QAnimationGroup (0x0x7f446eb1abc8)
+ QObject (0x0x7f446eb21480) 0
+ primary-for QAbstractAnimation (0x0x7f446eb1ac30)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f446eb1ad68) 0
+ QIterator<QMetaAssociation> (0x0x7f446eb1add0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f446eb21900) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f446eb1af08) 0
+ QConstIterator<QMetaAssociation> (0x0x7f446eb1af70) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f446eb21ea0) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f446e797000) 0
+ QIterable<QMetaAssociation> (0x0x7f446e78e3c0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f446e870ea0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f446e8cec00) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f446e8fab40) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f446e5426c0) 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 (0x0x7f446e5471c0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f446e542600) 0
+ primary-for QIODevice (0x0x7f446e5471c0)
+ QIODeviceBase (0x0x7f446e542660) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f446e542a20) 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 (0x0x7f446e932f70) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f446e547230) 0
+ primary-for QBuffer (0x0x7f446e932f70)
+ QObject (0x0x7f446e542960) 0
+ primary-for QIODevice (0x0x7f446e547230)
+ QIODeviceBase (0x0x7f446e5429c0) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f446e542c60) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f446e542c00) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f446e542de0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f446e542d80) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f446e5ed540) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f446e6fd300) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f446e6fd2a0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f446e6fd660) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f446e388c60) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f446e3d2ea0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f446e3d2f00) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f446e3d2e40) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f446e47b180) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f446e47b9c0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f446e525ba0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f446e1aa3c0) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f446e1aa420) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f446e1aa600) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f446e236300) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f446e2fde40) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f446df95000) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f446df950c0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f446e0af960) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f446e0e6ea0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f446e0e6f00) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f446e0e6e40) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f446ddf64e0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f446ddf6540) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f446ddf6480) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f446dc0b5a0) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f446dc0b540) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f446dcc9d80) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f446dd2e720) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f446d95e180) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f446d95e360) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f446da02d80) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f446da8c660) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f446da8c6c0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f446da8c720) 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 (0x0x7f446da8c600) 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 (0x0x7f446da83d68) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f446dae90c0) 0
+ primary-for QTimerEvent (0x0x7f446da83d68)
+
+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 (0x0x7f446da83dd0) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f446dae95a0) 0
+ primary-for QChildEvent (0x0x7f446da83dd0)
+
+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 (0x0x7f446da83e38) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f446dae99c0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f446da83e38)
+
+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 (0x0x7f446da83ea0) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f446dae9c60) 0
+ primary-for QDeferredDeleteEvent (0x0x7f446da83ea0)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f446db24000) 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 (0x0x7f446da83f08) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f446dae9f60) 0
+ primary-for QCoreApplication (0x0x7f446da83f08)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f446db241e0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f446db24300) 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 (0x0x7f446da83f70) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f446d747000) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f446da83f70)
+ QObject (0x0x7f446db242a0) 0
+ primary-for QAbstractItemModel (0x0x7f446d747000)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f446db24480) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f446db245a0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f446db248a0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f446d84f9c0) 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 (0x0x7f446d85b208) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f446d7f4770) 0
+ primary-for QFileDevice (0x0x7f446d85b208)
+ QObject (0x0x7f446d84f900) 0
+ primary-for QIODevice (0x0x7f446d7f4770)
+ QIODeviceBase (0x0x7f446d84f960) 0 empty
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f446d8b7540) 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 (0x0x7f446d85b618) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f446d85b680) 0
+ primary-for QFile (0x0x7f446d85b618)
+ QIODevice (0x0x7f446d868700) 0
+ primary-for QFileDevice (0x0x7f446d85b680)
+ QObject (0x0x7f446d8b7480) 0
+ primary-for QIODevice (0x0x7f446d868700)
+ QIODeviceBase (0x0x7f446d8b74e0) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f446d8b77e0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f446d58b240) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f446d6444e0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f446d6448a0) 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 (0x0x7f446d71e270) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f446d35f000) 0 nearly-empty
+ primary-for QException (0x0x7f446d71e270)
+
+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 (0x0x7f446d71e2d8) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f446d71e340) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f446d71e2d8)
+ std::exception (0x0x7f446d35f060) 0 nearly-empty
+ primary-for QException (0x0x7f446d71e340)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f446d35fea0) 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 (0x0x7f446d35ff00) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f446d3a9180) 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 (0x0x7f446d39f548) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f446d3a9120) 0
+ primary-for QFileSelector (0x0x7f446d39f548)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f446d3a9360) 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 (0x0x7f446d39f5b0) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f446d3a9300) 0
+ primary-for QFileSystemWatcher (0x0x7f446d39f5b0)
+
+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 (0x0x7f446d3a94e0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f446d3a96c0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f446d39f680) 0
+ QBasicMutex (0x0x7f446d420420) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f446d420840) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f446d420e40) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f446d491480) 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 (0x0x7f446d1c2120) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f446d1f4b40) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f446d1fd8f0) 0
+ std::__mutex_base (0x0x7f446d1f4ba0) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f446d1f4d80) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f446d1f4de0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f446d1f4e40) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f446d224840) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f446d1fd958) 0
+ std::__recursive_mutex_base (0x0x7f446d2248a0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f446d6b2f50) 0
+ std::__mutex_base (0x0x7f446d224c60) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f446d224cc0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f446d6b2ee0) 0
+ std::__recursive_mutex_base (0x0x7f446d25f0c0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f446d25f120) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f446d25ff00) 0
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f446d297180) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7f446d2e70c0) 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 (0x0x7f446d2e7120) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f446d2e7060) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f446d0c8360) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f446d0c8720) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f446d0c8780) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f446cd76d20) 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 (0x0x7f446d0fbb60) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f446d0fbbc8) 0
+ primary-for std::future_error (0x0x7f446d0fbb60)
+ std::exception (0x0x7f446cdb5420) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f446d0fbbc8)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f446cdb5b40) 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 (0x0x7f446cdb5ae0) 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 (0x0x7f446cf265a0) 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 (0x0x7f446cf283a8) 0
+ std::__at_thread_exit_elt (0x0x7f446cf26660) 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 (0x0x7f446cdb5cc0) 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 (0x0x7f446cdb5a80) 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 (0x0x7f446c7dc7b8) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f446c82a360) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f446c7dc7b8)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f446c82ac00) 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 (0x0x7f446c7dcaf8) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f446c82aba0) 0
+ primary-for QThread (0x0x7f446c7dcaf8)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f446c867000) 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 (0x0x7f446c7dcb60) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f446c82af60) 0
+ primary-for QThreadPool (0x0x7f446c7dcb60)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f446c627720) 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 (0x0x7f446c5f57b8) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f446c6276c0) 0
+ primary-for QFutureWatcherBase (0x0x7f446c5f57b8)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f446c627c60) 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 (0x0x7f446c5f59c0) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f446c5f5a28) 0
+ primary-for QIdentityProxyModel (0x0x7f446c5f59c0)
+ QAbstractItemModel (0x0x7f446c5f5a90) 0
+ primary-for QAbstractProxyModel (0x0x7f446c5f5a28)
+ QObject (0x0x7f446c627c00) 0
+ primary-for QAbstractItemModel (0x0x7f446c5f5a90)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f446c627de0) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f446c6b49c0) 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 (0x0x7f446c6ba820) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f446c6b4960) 0
+ primary-for QItemSelectionModel (0x0x7f446c6ba820)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f446c6bad00) 0
+ QList<QItemSelectionRange> (0x0x7f446c6bad68) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f446c6badd0) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f446c7103c0) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f446c3a60c0) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f446c3a65a0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f446c4007e0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f446c400840) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f446c400780) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f446c4ad240) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f446c4ad2a0) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f446c2427e0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f446c242840) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f446c242780) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f446c2f8360) 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 (0x0x7f446c2eaea0) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f446c2f8300) 0
+ primary-for QLibrary (0x0x7f446c2eaea0)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f446c2f8960) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f446c2f8900) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f446c010120) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f446c0668a0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f446c066960) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f446c0e5000) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f446c1336c0) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f446bd7fcc0) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f446bdf34e0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f446bdf3720) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f446bdf36c0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f446be3d600) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f446bedb060) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f446bf2a900) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f446bf2a9c0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f446bf2a960) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f446bba8c00) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f446bba8ba0) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f446bbee960) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f446bbee900) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f446bc19000) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f446bbee9c0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f446bc37e40) 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 (0x0x7f446bc43958) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f446bc37de0) 0
+ primary-for QMimeData (0x0x7f446bc43958)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f446bc37ba0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f446bcca9c0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f446bccaa80) 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 (0x0x7f446bccf7b8) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f446bccaa20) 0
+ primary-for QObjectCleanupHandler (0x0x7f446bccf7b8)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f446bccab40) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f446bd27780) 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 (0x0x7f446bd32208) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f446bd32270) 0
+ primary-for QParallelAnimationGroup (0x0x7f446bd32208)
+ QAbstractAnimation (0x0x7f446bd322d8) 0
+ primary-for QAnimationGroup (0x0x7f446bd32270)
+ QObject (0x0x7f446bd27720) 0
+ primary-for QAbstractAnimation (0x0x7f446bd322d8)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f446bd27960) 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 (0x0x7f446bd32340) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f446bd323a8) 0
+ primary-for QPauseAnimation (0x0x7f446bd32340)
+ QObject (0x0x7f446bd27900) 0
+ primary-for QAbstractAnimation (0x0x7f446bd323a8)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f446b95e480) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f446b95e4e0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f446b97df00) 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 (0x0x7f446b984f70) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f446b97dea0) 0
+ primary-for QPluginLoader (0x0x7f446b984f70)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f446b9a7000) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f446ba0c720) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f446ba0c780) 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 (0x0x7f446ba1a000) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f446ba18070) 0
+ primary-for QProcess (0x0x7f446ba1a000)
+ QObject (0x0x7f446ba0c660) 0
+ primary-for QIODevice (0x0x7f446ba18070)
+ QIODeviceBase (0x0x7f446ba0c6c0) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f446ba55540) 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 (0x0x7f446ba1a068) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f446ba1a0d0) 0
+ primary-for QVariantAnimation (0x0x7f446ba1a068)
+ QObject (0x0x7f446ba554e0) 0
+ primary-for QAbstractAnimation (0x0x7f446ba1a0d0)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f446ba55780) 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 (0x0x7f446ba1a1a0) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f446ba1a208) 0
+ primary-for QPropertyAnimation (0x0x7f446ba1a1a0)
+ QAbstractAnimation (0x0x7f446ba1a270) 0
+ primary-for QVariantAnimation (0x0x7f446ba1a208)
+ QObject (0x0x7f446ba55720) 0
+ primary-for QAbstractAnimation (0x0x7f446ba1a270)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f446bae4ea0) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f446b7fd360) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f446b7fd300) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f446b5b4ae0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f446b3d4a20) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f446b3d49c0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f446b42df08) 0
+ QRandomGenerator (0x0x7f446b450cc0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f446b475900) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f446b475b40) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f446b4e2060) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f446b4e2540) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f446b534f60) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f446b1b3780) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f446b28b5a0) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f446af6b120) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f446af6b420) 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 (0x0x7f446b2fd1a0) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f446b2fd208) 0
+ primary-for QSaveFile (0x0x7f446b2fd1a0)
+ QIODevice (0x0x7f446b301230) 0
+ primary-for QFileDevice (0x0x7f446b2fd208)
+ QObject (0x0x7f446af6b360) 0
+ primary-for QIODevice (0x0x7f446b301230)
+ QIODeviceBase (0x0x7f446af6b3c0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f446af6ba20) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f446aff1240) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f446b039f00) 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 (0x0x7f446b04ed68) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f446b04edd0) 0
+ primary-for QSequentialAnimationGroup (0x0x7f446b04ed68)
+ QAbstractAnimation (0x0x7f446b04ee38) 0
+ primary-for QAnimationGroup (0x0x7f446b04edd0)
+ QObject (0x0x7f446b039ea0) 0
+ primary-for QAbstractAnimation (0x0x7f446b04ee38)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f446b04ef70) 0
+ QIterator<QMetaSequence> (0x0x7f446b04eea0) 0
+ QBaseIterator<QMetaSequence> (0x0x7f446b0662a0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f446b09a068) 0
+ QConstIterator<QMetaSequence> (0x0x7f446b09a0d0) 0
+ QBaseIterator<QMetaSequence> (0x0x7f446b066840) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f446b09a138) 0
+ QIterable<QMetaSequence> (0x0x7f446b066d80) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f446ad8e360) 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 (0x0x7f446ad8b5b0) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f446ad8e300) 0
+ primary-for QSettings (0x0x7f446ad8b5b0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f446ad8e780) 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 (0x0x7f446ad8b618) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f446ad8e720) 0
+ primary-for QSharedMemory (0x0x7f446ad8b618)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f446ad8e960) 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 (0x0x7f446ad8b680) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f446ad8e900) 0
+ primary-for QSignalMapper (0x0x7f446ad8b680)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f4469d823c0) 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 (0x0x7f4469d4e4e0) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f4469d82360) 0
+ primary-for QSocketNotifier (0x0x7f4469d4e4e0)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f4469d82540) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f4469d82c00) 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 (0x0x7f4469d4e548) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f4469d4e5b0) 0
+ primary-for QSortFilterProxyModel (0x0x7f4469d4e548)
+ QAbstractItemModel (0x0x7f4469d4e618) 0
+ primary-for QAbstractProxyModel (0x0x7f4469d4e5b0)
+ QObject (0x0x7f4469d82ba0) 0
+ primary-for QAbstractItemModel (0x0x7f4469d4e618)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f4469dd4000) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f4469dd4900) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f4469e872a0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f4469ae9ae0) 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 (0x0x7f4469afa138) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f4469afa1a0) 0
+ primary-for QStringListModel (0x0x7f4469afa138)
+ QAbstractItemModel (0x0x7f4469afa208) 0
+ primary-for QAbstractListModel (0x0x7f4469afa1a0)
+ QObject (0x0x7f4469ae9a80) 0
+ primary-for QAbstractItemModel (0x0x7f4469afa208)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f4469ae9ba0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f4469ae9c60) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f4469ae9de0) 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 (0x0x7f4469afa270) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f4469afa2d8) 0
+ primary-for QTemporaryFile (0x0x7f4469afa270)
+ QFileDevice (0x0x7f4469afa340) 0
+ primary-for QFile (0x0x7f4469afa2d8)
+ QIODevice (0x0x7f4469aef620) 0
+ primary-for QFileDevice (0x0x7f4469afa340)
+ QObject (0x0x7f4469ae9d20) 0
+ primary-for QIODevice (0x0x7f4469aef620)
+ QIODeviceBase (0x0x7f4469ae9d80) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f4469b54060) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f4469b54600) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f4469b54cc0) 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 (0x0x7f4469afa4e0) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f4469b54c60) 0
+ primary-for QTimeLine (0x0x7f4469afa4e0)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f4469b54ea0) 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 (0x0x7f4469afa548) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f4469b54e40) 0
+ primary-for QTimer (0x0x7f4469afa548)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f4469bcbcc0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f4469bcbc60) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f4469c57d20) 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 (0x0x7f4469c66270) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f4469c57cc0) 0
+ primary-for QTranslator (0x0x7f4469c66270)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f4469c57f00) 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 (0x0x7f4469c662d8) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f4469c66340) 0
+ primary-for QTransposeProxyModel (0x0x7f4469c662d8)
+ QAbstractItemModel (0x0x7f4469c663a8) 0
+ primary-for QAbstractProxyModel (0x0x7f4469c66340)
+ QObject (0x0x7f4469c57ea0) 0
+ primary-for QAbstractItemModel (0x0x7f4469c663a8)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f4469c950c0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f44699528a0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f44699529c0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f446999a840) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f44699f4270) 0
+ QList<QXmlStreamAttribute> (0x0x7f44699f42d8) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f44699f4340) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f44699e5960) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f4469a5a1e0) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f4469a7d8a0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f4469aa7f00) 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 (0x0x7f44696f56c0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f44696f5720) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f44696f5cc0) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7f44696f5ea0) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f4469755960) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f4469801660) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f4469801600) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f44698936c0) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f4473a17340) 0
+ QList<QPoint> (0x0x7f4473a173a8) 0
+ QListSpecialMethods<QPoint> (0x0x7f4473a172d8) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f4473d43d20) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f4473d6a270) 0
+ QList<QPointF> (0x0x7f4473d6a2d8) 0
+ QListSpecialMethods<QPointF> (0x0x7f4473d6a340) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f44723e2a20) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f447155ce40) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f447155cde0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f446e93e960) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f446e93e8a0) 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 (0x0x7f4473c4d820) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f446e2fd2a0) 0
+ primary-for QImage (0x0x7f4473c4d820)
+
+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 (0x0x7f447396c270) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f446d6440c0) 0
+ primary-for QPixmap (0x0x7f447396c270)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f446c6b4840) 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 (0x0x7f446bb89cc0) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f446bbee7e0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f446b2dd1e0) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f44699c68a0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f446bb0f360) 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 (0x0x7f4473a42888) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f446bb0f300) 0
+ primary-for QScreen (0x0x7f4473a42888)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f446bb0f540) 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 (0x0x7f4473a428f0) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f446bb0f4e0) 0
+ primary-for QInputDevice (0x0x7f4473a428f0)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f446bb0fe40) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f446e8ef7e0) 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 (0x0x7f4473a53958) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f4473a539c0) 0
+ primary-for QPointingDevice (0x0x7f4473a53958)
+ QObject (0x0x7f446e8ef780) 0
+ primary-for QInputDevice (0x0x7f4473a539c0)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f446e8efe40) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f4472fcbc60) 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 (0x0x7f4473a663a8) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f44728e3c00) 0
+ primary-for QInputEvent (0x0x7f4473a663a8)
+
+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 (0x0x7f4473a66410) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f4473a66478) 0
+ primary-for QPointerEvent (0x0x7f4473a66410)
+ QEvent (0x0x7f44724ae120) 0
+ primary-for QInputEvent (0x0x7f4473a66478)
+
+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 (0x0x7f4473a66c30) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f4473a66820) 0
+ primary-for QSinglePointEvent (0x0x7f4473a66c30)
+ QInputEvent (0x0x7f4473a66d00) 0
+ primary-for QPointerEvent (0x0x7f4473a66820)
+ QEvent (0x0x7f4471b36000) 0
+ primary-for QInputEvent (0x0x7f4473a66d00)
+
+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 (0x0x7f4473a66d68) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f4473a66dd0) 0
+ primary-for QEnterEvent (0x0x7f4473a66d68)
+ QPointerEvent (0x0x7f4473a66e38) 0
+ primary-for QSinglePointEvent (0x0x7f4473a66dd0)
+ QInputEvent (0x0x7f4473a66ea0) 0
+ primary-for QPointerEvent (0x0x7f4473a66e38)
+ QEvent (0x0x7f4471b364e0) 0
+ primary-for QInputEvent (0x0x7f4473a66ea0)
+
+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 (0x0x7f4473a66f08) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f4473a66f70) 0
+ primary-for QMouseEvent (0x0x7f4473a66f08)
+ QPointerEvent (0x0x7f4473a69000) 0
+ primary-for QSinglePointEvent (0x0x7f4473a66f70)
+ QInputEvent (0x0x7f4473a69068) 0
+ primary-for QPointerEvent (0x0x7f4473a69000)
+ QEvent (0x0x7f4471b36c60) 0
+ primary-for QInputEvent (0x0x7f4473a69068)
+
+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 (0x0x7f4473a690d0) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f4473a69138) 0
+ primary-for QHoverEvent (0x0x7f4473a690d0)
+ QPointerEvent (0x0x7f4473a691a0) 0
+ primary-for QSinglePointEvent (0x0x7f4473a69138)
+ QInputEvent (0x0x7f4473a69208) 0
+ primary-for QPointerEvent (0x0x7f4473a691a0)
+ QEvent (0x0x7f44714df240) 0
+ primary-for QInputEvent (0x0x7f4473a69208)
+
+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 (0x0x7f4473a69270) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f4473a692d8) 0
+ primary-for QWheelEvent (0x0x7f4473a69270)
+ QPointerEvent (0x0x7f4473a693a8) 0
+ primary-for QSinglePointEvent (0x0x7f4473a692d8)
+ QInputEvent (0x0x7f4473a69410) 0
+ primary-for QPointerEvent (0x0x7f4473a693a8)
+ QEvent (0x0x7f44714df660) 0
+ primary-for QInputEvent (0x0x7f4473a69410)
+
+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 (0x0x7f4473a69478) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f4473a694e0) 0
+ primary-for QTabletEvent (0x0x7f4473a69478)
+ QPointerEvent (0x0x7f4473a69548) 0
+ primary-for QSinglePointEvent (0x0x7f4473a694e0)
+ QInputEvent (0x0x7f4473a695b0) 0
+ primary-for QPointerEvent (0x0x7f4473a69548)
+ QEvent (0x0x7f44714dfb40) 0
+ primary-for QInputEvent (0x0x7f4473a695b0)
+
+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 (0x0x7f4473a69618) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f4473a69680) 0
+ primary-for QNativeGestureEvent (0x0x7f4473a69618)
+ QPointerEvent (0x0x7f4473a696e8) 0
+ primary-for QSinglePointEvent (0x0x7f4473a69680)
+ QInputEvent (0x0x7f4473a69750) 0
+ primary-for QPointerEvent (0x0x7f4473a696e8)
+ QEvent (0x0x7f447153a420) 0
+ primary-for QInputEvent (0x0x7f4473a69750)
+
+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 (0x0x7f4473a697b8) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f4473a69820) 0
+ primary-for QKeyEvent (0x0x7f4473a697b8)
+ QEvent (0x0x7f447153a900) 0
+ primary-for QInputEvent (0x0x7f4473a69820)
+
+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 (0x0x7f4473a69888) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f447153af00) 0
+ primary-for QFocusEvent (0x0x7f4473a69888)
+
+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 (0x0x7f4473a698f0) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f4470c982a0) 0
+ primary-for QPaintEvent (0x0x7f4473a698f0)
+
+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 (0x0x7f4473a699c0) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f4470c985a0) 0
+ primary-for QMoveEvent (0x0x7f4473a699c0)
+
+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 (0x0x7f4473a69a28) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f4470c98900) 0
+ primary-for QExposeEvent (0x0x7f4473a69a28)
+
+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 (0x0x7f4473a69a90) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f4470c98ba0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f4473a69a90)
+
+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 (0x0x7f4473a69af8) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f4470c98ea0) 0
+ primary-for QResizeEvent (0x0x7f4473a69af8)
+
+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 (0x0x7f4473a69b60) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f44701dc240) 0
+ primary-for QCloseEvent (0x0x7f4473a69b60)
+
+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 (0x0x7f4473a69bc8) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f44701dc2a0) 0
+ primary-for QIconDragEvent (0x0x7f4473a69bc8)
+
+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 (0x0x7f4473a69c30) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f44701dc300) 0
+ primary-for QShowEvent (0x0x7f4473a69c30)
+
+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 (0x0x7f4473a69d00) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f44701dc360) 0
+ primary-for QHideEvent (0x0x7f4473a69d00)
+
+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 (0x0x7f4473a69d68) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f4473a69dd0) 0
+ primary-for QContextMenuEvent (0x0x7f4473a69d68)
+ QEvent (0x0x7f44701dc3c0) 0
+ primary-for QInputEvent (0x0x7f4473a69dd0)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f44701dc960) 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 (0x0x7f4473a69e38) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f44701dc900) 0
+ primary-for QInputMethodEvent (0x0x7f4473a69e38)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f446eea9180) 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 (0x0x7f4473a76138) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f446eea9120) 0
+ primary-for QInputMethodQueryEvent (0x0x7f4473a76138)
+
+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 (0x0x7f4473a7d3a8) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f446e15b2a0) 0
+ primary-for QDropEvent (0x0x7f4473a7d3a8)
+
+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 (0x0x7f4473a7d478) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f4473a7d4e0) 0
+ primary-for QDragMoveEvent (0x0x7f4473a7d478)
+ QEvent (0x0x7f446e15b9c0) 0
+ primary-for QDropEvent (0x0x7f4473a7d4e0)
+
+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 (0x0x7f4473a7d548) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f4473a7d5b0) 0
+ primary-for QDragEnterEvent (0x0x7f4473a7d548)
+ QDropEvent (0x0x7f4473a7d618) 0
+ primary-for QDragMoveEvent (0x0x7f4473a7d5b0)
+ QEvent (0x0x7f446e15be40) 0
+ primary-for QDropEvent (0x0x7f4473a7d618)
+
+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 (0x0x7f4473a7d680) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f446e15bea0) 0
+ primary-for QDragLeaveEvent (0x0x7f4473a7d680)
+
+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 (0x0x7f4473a7d6e8) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f446e15bf00) 0
+ primary-for QHelpEvent (0x0x7f4473a7d6e8)
+
+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 (0x0x7f4473a7d750) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f446e085420) 0
+ primary-for QStatusTipEvent (0x0x7f4473a7d750)
+
+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 (0x0x7f4473a7d820) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f446e0856c0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f4473a7d820)
+
+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 (0x0x7f4473a7d888) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f446e085960) 0
+ primary-for QActionEvent (0x0x7f4473a7d888)
+
+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 (0x0x7f4473a7d8f0) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f446e085cc0) 0
+ primary-for QFileOpenEvent (0x0x7f4473a7d8f0)
+
+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 (0x0x7f4473a7d958) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f446dd50000) 0
+ primary-for QToolBarChangeEvent (0x0x7f4473a7d958)
+
+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 (0x0x7f4473a7d9c0) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f446dd50300) 0
+ primary-for QShortcutEvent (0x0x7f4473a7d9c0)
+
+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 (0x0x7f4473a7da28) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f446dd50660) 0
+ primary-for QWindowStateChangeEvent (0x0x7f4473a7da28)
+
+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 (0x0x7f4473a7da90) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f4473a7daf8) 0
+ primary-for QTouchEvent (0x0x7f4473a7da90)
+ QInputEvent (0x0x7f4473a7db60) 0
+ primary-for QPointerEvent (0x0x7f4473a7daf8)
+ QEvent (0x0x7f446dd50960) 0
+ primary-for QInputEvent (0x0x7f4473a7db60)
+
+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 (0x0x7f4473a7dc30) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f446dd50cc0) 0
+ primary-for QScrollPrepareEvent (0x0x7f4473a7dc30)
+
+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 (0x0x7f4473a7dc98) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f446dc1f120) 0
+ primary-for QScrollEvent (0x0x7f4473a7dc98)
+
+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 (0x0x7f4473a7dd00) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f446dc1f4e0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f4473a7dd00)
+
+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 (0x0x7f4473a7dd68) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f446dc1f840) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f4473a7dd68)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f446dc1fb40) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f446c306ba0) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f446c306d80) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f446b25ac60) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f4469560360) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f446ef02ea0) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f4475b21120) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f4475b210c0) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f447377d208) 0
+ QGradient (0x0x7f4475b21a80) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f447377d270) 0
+ QGradient (0x0x7f44712b90c0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f447377d2d8) 0
+ QGradient (0x0x7f44712b91e0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f44712b92a0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f446e8a7360) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f446e8a7300) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f446db610c0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f446d83fd80) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f4473797b60) 0
+ QTextFormat (0x0x7f4469845420) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f447379eaf8) 0
+ QTextFormat (0x0x7f446e33c720) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f44737a1a28) 0
+ QTextFormat (0x0x7f446b675c60) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f44737a7820) 0
+ QTextCharFormat (0x0x7f44737a78f0) 0
+ QTextFormat (0x0x7f44694beb40) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f44737ad820) 0
+ QTextFormat (0x0x7f44695359c0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f44737b4750) 0
+ QTextFrameFormat (0x0x7f44737b47b8) 0
+ QTextFormat (0x0x7f446a6a0de0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f44737b8750) 0
+ QTextCharFormat (0x0x7f44737b8820) 0
+ QTextFormat (0x0x7f446a94a0c0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f4472c3e600) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f44698b8c60) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f44694e70c0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f44694e7060) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f44692e8180) 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 (0x0x7f44692e8600) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f44692e88a0) 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 (0x0x7f446f335d00) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f44692e8840) 0
+ primary-for QTextDocument (0x0x7f446f335d00)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f446931c0c0) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f446935d420) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f446935d480) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f446935d4e0) 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 (0x0x7f446d56d1a0) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f446935d3c0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f446d56d1a0)
+
+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 (0x0x7f44693ada80) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f44693adcc0) 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 (0x0x7f44693add20) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f44693adc60) 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 (0x0x7f44693ca5a0) 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 (0x0x7f44693ca900) 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 (0x0x7f44693ca960) 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 (0x0x7f44693ca9c0) 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 (0x0x7f44693caa20) 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 (0x0x7f44693caa80) 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 (0x0x7f44693caae0) 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 (0x0x7f44693caba0) 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 (0x0x7f44693cac00) 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 (0x0x7f446c325888) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f44693f2180) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f446c325888)
+
+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 (0x0x7f446c3258f0) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f44693f2540) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f446c3258f0)
+
+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 (0x0x7f446bffc0d0) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f446bffc138) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f446bffc0d0)
+ QAccessibleEvent (0x0x7f44693f2960) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f446bffc138)
+
+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 (0x0x7f446bffc5b0) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f446bffc618) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f446bffc5b0)
+ QAccessibleEvent (0x0x7f44693f2de0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f446bffc618)
+
+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 (0x0x7f446bffcf70) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f446c011000) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f446bffcf70)
+ QAccessibleEvent (0x0x7f4469405240) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f446c011000)
+
+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 (0x0x7f446c011618) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f446c011680) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f446c011618)
+ QAccessibleEvent (0x0x7f4469405660) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f446c011680)
+
+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 (0x0x7f446c011e38) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f4469405ae0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f446c011e38)
+
+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 (0x0x7f446c011ea0) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f4469405f00) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f446c011ea0)
+
+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 (0x0x7f44694187e0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f4469418a80) 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 (0x0x7f446c05d340) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f4469418a20) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f446c05d340)
+
+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 (0x0x7f446c05d3a8) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f4469418b40) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f446c05d3a8)
+
+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 (0x0x7f446c05dd00) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f446c05dd68) 0
+ primary-for QAccessibleApplication (0x0x7f446c05dd00)
+ QAccessibleInterface (0x0x7f4469418ba0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f446c05dd68)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f4469418c60) 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 (0x0x7f446c0a4618) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f4469418c00) 0
+ primary-for QAccessiblePlugin (0x0x7f446c0a4618)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f4469418d80) 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 (0x0x7f446c0a4680) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f4469418d20) 0
+ primary-for QAction (0x0x7f446c0a4680)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f446943c6c0) 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 (0x0x7f446c0c10d0) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f446943c660) 0
+ primary-for QActionGroup (0x0x7f446c0c10d0)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f446943c960) 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 (0x0x7f446945f1e0) 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 (0x0x7f446c10e0d0) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f446c10e138) 0
+ primary-for QBitmap (0x0x7f446c10e0d0)
+ QPaintDevice (0x0x7f446945f4e0) 0
+ primary-for QPixmap (0x0x7f446c10e138)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f4469476de0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f44694a5000) 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 (0x0x7f446948c4d0) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f446949af00) 0
+ primary-for QWindow (0x0x7f446948c4d0)
+ QSurface (0x0x7f446949af60) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f44694a5840) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f44694a5960) 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 (0x0x7f446988caf8) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f44694a5900) 0
+ primary-for QClipboard (0x0x7f446988caf8)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f44694a5a80) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f44690f1a20) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f44691246c0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f4469124780) 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 (0x0x7f44691254e0) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f4469124720) 0
+ primary-for QDrag (0x0x7f44691254e0)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f4469124960) 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 (0x0x7f4469125548) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f44691255b0) 0
+ primary-for QFileSystemModel (0x0x7f4469125548)
+ QObject (0x0x7f4469124900) 0
+ primary-for QAbstractItemModel (0x0x7f44691255b0)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f4469124f60) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f446915a8a0) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f4469173300) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f44691bd120) 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 (0x0x7f446918cdd0) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f44691bd0c0) 0
+ primary-for QGenericPlugin (0x0x7f446918cdd0)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f44691bd1e0) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f44691bd2a0) 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 (0x0x7f446918ce38) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f44691bd240) 0
+ primary-for QInputMethod (0x0x7f446918ce38)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f44691bd540) 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 (0x0x7f446918cea0) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f446918cf08) 0
+ primary-for QGuiApplication (0x0x7f446918cea0)
+ QObject (0x0x7f44691bd4e0) 0
+ primary-for QCoreApplication (0x0x7f446918cf08)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f44691bd7e0) 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 (0x0x7f44691bd780) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f44691bd8a0) 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 (0x0x7f446918cf70) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f44691bd840) 0
+ primary-for QIconEnginePlugin (0x0x7f446918cf70)
+
+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 (0x0x7f44691bd960) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f44691bdba0) 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 (0x0x7f446918c888) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f44691bdb40) 0
+ primary-for QImageIOPlugin (0x0x7f446918c888)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f44691bdf60) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f4469205060) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f4469205120) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f446922be40) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f446927f300) 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 (0x0x7f44692697b8) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f446927f2a0) 0
+ primary-for QMovie (0x0x7f44692697b8)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f446927f6c0) 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 (0x0x7f446923cd20) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f446927f600) 0
+ primary-for QOffscreenSurface (0x0x7f446923cd20)
+ QSurface (0x0x7f446927f660) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f446927f900) 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 (0x0x7f4469269820) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f446927f8a0) 0
+ primary-for QOpenGLContextGroup (0x0x7f4469269820)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f446927fae0) 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 (0x0x7f4469269888) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f446927fa80) 0
+ primary-for QOpenGLContext (0x0x7f4469269888)
+
+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 (0x0x7f446927fc60) 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 (0x0x7f446927fcc0) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f446927fd20) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f4466ccb300) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f4466ccb2a0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f4469269c98) 0
+ QOpenGLFunctions (0x0x7f4466d3d0c0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f4466d3d420) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f4469269d00) 0
+ QOpenGLFunctionsPrivate (0x0x7f4466d3d3c0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f4466e18120) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f4466e60ba0) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f4466eb3840) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f4466eb37e0) 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 (0x0x7f4466b1e8f0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f4466b1a960) 0
+ primary-for QPagedPaintDevice (0x0x7f4466b1e8f0)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f4466b1aae0) 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 (0x0x7f4466e6fe70) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f4466e6fee0) 0
+ primary-for QPaintDeviceWindow (0x0x7f4466e6fe70)
+ QObject (0x0x7f4466b1a9c0) 0
+ primary-for QWindow (0x0x7f4466e6fee0)
+ QSurface (0x0x7f4466b1aa20) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f4466b1aa80) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f4466b1acc0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f4466b1ac60) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f4466cbd840) 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 (0x0x7f44668e7060) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f44668e7660) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f4466945120) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f44669450c0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f446699e420) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f446699ec00) 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 (0x0x7f4466975850) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f446699eb40) 0
+ primary-for QPdfWriter (0x0x7f4466975850)
+ QPagedPaintDevice (0x0x7f446699c750) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f446699eba0) 16
+ primary-for QPagedPaintDevice (0x0x7f446699c750)
+
+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 (0x0x7f446699c7b8) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f446699ede0) 0
+ primary-for QPicture (0x0x7f446699c7b8)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f44669ef8a0) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f44669ef840) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f4466a30ae0) 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 (0x0x7f4466a2cd00) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f4466a1d460) 0
+ primary-for QRasterWindow (0x0x7f4466a2cd00)
+ QWindow (0x0x7f4466a1d4d0) 0
+ primary-for QPaintDeviceWindow (0x0x7f4466a1d460)
+ QObject (0x0x7f4466a309c0) 0
+ primary-for QWindow (0x0x7f4466a1d4d0)
+ QSurface (0x0x7f4466a30a20) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f4466a30a80) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f4466a30cc0) 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 (0x0x7f4466a2cdd0) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f4466a30c60) 0
+ primary-for QSessionManager (0x0x7f4466a2cdd0)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f4466a30ea0) 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 (0x0x7f4466a2ce38) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f4466a30e40) 0
+ primary-for QShortcut (0x0x7f4466a2ce38)
+
+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 (0x0x7f4466a603c0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f44666d13c0) 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 (0x0x7f4466a947b8) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f4466a94820) 0
+ primary-for QStandardItemModel (0x0x7f4466a947b8)
+ QObject (0x0x7f44666d1360) 0
+ primary-for QAbstractItemModel (0x0x7f4466a94820)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f44666d1720) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f4466738060) 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 (0x0x7f446672f478) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f4466738000) 0
+ primary-for QStyleHints (0x0x7f446672f478)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f4466738240) 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 (0x0x7f446672f4e0) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f44667381e0) 0
+ primary-for QTextObject (0x0x7f446672f4e0)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f4466738420) 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 (0x0x7f446672f548) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f446672f5b0) 0
+ primary-for QTextBlockGroup (0x0x7f446672f548)
+ QObject (0x0x7f44667383c0) 0
+ primary-for QTextObject (0x0x7f446672f5b0)
+
+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 (0x0x7f44667385a0) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f4466738660) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f44667386c0) 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 (0x0x7f446672f618) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f446672f680) 0
+ primary-for QTextFrame (0x0x7f446672f618)
+ QObject (0x0x7f4466738600) 0
+ primary-for QTextObject (0x0x7f446672f680)
+
+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 (0x0x7f4466780540) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f4466780600) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f44667805a0) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f44667c2e40) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f44667e7cc0) 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 (0x0x7f44667f0820) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f44667e7c60) 0
+ primary-for QSyntaxHighlighter (0x0x7f44667f0820)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f44667e7e40) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f44667e7ea0) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f44667e7f60) 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 (0x0x7f44667f0888) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f44667f08f0) 0
+ primary-for QTextList (0x0x7f44667f0888)
+ QTextObject (0x0x7f44667f0958) 0
+ primary-for QTextBlockGroup (0x0x7f44667f08f0)
+ QObject (0x0x7f44667e7f00) 0
+ primary-for QTextObject (0x0x7f44667f0958)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f4466811360) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f4466811ba0) 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 (0x0x7f44667f09c0) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f44667f0a28) 0
+ primary-for QTextTable (0x0x7f44667f09c0)
+ QTextObject (0x0x7f44667f0a90) 0
+ primary-for QTextFrame (0x0x7f44667f0a28)
+ QObject (0x0x7f4466811b40) 0
+ primary-for QTextObject (0x0x7f44667f0a90)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f4466811f60) 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 (0x0x7f44667f0af8) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f4466811f00) 0
+ primary-for QUndoGroup (0x0x7f44667f0af8)
+
+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 (0x0x7f4466832120) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f44668321e0) 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 (0x0x7f44667f0b60) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f4466832180) 0
+ primary-for QUndoStack (0x0x7f44667f0b60)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f44668323c0) 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 (0x0x7f44667f0bc8) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f4466832360) 0
+ primary-for QValidator (0x0x7f44667f0bc8)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f4466832660) 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 (0x0x7f44667f0c30) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f44667f0c98) 0
+ primary-for QIntValidator (0x0x7f44667f0c30)
+ QObject (0x0x7f4466832600) 0
+ primary-for QValidator (0x0x7f44667f0c98)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f4466832840) 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 (0x0x7f44667f0d00) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f44667f0d68) 0
+ primary-for QDoubleValidator (0x0x7f44667f0d00)
+ QObject (0x0x7f44668327e0) 0
+ primary-for QValidator (0x0x7f44667f0d68)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f4466832c00) 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 (0x0x7f44667f0dd0) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f44667f0e38) 0
+ primary-for QRegularExpressionValidator (0x0x7f44667f0dd0)
+ QObject (0x0x7f4466832ba0) 0
+ primary-for QValidator (0x0x7f44667f0e38)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f4466832d80) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f44668af9c0) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f4466501120) 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 (0x0x7f44664fb9c0) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7f44665010c0) 0
+ primary-for QAbstractNetworkCache (0x0x7f44664fb9c0)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f4466501360) 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 (0x0x7f44664fba28) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7f44668b7850) 0
+ primary-for QAbstractSocket (0x0x7f44664fba28)
+ QObject (0x0x7f44665012a0) 0
+ primary-for QIODevice (0x0x7f44668b7850)
+ QIODeviceBase (0x0x7f4466501300) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f4466556120) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f44665561e0) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f4466595840) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f44665ccea0) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f446661b540) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f4466653d80) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f4466698720) 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 (0x0x7f4466692f08) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7f44666986c0) 0
+ primary-for QDnsLookup (0x0x7f4466692f08)
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f4466698ae0) 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 (0x0x7f4466692f70) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7f44666b1000) 0
+ primary-for QTcpSocket (0x0x7f4466692f70)
+ QIODevice (0x0x7f446668e9a0) 0
+ primary-for QAbstractSocket (0x0x7f44666b1000)
+ QObject (0x0x7f4466698a20) 0
+ primary-for QIODevice (0x0x7f446668e9a0)
+ QIODeviceBase (0x0x7f4466698a80) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f4466698f60) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f4466310e40) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f4466355720) 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 (0x0x7f44663547b8) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7f4466354820) 0
+ primary-for QSslSocket (0x0x7f44663547b8)
+ QAbstractSocket (0x0x7f4466354888) 0
+ primary-for QTcpSocket (0x0x7f4466354820)
+ QIODevice (0x0x7f4466322a80) 0
+ primary-for QAbstractSocket (0x0x7f4466354888)
+ QObject (0x0x7f4466355660) 0
+ primary-for QIODevice (0x0x7f4466322a80)
+ QIODeviceBase (0x0x7f44663556c0) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f4466355900) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f4466355960) 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 (0x0x7f44663548f0) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7f44663558a0) 0
+ primary-for QDtlsClientVerifier (0x0x7f44663548f0)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f4466355b40) 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 (0x0x7f4466354958) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7f4466355ae0) 0
+ primary-for QDtls (0x0x7f4466354958)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f4466355cc0) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f4466355de0) 0
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f44663d3ba0) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f446641ecc0) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f446646d720) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f44664b5060) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f44660ee780) 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 (0x0x7f44660f1410) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7f44660ee720) 0
+ primary-for QHttpMultiPart (0x0x7f44660f1410)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f44660ee960) 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 (0x0x7f44660f1478) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7f44660ee900) 0
+ primary-for QLocalServer (0x0x7f44660f1478)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f4466121060) 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 (0x0x7f44660f1618) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7f4466102230) 0
+ primary-for QLocalSocket (0x0x7f44660f1618)
+ QObject (0x0x7f44660eef60) 0
+ primary-for QIODevice (0x0x7f4466102230)
+ QIODeviceBase (0x0x7f4466121000) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f44661211e0) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f4466196240) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f44661cfba0) 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 (0x0x7f44661db068) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7f44661cfb40) 0
+ primary-for QNetworkAccessManager (0x0x7f44661db068)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f44661cfd20) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f4466231840) 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 (0x0x7f446622cdd0) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7f44662317e0) 0
+ primary-for QNetworkCookieJar (0x0x7f446622cdd0)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f44662319c0) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f446627dd80) 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 (0x0x7f446627fc98) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7f446627fd00) 0
+ primary-for QNetworkDiskCache (0x0x7f446627fc98)
+ QObject (0x0x7f446627dd20) 0
+ primary-for QAbstractNetworkCache (0x0x7f446627fd00)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f446627df00) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f4465ec9480) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f4465f253c0) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f4465f6ba20) 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 (0x0x7f4465fbd3c0) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f4465fbd600) 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 (0x0x7f4465fb67b8) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7f4465fbf1c0) 0
+ primary-for QNetworkReply (0x0x7f4465fb67b8)
+ QObject (0x0x7f4465fbd540) 0
+ primary-for QIODevice (0x0x7f4465fbf1c0)
+ QIODeviceBase (0x0x7f4465fbd5a0) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f4465fbd960) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f4466017480) 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 (0x0x7f44660153a8) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7f4466017420) 0
+ primary-for QTcpServer (0x0x7f44660153a8)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f4466017600) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f4466054d20) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f446609e360) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f4465ce6060) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f4465cfbea0) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f4465d4a600) 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 (0x0x7f4465d42ea0) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7f4465d42f08) 0
+ primary-for QUdpSocket (0x0x7f4465d42ea0)
+ QIODevice (0x0x7f4465ccaaf0) 0
+ primary-for QAbstractSocket (0x0x7f4465d42f08)
+ QObject (0x0x7f4465d4a540) 0
+ primary-for QIODevice (0x0x7f4465ccaaf0)
+ QIODeviceBase (0x0x7f4465d4a5a0) 0 empty
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f4465d4a7e0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f4465d8f9c0) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f4465d8fc60) 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 (0x0x7f4465d73750) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7f4465d8fc00) 0
+ primary-for QJSEngine (0x0x7f4465d73750)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f4465dcc300) 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 (0x0x7f4465dcc4e0) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f4465dfc000) 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 (0x0x7f4465dfc1e0) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=170 base align=8
+QQmlPrivate::RegisterType (0x0x7f4465e21960) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=152 align=8
+ base size=152 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f4465e219c0) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f4465e21a20) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f4465e21a80) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f4465e21ae0) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f4465e21e40) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f4465e21f00) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f4465e21f60) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f4465e52000) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f4465e52060) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7f4465e520c0) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f4465e52120) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f4465e52180) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f4465e521e0) 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 (0x0x7f4465b03180) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f4465b031e0) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f4465b1da20) 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 (0x0x7f4465b24270) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+ QObject (0x0x7f4465b1d9c0) 0
+ primary-for QQmlImageProviderBase (0x0x7f4465b24270)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f4465b1de40) 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 (0x0x7f4465b24410) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7f4465b24478) 0
+ primary-for QQmlEngine (0x0x7f4465b24410)
+ QObject (0x0x7f4465b1dde0) 0
+ primary-for QJSEngine (0x0x7f4465b24478)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f4465b51180) 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 (0x0x7f4465b244e0) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7f4465b24548) 0
+ primary-for QQmlApplicationEngine (0x0x7f4465b244e0)
+ QJSEngine (0x0x7f4465b245b0) 0
+ primary-for QQmlEngine (0x0x7f4465b24548)
+ QObject (0x0x7f4465b51120) 0
+ primary-for QJSEngine (0x0x7f4465b245b0)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f4465b51360) 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 (0x0x7f4465b24618) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7f4465b51300) 0
+ primary-for QQmlComponent (0x0x7f4465b24618)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f4465b519c0) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f4465b51a20) 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 (0x0x7f4465b24680) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7f4465b51960) 0
+ primary-for QQmlContext (0x0x7f4465b24680)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f4465b51cc0) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f4465b51f00) 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 (0x0x7f4465b246e8) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7f4465b51ea0) 0
+ primary-for QQmlExpression (0x0x7f4465b246e8)
+
+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 (0x0x7f4465ba50c0) 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 (0x0x7f4465b24750) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7f4465ba5120) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f4465b24750)
+
+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 (0x0x7f4465ba5180) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f4465ba5720) 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 (0x0x7f4465b98070) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7f4465ba5660) 0
+ primary-for QQmlExtensionPlugin (0x0x7f4465b98070)
+ QQmlExtensionInterface (0x0x7f4465b247b8) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+ QQmlTypesExtensionInterface (0x0x7f4465ba56c0) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f4465b247b8)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f4465ba5960) 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 (0x0x7f4465b980e0) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+ QObject (0x0x7f4465ba58a0) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f4465b980e0)
+ QQmlEngineExtensionInterface (0x0x7f4465ba5900) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f4465ba5a20) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f4465ba5ae0) 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 (0x0x7f4465b24888) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7f4465ba5a80) 0
+ primary-for QQmlFileSelector (0x0x7f4465b24888)
+
+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 (0x0x7f4465ba5c60) 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 (0x0x7f4465ba5cc0) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f4465b248f0) 0
+ QDebug (0x0x7f4465b24958) 0
+ QIODeviceBase (0x0x7f4465ba5d20) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f4465c33420) 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 (0x0x7f4465c33480) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f4465c334e0) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f4465c6f720) 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 (0x0x7f4465c6ae38) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7f4465c6f6c0) 0
+ primary-for QQmlPropertyMap (0x0x7f4465c6ae38)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f4465c6f900) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f4465c6fd80) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f44658f8d80) 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 (0x0x7f44658fe3a8) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f44658f8d20) 0
+ primary-for QOpenGLDebugLogger (0x0x7f44658fe3a8)
+
+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 (0x0x7f4465964120) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f44659643c0) 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 (0x0x7f44658fe410) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f4465964420) 0
+ primary-for QOpenGLPaintDevice (0x0x7f44658fe410)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f4465964660) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f44659b5d20) 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 (0x0x7f44659bcdd0) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f44659b5cc0) 0
+ primary-for QOpenGLShader (0x0x7f44659bcdd0)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f44659d8240) 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 (0x0x7f44659bcf70) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f44659d81e0) 0
+ primary-for QOpenGLShaderProgram (0x0x7f44659bcf70)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f44659d83c0) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f4465a7e4e0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f4465a7e720) 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 (0x0x7f4465a82138) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f4465a7e6c0) 0
+ primary-for QOpenGLTimerQuery (0x0x7f4465a82138)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f4465a7e900) 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 (0x0x7f4465a821a0) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f4465a7e8a0) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f4465a821a0)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f4465a7ea80) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f4465732ae0) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f4465732cc0) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f4465732d20) 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 (0x0x7f4465732f00) 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 (0x0x7f4465750120) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f4465729a28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657500c0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f4465750480) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f4465729a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465750420) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f44657507e0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f4465729af8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465750780) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f4465750b40) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f4465729b60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465750ae0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f4465750ea0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f4465729bc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465750e40) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f4465775240) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f4465729c30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657751e0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f44657755a0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f4465729c98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465775540) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f4465775900) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f4465729d00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657758a0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f4465775c60) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f4465729d68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465775c00) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f44657a4000) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f4465729dd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465775f60) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f44657a4360) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f4465729e38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657a4300) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f44657a46c0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f4465729ea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657a4660) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f44657a4a20) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f4465729f08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657a49c0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f44657a4d80) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f4465729f70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657a4d20) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f44657dd120) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f44657de000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657dd0c0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f44657dd480) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f44657de068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657dd420) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f44657dd7e0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f44657de0d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657dd780) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f44657ddb40) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f44657de138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657ddae0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f44657ddea0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f44657de1a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44657dde40) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f4465834240) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f44657de208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44658341e0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f44658345a0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f44657de270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465834540) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f4465834900) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f44657de2d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f44658348a0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f4465834c60) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f44657de340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465834c00) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f446585a000) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f44657de3a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4465834f60) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f446585a360) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f44657de410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f446585a300) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f446585a6c0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f44657de478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f446585a660) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f446585aa20) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f44657de4e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f446585a9c0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f446585ad20) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f446585aea0) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f4465880000) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f4465880060) 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 (0x0x7f44657de548) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f446585af60) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f44657de548)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f44658806c0) 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 (0x0x7f44657de618) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f4465744540) 0
+ primary-for QOpenGLWindow (0x0x7f44657de618)
+ QWindow (0x0x7f44657445b0) 0
+ primary-for QPaintDeviceWindow (0x0x7f4465744540)
+ QObject (0x0x7f44658805a0) 0
+ primary-for QWindow (0x0x7f44657445b0)
+ QSurface (0x0x7f4465880600) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f4465880660) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f44658808a0) 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 (0x0x7f44657de6e8) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+ QObject (0x0x7f4465880840) 0
+ primary-for QQuickTransform (0x0x7f44657de6e8)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f4465880ae0) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f4465880b40) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f4465880ba0) 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 (0x0x7f4465744770) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+ QObject (0x0x7f4465880a20) 0
+ primary-for QQuickItem (0x0x7f4465744770)
+ QQmlParserStatus (0x0x7f4465880a80) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f44654ecd20) 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 (0x0x7f44654ecd80) 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 (0x0x7f44657de888) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+ QQuickItem (0x0x7f44658b3700) 0
+ primary-for QQuickFramebufferObject (0x0x7f44657de888)
+ QObject (0x0x7f44654ecc60) 0
+ primary-for QQuickItem (0x0x7f44658b3700)
+ QQmlParserStatus (0x0x7f44654eccc0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7f44654ecf00) 0
+
+Class VkApplicationInfo
+ size=48 align=8
+ base size=48 base align=8
+VkApplicationInfo (0x0x7f44654ecf60) 0
+
+Class VkInstanceCreateInfo
+ size=64 align=8
+ base size=64 base align=8
+VkInstanceCreateInfo (0x0x7f4465589000) 0
+
+Class VkAllocationCallbacks
+ size=48 align=8
+ base size=48 base align=8
+VkAllocationCallbacks (0x0x7f4465589060) 0
+
+Class VkPhysicalDeviceFeatures
+ size=220 align=4
+ base size=220 base align=4
+VkPhysicalDeviceFeatures (0x0x7f44655890c0) 0
+
+Class VkFormatProperties
+ size=12 align=4
+ base size=12 base align=4
+VkFormatProperties (0x0x7f4465589120) 0
+
+Class VkExtent3D
+ size=12 align=4
+ base size=12 base align=4
+VkExtent3D (0x0x7f4465589180) 0
+
+Class VkImageFormatProperties
+ size=32 align=8
+ base size=32 base align=8
+VkImageFormatProperties (0x0x7f44655891e0) 0
+
+Class VkPhysicalDeviceLimits
+ size=504 align=8
+ base size=504 base align=8
+VkPhysicalDeviceLimits (0x0x7f4465589240) 0
+
+Class VkPhysicalDeviceSparseProperties
+ size=20 align=4
+ base size=20 base align=4
+VkPhysicalDeviceSparseProperties (0x0x7f44655892a0) 0
+
+Class VkPhysicalDeviceProperties
+ size=824 align=8
+ base size=824 base align=8
+VkPhysicalDeviceProperties (0x0x7f4465589300) 0
+
+Class VkQueueFamilyProperties
+ size=24 align=4
+ base size=24 base align=4
+VkQueueFamilyProperties (0x0x7f4465589360) 0
+
+Class VkMemoryType
+ size=8 align=4
+ base size=8 base align=4
+VkMemoryType (0x0x7f44655893c0) 0
+
+Class VkMemoryHeap
+ size=16 align=8
+ base size=16 base align=8
+VkMemoryHeap (0x0x7f4465589420) 0
+
+Class VkPhysicalDeviceMemoryProperties
+ size=520 align=8
+ base size=520 base align=8
+VkPhysicalDeviceMemoryProperties (0x0x7f4465589480) 0
+
+Class VkDeviceQueueCreateInfo
+ size=40 align=8
+ base size=40 base align=8
+VkDeviceQueueCreateInfo (0x0x7f44655894e0) 0
+
+Class VkDeviceCreateInfo
+ size=72 align=8
+ base size=72 base align=8
+VkDeviceCreateInfo (0x0x7f4465589540) 0
+
+Class VkExtensionProperties
+ size=260 align=4
+ base size=260 base align=4
+VkExtensionProperties (0x0x7f4465589600) 0
+
+Class VkLayerProperties
+ size=520 align=4
+ base size=520 base align=4
+VkLayerProperties (0x0x7f4465589660) 0
+
+Class VkSubmitInfo
+ size=72 align=8
+ base size=72 base align=8
+VkSubmitInfo (0x0x7f44655896c0) 0
+
+Class VkMemoryAllocateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkMemoryAllocateInfo (0x0x7f4465589720) 0
+
+Class VkMappedMemoryRange
+ size=40 align=8
+ base size=40 base align=8
+VkMappedMemoryRange (0x0x7f4465589780) 0
+
+Class VkMemoryRequirements
+ size=24 align=8
+ base size=24 base align=8
+VkMemoryRequirements (0x0x7f44655897e0) 0
+
+Class VkSparseImageFormatProperties
+ size=20 align=4
+ base size=20 base align=4
+VkSparseImageFormatProperties (0x0x7f4465589840) 0
+
+Class VkSparseImageMemoryRequirements
+ size=48 align=8
+ base size=48 base align=8
+VkSparseImageMemoryRequirements (0x0x7f44655898a0) 0
+
+Class VkSparseMemoryBind
+ size=40 align=8
+ base size=40 base align=8
+VkSparseMemoryBind (0x0x7f4465589900) 0
+
+Class VkSparseBufferMemoryBindInfo
+ size=24 align=8
+ base size=24 base align=8
+VkSparseBufferMemoryBindInfo (0x0x7f4465589960) 0
+
+Class VkSparseImageOpaqueMemoryBindInfo
+ size=24 align=8
+ base size=24 base align=8
+VkSparseImageOpaqueMemoryBindInfo (0x0x7f44655899c0) 0
+
+Class VkImageSubresource
+ size=12 align=4
+ base size=12 base align=4
+VkImageSubresource (0x0x7f4465589a20) 0
+
+Class VkOffset3D
+ size=12 align=4
+ base size=12 base align=4
+VkOffset3D (0x0x7f4465589a80) 0
+
+Class VkSparseImageMemoryBind
+ size=64 align=8
+ base size=64 base align=8
+VkSparseImageMemoryBind (0x0x7f4465589ae0) 0
+
+Class VkSparseImageMemoryBindInfo
+ size=24 align=8
+ base size=24 base align=8
+VkSparseImageMemoryBindInfo (0x0x7f4465589b40) 0
+
+Class VkBindSparseInfo
+ size=96 align=8
+ base size=96 base align=8
+VkBindSparseInfo (0x0x7f4465589ba0) 0
+
+Class VkFenceCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkFenceCreateInfo (0x0x7f4465589c00) 0
+
+Class VkSemaphoreCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkSemaphoreCreateInfo (0x0x7f4465589c60) 0
+
+Class VkEventCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkEventCreateInfo (0x0x7f4465589cc0) 0
+
+Class VkQueryPoolCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkQueryPoolCreateInfo (0x0x7f4465589d20) 0
+
+Class VkBufferCreateInfo
+ size=56 align=8
+ base size=56 base align=8
+VkBufferCreateInfo (0x0x7f4465589d80) 0
+
+Class VkBufferViewCreateInfo
+ size=56 align=8
+ base size=56 base align=8
+VkBufferViewCreateInfo (0x0x7f4465589de0) 0
+
+Class VkImageCreateInfo
+ size=88 align=8
+ base size=88 base align=8
+VkImageCreateInfo (0x0x7f4465589e40) 0
+
+Class VkSubresourceLayout
+ size=40 align=8
+ base size=40 base align=8
+VkSubresourceLayout (0x0x7f4465589ea0) 0
+
+Class VkComponentMapping
+ size=16 align=4
+ base size=16 base align=4
+VkComponentMapping (0x0x7f4465589f00) 0
+
+Class VkImageSubresourceRange
+ size=20 align=4
+ base size=20 base align=4
+VkImageSubresourceRange (0x0x7f4465589f60) 0
+
+Class VkImageViewCreateInfo
+ size=80 align=8
+ base size=80 base align=8
+VkImageViewCreateInfo (0x0x7f44655a8000) 0
+
+Class VkShaderModuleCreateInfo
+ size=40 align=8
+ base size=40 base align=8
+VkShaderModuleCreateInfo (0x0x7f44655a8060) 0
+
+Class VkPipelineCacheCreateInfo
+ size=40 align=8
+ base size=40 base align=8
+VkPipelineCacheCreateInfo (0x0x7f44655a80c0) 0
+
+Class VkSpecializationMapEntry
+ size=16 align=8
+ base size=16 base align=8
+VkSpecializationMapEntry (0x0x7f44655a8120) 0
+
+Class VkSpecializationInfo
+ size=32 align=8
+ base size=32 base align=8
+VkSpecializationInfo (0x0x7f44655a8180) 0
+
+Class VkPipelineShaderStageCreateInfo
+ size=48 align=8
+ base size=48 base align=8
+VkPipelineShaderStageCreateInfo (0x0x7f44655a81e0) 0
+
+Class VkVertexInputBindingDescription
+ size=12 align=4
+ base size=12 base align=4
+VkVertexInputBindingDescription (0x0x7f44655a8240) 0
+
+Class VkVertexInputAttributeDescription
+ size=16 align=4
+ base size=16 base align=4
+VkVertexInputAttributeDescription (0x0x7f44655a82a0) 0
+
+Class VkPipelineVertexInputStateCreateInfo
+ size=48 align=8
+ base size=48 base align=8
+VkPipelineVertexInputStateCreateInfo (0x0x7f44655a8300) 0
+
+Class VkPipelineInputAssemblyStateCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineInputAssemblyStateCreateInfo (0x0x7f44655a8360) 0
+
+Class VkPipelineTessellationStateCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineTessellationStateCreateInfo (0x0x7f44655a83c0) 0
+
+Class VkViewport
+ size=24 align=4
+ base size=24 base align=4
+VkViewport (0x0x7f44655a8420) 0
+
+Class VkOffset2D
+ size=8 align=4
+ base size=8 base align=4
+VkOffset2D (0x0x7f44655a8480) 0
+
+Class VkExtent2D
+ size=8 align=4
+ base size=8 base align=4
+VkExtent2D (0x0x7f44655a84e0) 0
+
+Class VkRect2D
+ size=16 align=4
+ base size=16 base align=4
+VkRect2D (0x0x7f44655a8540) 0
+
+Class VkPipelineViewportStateCreateInfo
+ size=48 align=8
+ base size=48 base align=8
+VkPipelineViewportStateCreateInfo (0x0x7f44655a85a0) 0
+
+Class VkPipelineRasterizationStateCreateInfo
+ size=64 align=8
+ base size=64 base align=8
+VkPipelineRasterizationStateCreateInfo (0x0x7f44655a8600) 0
+
+Class VkPipelineMultisampleStateCreateInfo
+ size=48 align=8
+ base size=48 base align=8
+VkPipelineMultisampleStateCreateInfo (0x0x7f44655a8660) 0
+
+Class VkStencilOpState
+ size=28 align=4
+ base size=28 base align=4
+VkStencilOpState (0x0x7f44655a86c0) 0
+
+Class VkPipelineDepthStencilStateCreateInfo
+ size=104 align=8
+ base size=104 base align=8
+VkPipelineDepthStencilStateCreateInfo (0x0x7f44655a8720) 0
+
+Class VkPipelineColorBlendAttachmentState
+ size=32 align=4
+ base size=32 base align=4
+VkPipelineColorBlendAttachmentState (0x0x7f44655a8780) 0
+
+Class VkPipelineColorBlendStateCreateInfo
+ size=56 align=8
+ base size=56 base align=8
+VkPipelineColorBlendStateCreateInfo (0x0x7f44655a87e0) 0
+
+Class VkPipelineDynamicStateCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineDynamicStateCreateInfo (0x0x7f44655a8840) 0
+
+Class VkGraphicsPipelineCreateInfo
+ size=144 align=8
+ base size=144 base align=8
+VkGraphicsPipelineCreateInfo (0x0x7f44655a88a0) 0
+
+Class VkComputePipelineCreateInfo
+ size=96 align=8
+ base size=96 base align=8
+VkComputePipelineCreateInfo (0x0x7f44655a8900) 0
+
+Class VkPushConstantRange
+ size=12 align=4
+ base size=12 base align=4
+VkPushConstantRange (0x0x7f44655a8960) 0
+
+Class VkPipelineLayoutCreateInfo
+ size=48 align=8
+ base size=48 base align=8
+VkPipelineLayoutCreateInfo (0x0x7f44655a89c0) 0
+
+Class VkSamplerCreateInfo
+ size=80 align=8
+ base size=80 base align=8
+VkSamplerCreateInfo (0x0x7f44655a8a20) 0
+
+Class VkDescriptorSetLayoutBinding
+ size=24 align=8
+ base size=24 base align=8
+VkDescriptorSetLayoutBinding (0x0x7f44655a8a80) 0
+
+Class VkDescriptorSetLayoutCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkDescriptorSetLayoutCreateInfo (0x0x7f44655a8ae0) 0
+
+Class VkDescriptorPoolSize
+ size=8 align=4
+ base size=8 base align=4
+VkDescriptorPoolSize (0x0x7f44655a8b40) 0
+
+Class VkDescriptorPoolCreateInfo
+ size=40 align=8
+ base size=40 base align=8
+VkDescriptorPoolCreateInfo (0x0x7f44655a8ba0) 0
+
+Class VkDescriptorSetAllocateInfo
+ size=40 align=8
+ base size=40 base align=8
+VkDescriptorSetAllocateInfo (0x0x7f44655a8c00) 0
+
+Class VkDescriptorImageInfo
+ size=24 align=8
+ base size=24 base align=8
+VkDescriptorImageInfo (0x0x7f44655a8c60) 0
+
+Class VkDescriptorBufferInfo
+ size=24 align=8
+ base size=24 base align=8
+VkDescriptorBufferInfo (0x0x7f44655a8cc0) 0
+
+Class VkWriteDescriptorSet
+ size=64 align=8
+ base size=64 base align=8
+VkWriteDescriptorSet (0x0x7f44655a8d20) 0
+
+Class VkCopyDescriptorSet
+ size=56 align=8
+ base size=56 base align=8
+VkCopyDescriptorSet (0x0x7f44655a8de0) 0
+
+Class VkFramebufferCreateInfo
+ size=64 align=8
+ base size=64 base align=8
+VkFramebufferCreateInfo (0x0x7f44655a8e40) 0
+
+Class VkAttachmentDescription
+ size=36 align=4
+ base size=36 base align=4
+VkAttachmentDescription (0x0x7f44655a8ea0) 0
+
+Class VkAttachmentReference
+ size=8 align=4
+ base size=8 base align=4
+VkAttachmentReference (0x0x7f44655a8f00) 0
+
+Class VkSubpassDescription
+ size=72 align=8
+ base size=72 base align=8
+VkSubpassDescription (0x0x7f44655a8f60) 0
+
+Class VkSubpassDependency
+ size=28 align=4
+ base size=28 base align=4
+VkSubpassDependency (0x0x7f44655c4060) 0
+
+Class VkRenderPassCreateInfo
+ size=64 align=8
+ base size=64 base align=8
+VkRenderPassCreateInfo (0x0x7f44655c40c0) 0
+
+Class VkCommandPoolCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkCommandPoolCreateInfo (0x0x7f44655c4120) 0
+
+Class VkCommandBufferAllocateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkCommandBufferAllocateInfo (0x0x7f44655c4180) 0
+
+Class VkCommandBufferInheritanceInfo
+ size=56 align=8
+ base size=56 base align=8
+VkCommandBufferInheritanceInfo (0x0x7f44655c41e0) 0
+
+Class VkCommandBufferBeginInfo
+ size=32 align=8
+ base size=32 base align=8
+VkCommandBufferBeginInfo (0x0x7f44655c4240) 0
+
+Class VkBufferCopy
+ size=24 align=8
+ base size=24 base align=8
+VkBufferCopy (0x0x7f44655c42a0) 0
+
+Class VkImageSubresourceLayers
+ size=16 align=4
+ base size=16 base align=4
+VkImageSubresourceLayers (0x0x7f44655c4300) 0
+
+Class VkImageCopy
+ size=68 align=4
+ base size=68 base align=4
+VkImageCopy (0x0x7f44655c4360) 0
+
+Class VkImageBlit
+ size=80 align=4
+ base size=80 base align=4
+VkImageBlit (0x0x7f44655c43c0) 0
+
+Class VkBufferImageCopy
+ size=56 align=8
+ base size=56 base align=8
+VkBufferImageCopy (0x0x7f44655c4420) 0
+
+Class VkClearColorValue
+ size=16 align=4
+ base size=16 base align=4
+VkClearColorValue (0x0x7f44655c4480) 0
+
+Class VkClearDepthStencilValue
+ size=8 align=4
+ base size=8 base align=4
+VkClearDepthStencilValue (0x0x7f44655c44e0) 0
+
+Class VkClearValue
+ size=16 align=4
+ base size=16 base align=4
+VkClearValue (0x0x7f44655c4540) 0
+
+Class VkClearAttachment
+ size=24 align=4
+ base size=24 base align=4
+VkClearAttachment (0x0x7f44655c45a0) 0
+
+Class VkClearRect
+ size=24 align=4
+ base size=24 base align=4
+VkClearRect (0x0x7f44655c4600) 0
+
+Class VkImageResolve
+ size=68 align=4
+ base size=68 base align=4
+VkImageResolve (0x0x7f44655c4660) 0
+
+Class VkMemoryBarrier
+ size=24 align=8
+ base size=24 base align=8
+VkMemoryBarrier (0x0x7f44655c46c0) 0
+
+Class VkBufferMemoryBarrier
+ size=56 align=8
+ base size=56 base align=8
+VkBufferMemoryBarrier (0x0x7f44655c4720) 0
+
+Class VkImageMemoryBarrier
+ size=72 align=8
+ base size=72 base align=8
+VkImageMemoryBarrier (0x0x7f44655c4780) 0
+
+Class VkRenderPassBeginInfo
+ size=64 align=8
+ base size=64 base align=8
+VkRenderPassBeginInfo (0x0x7f44655c4840) 0
+
+Class VkDispatchIndirectCommand
+ size=12 align=4
+ base size=12 base align=4
+VkDispatchIndirectCommand (0x0x7f44655c48a0) 0
+
+Class VkDrawIndexedIndirectCommand
+ size=20 align=4
+ base size=20 base align=4
+VkDrawIndexedIndirectCommand (0x0x7f44655c4900) 0
+
+Class VkDrawIndirectCommand
+ size=16 align=4
+ base size=16 base align=4
+VkDrawIndirectCommand (0x0x7f44655c4960) 0
+
+Class VkBaseOutStructure
+ size=16 align=8
+ base size=16 base align=8
+VkBaseOutStructure (0x0x7f44655c49c0) 0
+
+Class VkBaseInStructure
+ size=16 align=8
+ base size=16 base align=8
+VkBaseInStructure (0x0x7f44655c4a20) 0
+
+Class VkPhysicalDeviceSubgroupProperties
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceSubgroupProperties (0x0x7f44655c4a80) 0
+
+Class VkBindBufferMemoryInfo
+ size=40 align=8
+ base size=40 base align=8
+VkBindBufferMemoryInfo (0x0x7f44655c4ae0) 0
+
+Class VkBindImageMemoryInfo
+ size=40 align=8
+ base size=40 base align=8
+VkBindImageMemoryInfo (0x0x7f44655c4b40) 0
+
+Class VkPhysicalDevice16BitStorageFeatures
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDevice16BitStorageFeatures (0x0x7f44655c4ba0) 0
+
+Class VkMemoryDedicatedRequirements
+ size=24 align=8
+ base size=24 base align=8
+VkMemoryDedicatedRequirements (0x0x7f44655c4c00) 0
+
+Class VkMemoryDedicatedAllocateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkMemoryDedicatedAllocateInfo (0x0x7f44655c4c60) 0
+
+Class VkMemoryAllocateFlagsInfo
+ size=24 align=8
+ base size=24 base align=8
+VkMemoryAllocateFlagsInfo (0x0x7f44655c4cc0) 0
+
+Class VkDeviceGroupRenderPassBeginInfo
+ size=32 align=8
+ base size=32 base align=8
+VkDeviceGroupRenderPassBeginInfo (0x0x7f44655c4d20) 0
+
+Class VkDeviceGroupCommandBufferBeginInfo
+ size=24 align=8
+ base size=24 base align=8
+VkDeviceGroupCommandBufferBeginInfo (0x0x7f44655c4d80) 0
+
+Class VkDeviceGroupSubmitInfo
+ size=64 align=8
+ base size=64 base align=8
+VkDeviceGroupSubmitInfo (0x0x7f44655c4de0) 0
+
+Class VkDeviceGroupBindSparseInfo
+ size=24 align=8
+ base size=24 base align=8
+VkDeviceGroupBindSparseInfo (0x0x7f44655c4e40) 0
+
+Class VkBindBufferMemoryDeviceGroupInfo
+ size=32 align=8
+ base size=32 base align=8
+VkBindBufferMemoryDeviceGroupInfo (0x0x7f44655c4ea0) 0
+
+Class VkBindImageMemoryDeviceGroupInfo
+ size=48 align=8
+ base size=48 base align=8
+VkBindImageMemoryDeviceGroupInfo (0x0x7f44655c4f00) 0
+
+Class VkPhysicalDeviceGroupProperties
+ size=288 align=8
+ base size=288 base align=8
+VkPhysicalDeviceGroupProperties (0x0x7f44655c4f60) 0
+
+Class VkDeviceGroupDeviceCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkDeviceGroupDeviceCreateInfo (0x0x7f446562a000) 0
+
+Class VkBufferMemoryRequirementsInfo2
+ size=24 align=8
+ base size=24 base align=8
+VkBufferMemoryRequirementsInfo2 (0x0x7f446562a060) 0
+
+Class VkImageMemoryRequirementsInfo2
+ size=24 align=8
+ base size=24 base align=8
+VkImageMemoryRequirementsInfo2 (0x0x7f446562a0c0) 0
+
+Class VkImageSparseMemoryRequirementsInfo2
+ size=24 align=8
+ base size=24 base align=8
+VkImageSparseMemoryRequirementsInfo2 (0x0x7f446562a120) 0
+
+Class VkMemoryRequirements2
+ size=40 align=8
+ base size=40 base align=8
+VkMemoryRequirements2 (0x0x7f446562a180) 0
+
+Class VkSparseImageMemoryRequirements2
+ size=64 align=8
+ base size=64 base align=8
+VkSparseImageMemoryRequirements2 (0x0x7f446562a1e0) 0
+
+Class VkPhysicalDeviceFeatures2
+ size=240 align=8
+ base size=240 base align=8
+VkPhysicalDeviceFeatures2 (0x0x7f446562a240) 0
+
+Class VkPhysicalDeviceProperties2
+ size=840 align=8
+ base size=840 base align=8
+VkPhysicalDeviceProperties2 (0x0x7f446562a2a0) 0
+
+Class VkFormatProperties2
+ size=32 align=8
+ base size=32 base align=8
+VkFormatProperties2 (0x0x7f446562a300) 0
+
+Class VkImageFormatProperties2
+ size=48 align=8
+ base size=48 base align=8
+VkImageFormatProperties2 (0x0x7f446562a360) 0
+
+Class VkPhysicalDeviceImageFormatInfo2
+ size=40 align=8
+ base size=40 base align=8
+VkPhysicalDeviceImageFormatInfo2 (0x0x7f446562a3c0) 0
+
+Class VkQueueFamilyProperties2
+ size=40 align=8
+ base size=40 base align=8
+VkQueueFamilyProperties2 (0x0x7f446562a420) 0
+
+Class VkPhysicalDeviceMemoryProperties2
+ size=536 align=8
+ base size=536 base align=8
+VkPhysicalDeviceMemoryProperties2 (0x0x7f446562a480) 0
+
+Class VkSparseImageFormatProperties2
+ size=40 align=8
+ base size=40 base align=8
+VkSparseImageFormatProperties2 (0x0x7f446562a4e0) 0
+
+Class VkPhysicalDeviceSparseImageFormatInfo2
+ size=40 align=8
+ base size=40 base align=8
+VkPhysicalDeviceSparseImageFormatInfo2 (0x0x7f446562a540) 0
+
+Class VkPhysicalDevicePointClippingProperties
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDevicePointClippingProperties (0x0x7f446562a5a0) 0
+
+Class VkInputAttachmentAspectReference
+ size=12 align=4
+ base size=12 base align=4
+VkInputAttachmentAspectReference (0x0x7f446562a600) 0
+
+Class VkRenderPassInputAttachmentAspectCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkRenderPassInputAttachmentAspectCreateInfo (0x0x7f446562a660) 0
+
+Class VkImageViewUsageCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkImageViewUsageCreateInfo (0x0x7f446562a6c0) 0
+
+Class VkPipelineTessellationDomainOriginStateCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineTessellationDomainOriginStateCreateInfo (0x0x7f446562a720) 0
+
+Class VkRenderPassMultiviewCreateInfo
+ size=64 align=8
+ base size=64 base align=8
+VkRenderPassMultiviewCreateInfo (0x0x7f446562a780) 0
+
+Class VkPhysicalDeviceMultiviewFeatures
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceMultiviewFeatures (0x0x7f446562a7e0) 0
+
+Class VkPhysicalDeviceMultiviewProperties
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceMultiviewProperties (0x0x7f446562a840) 0
+
+Class VkPhysicalDeviceVariablePointersFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceVariablePointersFeatures (0x0x7f446562a8a0) 0
+
+Class VkPhysicalDeviceProtectedMemoryFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceProtectedMemoryFeatures (0x0x7f446562a900) 0
+
+Class VkPhysicalDeviceProtectedMemoryProperties
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceProtectedMemoryProperties (0x0x7f446562a960) 0
+
+Class VkDeviceQueueInfo2
+ size=32 align=8
+ base size=32 base align=8
+VkDeviceQueueInfo2 (0x0x7f446562a9c0) 0
+
+Class VkProtectedSubmitInfo
+ size=24 align=8
+ base size=24 base align=8
+VkProtectedSubmitInfo (0x0x7f446562aa20) 0
+
+Class VkSamplerYcbcrConversionCreateInfo
+ size=64 align=8
+ base size=64 base align=8
+VkSamplerYcbcrConversionCreateInfo (0x0x7f446562aa80) 0
+
+Class VkSamplerYcbcrConversionInfo
+ size=24 align=8
+ base size=24 base align=8
+VkSamplerYcbcrConversionInfo (0x0x7f446562ab40) 0
+
+Class VkBindImagePlaneMemoryInfo
+ size=24 align=8
+ base size=24 base align=8
+VkBindImagePlaneMemoryInfo (0x0x7f446562aba0) 0
+
+Class VkImagePlaneMemoryRequirementsInfo
+ size=24 align=8
+ base size=24 base align=8
+VkImagePlaneMemoryRequirementsInfo (0x0x7f446562ac00) 0
+
+Class VkPhysicalDeviceSamplerYcbcrConversionFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceSamplerYcbcrConversionFeatures (0x0x7f446562ac60) 0
+
+Class VkSamplerYcbcrConversionImageFormatProperties
+ size=24 align=8
+ base size=24 base align=8
+VkSamplerYcbcrConversionImageFormatProperties (0x0x7f446562acc0) 0
+
+Class VkDescriptorUpdateTemplateEntry
+ size=32 align=8
+ base size=32 base align=8
+VkDescriptorUpdateTemplateEntry (0x0x7f446562ad20) 0
+
+Class VkDescriptorUpdateTemplateCreateInfo
+ size=72 align=8
+ base size=72 base align=8
+VkDescriptorUpdateTemplateCreateInfo (0x0x7f446562ad80) 0
+
+Class VkExternalMemoryProperties
+ size=12 align=4
+ base size=12 base align=4
+VkExternalMemoryProperties (0x0x7f446562ae40) 0
+
+Class VkPhysicalDeviceExternalImageFormatInfo
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceExternalImageFormatInfo (0x0x7f446562aea0) 0
+
+Class VkExternalImageFormatProperties
+ size=32 align=8
+ base size=32 base align=8
+VkExternalImageFormatProperties (0x0x7f446562af00) 0
+
+Class VkPhysicalDeviceExternalBufferInfo
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceExternalBufferInfo (0x0x7f446562af60) 0
+
+Class VkExternalBufferProperties
+ size=32 align=8
+ base size=32 base align=8
+VkExternalBufferProperties (0x0x7f446563e000) 0
+
+Class VkPhysicalDeviceIDProperties
+ size=64 align=8
+ base size=64 base align=8
+VkPhysicalDeviceIDProperties (0x0x7f446563e060) 0
+
+Class VkExternalMemoryImageCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkExternalMemoryImageCreateInfo (0x0x7f446563e0c0) 0
+
+Class VkExternalMemoryBufferCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkExternalMemoryBufferCreateInfo (0x0x7f446563e120) 0
+
+Class VkExportMemoryAllocateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkExportMemoryAllocateInfo (0x0x7f446563e180) 0
+
+Class VkPhysicalDeviceExternalFenceInfo
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceExternalFenceInfo (0x0x7f446563e1e0) 0
+
+Class VkExternalFenceProperties
+ size=32 align=8
+ base size=32 base align=8
+VkExternalFenceProperties (0x0x7f446563e240) 0
+
+Class VkExportFenceCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkExportFenceCreateInfo (0x0x7f446563e2a0) 0
+
+Class VkExportSemaphoreCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkExportSemaphoreCreateInfo (0x0x7f446563e300) 0
+
+Class VkPhysicalDeviceExternalSemaphoreInfo
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceExternalSemaphoreInfo (0x0x7f446563e360) 0
+
+Class VkExternalSemaphoreProperties
+ size=32 align=8
+ base size=32 base align=8
+VkExternalSemaphoreProperties (0x0x7f446563e3c0) 0
+
+Class VkPhysicalDeviceMaintenance3Properties
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceMaintenance3Properties (0x0x7f446563e420) 0
+
+Class VkDescriptorSetLayoutSupport
+ size=24 align=8
+ base size=24 base align=8
+VkDescriptorSetLayoutSupport (0x0x7f446563e480) 0
+
+Class VkPhysicalDeviceShaderDrawParametersFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderDrawParametersFeatures (0x0x7f446563e4e0) 0
+
+Class VkPhysicalDeviceVulkan11Features
+ size=64 align=8
+ base size=64 base align=8
+VkPhysicalDeviceVulkan11Features (0x0x7f446563e540) 0
+
+Class VkPhysicalDeviceVulkan11Properties
+ size=112 align=8
+ base size=112 base align=8
+VkPhysicalDeviceVulkan11Properties (0x0x7f446563e5a0) 0
+
+Class VkPhysicalDeviceVulkan12Features
+ size=208 align=8
+ base size=208 base align=8
+VkPhysicalDeviceVulkan12Features (0x0x7f446563e600) 0
+
+Class VkConformanceVersion
+ size=4 align=1
+ base size=4 base align=1
+VkConformanceVersion (0x0x7f446563e660) 0
+
+Class VkPhysicalDeviceVulkan12Properties
+ size=736 align=8
+ base size=736 base align=8
+VkPhysicalDeviceVulkan12Properties (0x0x7f446563e6c0) 0
+
+Class VkImageFormatListCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkImageFormatListCreateInfo (0x0x7f446563e720) 0
+
+Class VkAttachmentDescription2
+ size=56 align=8
+ base size=56 base align=8
+VkAttachmentDescription2 (0x0x7f446563e780) 0
+
+Class VkAttachmentReference2
+ size=32 align=8
+ base size=32 base align=8
+VkAttachmentReference2 (0x0x7f446563e7e0) 0
+
+Class VkSubpassDescription2
+ size=88 align=8
+ base size=88 base align=8
+VkSubpassDescription2 (0x0x7f446563e840) 0
+
+Class VkSubpassDependency2
+ size=48 align=8
+ base size=48 base align=8
+VkSubpassDependency2 (0x0x7f446563e8a0) 0
+
+Class VkRenderPassCreateInfo2
+ size=80 align=8
+ base size=80 base align=8
+VkRenderPassCreateInfo2 (0x0x7f446563e960) 0
+
+Class VkSubpassBeginInfo
+ size=24 align=8
+ base size=24 base align=8
+VkSubpassBeginInfo (0x0x7f446563e9c0) 0
+
+Class VkSubpassEndInfo
+ size=16 align=8
+ base size=16 base align=8
+VkSubpassEndInfo (0x0x7f446563ea20) 0
+
+Class VkPhysicalDevice8BitStorageFeatures
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDevice8BitStorageFeatures (0x0x7f446563ea80) 0
+
+Class VkPhysicalDeviceDriverProperties
+ size=536 align=8
+ base size=536 base align=8
+VkPhysicalDeviceDriverProperties (0x0x7f446563eae0) 0
+
+Class VkPhysicalDeviceShaderAtomicInt64Features
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderAtomicInt64Features (0x0x7f446563eb40) 0
+
+Class VkPhysicalDeviceShaderFloat16Int8Features
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderFloat16Int8Features (0x0x7f446563eba0) 0
+
+Class VkPhysicalDeviceFloatControlsProperties
+ size=88 align=8
+ base size=88 base align=8
+VkPhysicalDeviceFloatControlsProperties (0x0x7f446563ec00) 0
+
+Class VkDescriptorSetLayoutBindingFlagsCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkDescriptorSetLayoutBindingFlagsCreateInfo (0x0x7f446563ec60) 0
+
+Class VkPhysicalDeviceDescriptorIndexingFeatures
+ size=96 align=8
+ base size=96 base align=8
+VkPhysicalDeviceDescriptorIndexingFeatures (0x0x7f446563ecc0) 0
+
+Class VkPhysicalDeviceDescriptorIndexingProperties
+ size=112 align=8
+ base size=112 base align=8
+VkPhysicalDeviceDescriptorIndexingProperties (0x0x7f446563ed20) 0
+
+Class VkDescriptorSetVariableDescriptorCountAllocateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkDescriptorSetVariableDescriptorCountAllocateInfo (0x0x7f446563ed80) 0
+
+Class VkDescriptorSetVariableDescriptorCountLayoutSupport
+ size=24 align=8
+ base size=24 base align=8
+VkDescriptorSetVariableDescriptorCountLayoutSupport (0x0x7f446563ede0) 0
+
+Class VkSubpassDescriptionDepthStencilResolve
+ size=32 align=8
+ base size=32 base align=8
+VkSubpassDescriptionDepthStencilResolve (0x0x7f446563ee40) 0
+
+Class VkPhysicalDeviceDepthStencilResolveProperties
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceDepthStencilResolveProperties (0x0x7f446563eea0) 0
+
+Class VkPhysicalDeviceScalarBlockLayoutFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceScalarBlockLayoutFeatures (0x0x7f446563ef00) 0
+
+Class VkImageStencilUsageCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkImageStencilUsageCreateInfo (0x0x7f446563ef60) 0
+
+Class VkSamplerReductionModeCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkSamplerReductionModeCreateInfo (0x0x7f4465670000) 0
+
+Class VkPhysicalDeviceSamplerFilterMinmaxProperties
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceSamplerFilterMinmaxProperties (0x0x7f4465670060) 0
+
+Class VkPhysicalDeviceVulkanMemoryModelFeatures
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceVulkanMemoryModelFeatures (0x0x7f44656700c0) 0
+
+Class VkPhysicalDeviceImagelessFramebufferFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceImagelessFramebufferFeatures (0x0x7f4465670120) 0
+
+Class VkFramebufferAttachmentImageInfo
+ size=48 align=8
+ base size=48 base align=8
+VkFramebufferAttachmentImageInfo (0x0x7f4465670180) 0
+
+Class VkFramebufferAttachmentsCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkFramebufferAttachmentsCreateInfo (0x0x7f44656701e0) 0
+
+Class VkRenderPassAttachmentBeginInfo
+ size=32 align=8
+ base size=32 base align=8
+VkRenderPassAttachmentBeginInfo (0x0x7f4465670240) 0
+
+Class VkPhysicalDeviceUniformBufferStandardLayoutFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceUniformBufferStandardLayoutFeatures (0x0x7f44656702a0) 0
+
+Class VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures (0x0x7f4465670300) 0
+
+Class VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures (0x0x7f4465670360) 0
+
+Class VkAttachmentReferenceStencilLayout
+ size=24 align=8
+ base size=24 base align=8
+VkAttachmentReferenceStencilLayout (0x0x7f44656703c0) 0
+
+Class VkAttachmentDescriptionStencilLayout
+ size=24 align=8
+ base size=24 base align=8
+VkAttachmentDescriptionStencilLayout (0x0x7f4465670420) 0
+
+Class VkPhysicalDeviceHostQueryResetFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceHostQueryResetFeatures (0x0x7f4465670480) 0
+
+Class VkPhysicalDeviceTimelineSemaphoreFeatures
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceTimelineSemaphoreFeatures (0x0x7f44656704e0) 0
+
+Class VkPhysicalDeviceTimelineSemaphoreProperties
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceTimelineSemaphoreProperties (0x0x7f4465670540) 0
+
+Class VkSemaphoreTypeCreateInfo
+ size=32 align=8
+ base size=32 base align=8
+VkSemaphoreTypeCreateInfo (0x0x7f44656705a0) 0
+
+Class VkTimelineSemaphoreSubmitInfo
+ size=48 align=8
+ base size=48 base align=8
+VkTimelineSemaphoreSubmitInfo (0x0x7f4465670600) 0
+
+Class VkSemaphoreWaitInfo
+ size=40 align=8
+ base size=40 base align=8
+VkSemaphoreWaitInfo (0x0x7f4465670660) 0
+
+Class VkSemaphoreSignalInfo
+ size=32 align=8
+ base size=32 base align=8
+VkSemaphoreSignalInfo (0x0x7f44656706c0) 0
+
+Class VkPhysicalDeviceBufferDeviceAddressFeatures
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceBufferDeviceAddressFeatures (0x0x7f4465670720) 0
+
+Class VkBufferDeviceAddressInfo
+ size=24 align=8
+ base size=24 base align=8
+VkBufferDeviceAddressInfo (0x0x7f4465670780) 0
+
+Class VkBufferOpaqueCaptureAddressCreateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkBufferOpaqueCaptureAddressCreateInfo (0x0x7f44656707e0) 0
+
+Class VkMemoryOpaqueCaptureAddressAllocateInfo
+ size=24 align=8
+ base size=24 base align=8
+VkMemoryOpaqueCaptureAddressAllocateInfo (0x0x7f4465670840) 0
+
+Class VkDeviceMemoryOpaqueCaptureAddressInfo
+ size=24 align=8
+ base size=24 base align=8
+VkDeviceMemoryOpaqueCaptureAddressInfo (0x0x7f44656708a0) 0
+
+Class VkSurfaceCapabilitiesKHR
+ size=52 align=4
+ base size=52 base align=4
+VkSurfaceCapabilitiesKHR (0x0x7f4465670900) 0
+
+Class VkSurfaceFormatKHR
+ size=8 align=4
+ base size=8 base align=4
+VkSurfaceFormatKHR (0x0x7f44656709c0) 0
+
+Class VkSwapchainCreateInfoKHR
+ size=104 align=8
+ base size=104 base align=8
+VkSwapchainCreateInfoKHR (0x0x7f4465670a20) 0
+
+Class VkPresentInfoKHR
+ size=64 align=8
+ base size=64 base align=8
+VkPresentInfoKHR (0x0x7f4465670a80) 0
+
+Class VkImageSwapchainCreateInfoKHR
+ size=24 align=8
+ base size=24 base align=8
+VkImageSwapchainCreateInfoKHR (0x0x7f4465670ae0) 0
+
+Class VkBindImageMemorySwapchainInfoKHR
+ size=32 align=8
+ base size=32 base align=8
+VkBindImageMemorySwapchainInfoKHR (0x0x7f4465670b40) 0
+
+Class VkAcquireNextImageInfoKHR
+ size=56 align=8
+ base size=56 base align=8
+VkAcquireNextImageInfoKHR (0x0x7f4465670ba0) 0
+
+Class VkDeviceGroupPresentCapabilitiesKHR
+ size=152 align=8
+ base size=152 base align=8
+VkDeviceGroupPresentCapabilitiesKHR (0x0x7f4465670c00) 0
+
+Class VkDeviceGroupPresentInfoKHR
+ size=40 align=8
+ base size=40 base align=8
+VkDeviceGroupPresentInfoKHR (0x0x7f4465670c60) 0
+
+Class VkDeviceGroupSwapchainCreateInfoKHR
+ size=24 align=8
+ base size=24 base align=8
+VkDeviceGroupSwapchainCreateInfoKHR (0x0x7f4465670cc0) 0
+
+Class VkDisplayPropertiesKHR
+ size=48 align=8
+ base size=48 base align=8
+VkDisplayPropertiesKHR (0x0x7f4465670d20) 0
+
+Class VkDisplayModeParametersKHR
+ size=12 align=4
+ base size=12 base align=4
+VkDisplayModeParametersKHR (0x0x7f4465670d80) 0
+
+Class VkDisplayModePropertiesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkDisplayModePropertiesKHR (0x0x7f4465670de0) 0
+
+Class VkDisplayModeCreateInfoKHR
+ size=32 align=8
+ base size=32 base align=8
+VkDisplayModeCreateInfoKHR (0x0x7f4465670e40) 0
+
+Class VkDisplayPlaneCapabilitiesKHR
+ size=68 align=4
+ base size=68 base align=4
+VkDisplayPlaneCapabilitiesKHR (0x0x7f4465670ea0) 0
+
+Class VkDisplayPlanePropertiesKHR
+ size=16 align=8
+ base size=16 base align=8
+VkDisplayPlanePropertiesKHR (0x0x7f4465670f00) 0
+
+Class VkDisplaySurfaceCreateInfoKHR
+ size=64 align=8
+ base size=64 base align=8
+VkDisplaySurfaceCreateInfoKHR (0x0x7f4465670f60) 0
+
+Class VkDisplayPresentInfoKHR
+ size=56 align=8
+ base size=56 base align=8
+VkDisplayPresentInfoKHR (0x0x7f4465699060) 0
+
+Class VkImportMemoryFdInfoKHR
+ size=24 align=8
+ base size=24 base align=8
+VkImportMemoryFdInfoKHR (0x0x7f44656990c0) 0
+
+Class VkMemoryFdPropertiesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkMemoryFdPropertiesKHR (0x0x7f4465699120) 0
+
+Class VkMemoryGetFdInfoKHR
+ size=32 align=8
+ base size=32 base align=8
+VkMemoryGetFdInfoKHR (0x0x7f4465699180) 0
+
+Class VkImportSemaphoreFdInfoKHR
+ size=40 align=8
+ base size=40 base align=8
+VkImportSemaphoreFdInfoKHR (0x0x7f44656991e0) 0
+
+Class VkSemaphoreGetFdInfoKHR
+ size=32 align=8
+ base size=32 base align=8
+VkSemaphoreGetFdInfoKHR (0x0x7f4465699240) 0
+
+Class VkPhysicalDevicePushDescriptorPropertiesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDevicePushDescriptorPropertiesKHR (0x0x7f44656992a0) 0
+
+Class VkRectLayerKHR
+ size=20 align=4
+ base size=20 base align=4
+VkRectLayerKHR (0x0x7f4465699300) 0
+
+Class VkPresentRegionKHR
+ size=16 align=8
+ base size=16 base align=8
+VkPresentRegionKHR (0x0x7f4465699360) 0
+
+Class VkPresentRegionsKHR
+ size=32 align=8
+ base size=32 base align=8
+VkPresentRegionsKHR (0x0x7f44656993c0) 0
+
+Class VkSharedPresentSurfaceCapabilitiesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkSharedPresentSurfaceCapabilitiesKHR (0x0x7f4465699420) 0
+
+Class VkImportFenceFdInfoKHR
+ size=40 align=8
+ base size=40 base align=8
+VkImportFenceFdInfoKHR (0x0x7f4465699480) 0
+
+Class VkFenceGetFdInfoKHR
+ size=32 align=8
+ base size=32 base align=8
+VkFenceGetFdInfoKHR (0x0x7f44656994e0) 0
+
+Class VkPhysicalDevicePerformanceQueryFeaturesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDevicePerformanceQueryFeaturesKHR (0x0x7f4465699540) 0
+
+Class VkPhysicalDevicePerformanceQueryPropertiesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDevicePerformanceQueryPropertiesKHR (0x0x7f44656995a0) 0
+
+Class VkPerformanceCounterKHR
+ size=48 align=8
+ base size=48 base align=8
+VkPerformanceCounterKHR (0x0x7f4465699600) 0
+
+Class VkPerformanceCounterDescriptionKHR
+ size=792 align=8
+ base size=792 base align=8
+VkPerformanceCounterDescriptionKHR (0x0x7f4465699660) 0
+
+Class VkQueryPoolPerformanceCreateInfoKHR
+ size=32 align=8
+ base size=32 base align=8
+VkQueryPoolPerformanceCreateInfoKHR (0x0x7f44656996c0) 0
+
+Class VkPerformanceCounterResultKHR
+ size=8 align=8
+ base size=8 base align=8
+VkPerformanceCounterResultKHR (0x0x7f4465699720) 0
+
+Class VkAcquireProfilingLockInfoKHR
+ size=32 align=8
+ base size=32 base align=8
+VkAcquireProfilingLockInfoKHR (0x0x7f4465699780) 0
+
+Class VkPerformanceQuerySubmitInfoKHR
+ size=24 align=8
+ base size=24 base align=8
+VkPerformanceQuerySubmitInfoKHR (0x0x7f44656997e0) 0
+
+Class VkPhysicalDeviceSurfaceInfo2KHR
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceSurfaceInfo2KHR (0x0x7f4465699840) 0
+
+Class VkSurfaceCapabilities2KHR
+ size=72 align=8
+ base size=72 base align=8
+VkSurfaceCapabilities2KHR (0x0x7f44656998a0) 0
+
+Class VkSurfaceFormat2KHR
+ size=24 align=8
+ base size=24 base align=8
+VkSurfaceFormat2KHR (0x0x7f4465699900) 0
+
+Class VkDisplayProperties2KHR
+ size=64 align=8
+ base size=64 base align=8
+VkDisplayProperties2KHR (0x0x7f4465699960) 0
+
+Class VkDisplayPlaneProperties2KHR
+ size=32 align=8
+ base size=32 base align=8
+VkDisplayPlaneProperties2KHR (0x0x7f44656999c0) 0
+
+Class VkDisplayModeProperties2KHR
+ size=40 align=8
+ base size=40 base align=8
+VkDisplayModeProperties2KHR (0x0x7f4465699a20) 0
+
+Class VkDisplayPlaneInfo2KHR
+ size=32 align=8
+ base size=32 base align=8
+VkDisplayPlaneInfo2KHR (0x0x7f4465699a80) 0
+
+Class VkDisplayPlaneCapabilities2KHR
+ size=88 align=8
+ base size=88 base align=8
+VkDisplayPlaneCapabilities2KHR (0x0x7f4465699ae0) 0
+
+Class VkPhysicalDeviceShaderClockFeaturesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderClockFeaturesKHR (0x0x7f4465699b40) 0
+
+Class VkSurfaceProtectedCapabilitiesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkSurfaceProtectedCapabilitiesKHR (0x0x7f4465699ba0) 0
+
+Class VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR (0x0x7f4465699c00) 0
+
+Class VkPipelineInfoKHR
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineInfoKHR (0x0x7f4465699c60) 0
+
+Class VkPipelineExecutablePropertiesKHR
+ size=536 align=8
+ base size=536 base align=8
+VkPipelineExecutablePropertiesKHR (0x0x7f4465699cc0) 0
+
+Class VkPipelineExecutableInfoKHR
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineExecutableInfoKHR (0x0x7f4465699d20) 0
+
+Class VkPipelineExecutableStatisticValueKHR
+ size=8 align=8
+ base size=8 base align=8
+VkPipelineExecutableStatisticValueKHR (0x0x7f4465699d80) 0
+
+Class VkPipelineExecutableStatisticKHR
+ size=544 align=8
+ base size=544 base align=8
+VkPipelineExecutableStatisticKHR (0x0x7f4465699de0) 0
+
+Class VkPipelineExecutableInternalRepresentationKHR
+ size=552 align=8
+ base size=552 base align=8
+VkPipelineExecutableInternalRepresentationKHR (0x0x7f4465699e40) 0
+
+Class VkDebugReportCallbackCreateInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkDebugReportCallbackCreateInfoEXT (0x0x7f4465699ea0) 0
+
+Class VkPipelineRasterizationStateRasterizationOrderAMD
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineRasterizationStateRasterizationOrderAMD (0x0x7f4465699f00) 0
+
+Class VkDebugMarkerObjectNameInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkDebugMarkerObjectNameInfoEXT (0x0x7f4465699f60) 0
+
+Class VkDebugMarkerObjectTagInfoEXT
+ size=56 align=8
+ base size=56 base align=8
+VkDebugMarkerObjectTagInfoEXT (0x0x7f44652db000) 0
+
+Class VkDebugMarkerMarkerInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkDebugMarkerMarkerInfoEXT (0x0x7f44652db060) 0
+
+Class VkDedicatedAllocationImageCreateInfoNV
+ size=24 align=8
+ base size=24 base align=8
+VkDedicatedAllocationImageCreateInfoNV (0x0x7f44652db0c0) 0
+
+Class VkDedicatedAllocationBufferCreateInfoNV
+ size=24 align=8
+ base size=24 base align=8
+VkDedicatedAllocationBufferCreateInfoNV (0x0x7f44652db120) 0
+
+Class VkDedicatedAllocationMemoryAllocateInfoNV
+ size=32 align=8
+ base size=32 base align=8
+VkDedicatedAllocationMemoryAllocateInfoNV (0x0x7f44652db180) 0
+
+Class VkPhysicalDeviceTransformFeedbackFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceTransformFeedbackFeaturesEXT (0x0x7f44652db1e0) 0
+
+Class VkPhysicalDeviceTransformFeedbackPropertiesEXT
+ size=64 align=8
+ base size=64 base align=8
+VkPhysicalDeviceTransformFeedbackPropertiesEXT (0x0x7f44652db240) 0
+
+Class VkPipelineRasterizationStateStreamCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineRasterizationStateStreamCreateInfoEXT (0x0x7f44652db2a0) 0
+
+Class VkImageViewHandleInfoNVX
+ size=40 align=8
+ base size=40 base align=8
+VkImageViewHandleInfoNVX (0x0x7f44652db300) 0
+
+Class VkTextureLODGatherFormatPropertiesAMD
+ size=24 align=8
+ base size=24 base align=8
+VkTextureLODGatherFormatPropertiesAMD (0x0x7f44652db360) 0
+
+Class VkShaderResourceUsageAMD
+ size=32 align=8
+ base size=32 base align=8
+VkShaderResourceUsageAMD (0x0x7f44652db3c0) 0
+
+Class VkShaderStatisticsInfoAMD
+ size=72 align=8
+ base size=72 base align=8
+VkShaderStatisticsInfoAMD (0x0x7f44652db420) 0
+
+Class VkPhysicalDeviceCornerSampledImageFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceCornerSampledImageFeaturesNV (0x0x7f44652db480) 0
+
+Class VkExternalImageFormatPropertiesNV
+ size=48 align=8
+ base size=48 base align=8
+VkExternalImageFormatPropertiesNV (0x0x7f44652db4e0) 0
+
+Class VkExternalMemoryImageCreateInfoNV
+ size=24 align=8
+ base size=24 base align=8
+VkExternalMemoryImageCreateInfoNV (0x0x7f44652db540) 0
+
+Class VkExportMemoryAllocateInfoNV
+ size=24 align=8
+ base size=24 base align=8
+VkExportMemoryAllocateInfoNV (0x0x7f44652db5a0) 0
+
+Class VkValidationFlagsEXT
+ size=32 align=8
+ base size=32 base align=8
+VkValidationFlagsEXT (0x0x7f44652db600) 0
+
+Class VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT (0x0x7f44652db660) 0
+
+Class VkImageViewASTCDecodeModeEXT
+ size=24 align=8
+ base size=24 base align=8
+VkImageViewASTCDecodeModeEXT (0x0x7f44652db6c0) 0
+
+Class VkPhysicalDeviceASTCDecodeFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceASTCDecodeFeaturesEXT (0x0x7f44652db720) 0
+
+Class VkConditionalRenderingBeginInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkConditionalRenderingBeginInfoEXT (0x0x7f44652db780) 0
+
+Class VkPhysicalDeviceConditionalRenderingFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceConditionalRenderingFeaturesEXT (0x0x7f44652db7e0) 0
+
+Class VkCommandBufferInheritanceConditionalRenderingInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkCommandBufferInheritanceConditionalRenderingInfoEXT (0x0x7f44652db840) 0
+
+Class VkDeviceGeneratedCommandsFeaturesNVX
+ size=24 align=8
+ base size=24 base align=8
+VkDeviceGeneratedCommandsFeaturesNVX (0x0x7f44652db8a0) 0
+
+Class VkDeviceGeneratedCommandsLimitsNVX
+ size=40 align=8
+ base size=40 base align=8
+VkDeviceGeneratedCommandsLimitsNVX (0x0x7f44652db900) 0
+
+Class VkIndirectCommandsTokenNVX
+ size=24 align=8
+ base size=24 base align=8
+VkIndirectCommandsTokenNVX (0x0x7f44652db960) 0
+
+Class VkIndirectCommandsLayoutTokenNVX
+ size=16 align=4
+ base size=16 base align=4
+VkIndirectCommandsLayoutTokenNVX (0x0x7f44652db9c0) 0
+
+Class VkIndirectCommandsLayoutCreateInfoNVX
+ size=40 align=8
+ base size=40 base align=8
+VkIndirectCommandsLayoutCreateInfoNVX (0x0x7f44652dba20) 0
+
+Class VkCmdProcessCommandsInfoNVX
+ size=96 align=8
+ base size=96 base align=8
+VkCmdProcessCommandsInfoNVX (0x0x7f44652dba80) 0
+
+Class VkCmdReserveSpaceForCommandsInfoNVX
+ size=40 align=8
+ base size=40 base align=8
+VkCmdReserveSpaceForCommandsInfoNVX (0x0x7f44652dbae0) 0
+
+Class VkObjectTableCreateInfoNVX
+ size=72 align=8
+ base size=72 base align=8
+VkObjectTableCreateInfoNVX (0x0x7f44652dbb40) 0
+
+Class VkObjectTableEntryNVX
+ size=8 align=4
+ base size=8 base align=4
+VkObjectTableEntryNVX (0x0x7f44652dbba0) 0
+
+Class VkObjectTablePipelineEntryNVX
+ size=16 align=8
+ base size=16 base align=8
+VkObjectTablePipelineEntryNVX (0x0x7f44652dbc00) 0
+
+Class VkObjectTableDescriptorSetEntryNVX
+ size=24 align=8
+ base size=24 base align=8
+VkObjectTableDescriptorSetEntryNVX (0x0x7f44652dbc60) 0
+
+Class VkObjectTableVertexBufferEntryNVX
+ size=16 align=8
+ base size=16 base align=8
+VkObjectTableVertexBufferEntryNVX (0x0x7f44652dbcc0) 0
+
+Class VkObjectTableIndexBufferEntryNVX
+ size=24 align=8
+ base size=24 base align=8
+VkObjectTableIndexBufferEntryNVX (0x0x7f44652dbd20) 0
+
+Class VkObjectTablePushConstantEntryNVX
+ size=24 align=8
+ base size=24 base align=8
+VkObjectTablePushConstantEntryNVX (0x0x7f44652dbd80) 0
+
+Class VkViewportWScalingNV
+ size=8 align=4
+ base size=8 base align=4
+VkViewportWScalingNV (0x0x7f44652dbde0) 0
+
+Class VkPipelineViewportWScalingStateCreateInfoNV
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineViewportWScalingStateCreateInfoNV (0x0x7f44652dbe40) 0
+
+Class VkSurfaceCapabilities2EXT
+ size=72 align=8
+ base size=72 base align=8
+VkSurfaceCapabilities2EXT (0x0x7f44652dbea0) 0
+
+Class VkDisplayPowerInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkDisplayPowerInfoEXT (0x0x7f44652dbf00) 0
+
+Class VkDeviceEventInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkDeviceEventInfoEXT (0x0x7f44652dbf60) 0
+
+Class VkDisplayEventInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkDisplayEventInfoEXT (0x0x7f4465308000) 0
+
+Class VkSwapchainCounterCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkSwapchainCounterCreateInfoEXT (0x0x7f4465308060) 0
+
+Class VkRefreshCycleDurationGOOGLE
+ size=8 align=8
+ base size=8 base align=8
+VkRefreshCycleDurationGOOGLE (0x0x7f44653080c0) 0
+
+Class VkPastPresentationTimingGOOGLE
+ size=40 align=8
+ base size=40 base align=8
+VkPastPresentationTimingGOOGLE (0x0x7f4465308120) 0
+
+Class VkPresentTimeGOOGLE
+ size=16 align=8
+ base size=16 base align=8
+VkPresentTimeGOOGLE (0x0x7f4465308180) 0
+
+Class VkPresentTimesInfoGOOGLE
+ size=32 align=8
+ base size=32 base align=8
+VkPresentTimesInfoGOOGLE (0x0x7f44653081e0) 0
+
+Class VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX (0x0x7f4465308240) 0
+
+Class VkViewportSwizzleNV
+ size=16 align=4
+ base size=16 base align=4
+VkViewportSwizzleNV (0x0x7f44653082a0) 0
+
+Class VkPipelineViewportSwizzleStateCreateInfoNV
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineViewportSwizzleStateCreateInfoNV (0x0x7f4465308300) 0
+
+Class VkPhysicalDeviceDiscardRectanglePropertiesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceDiscardRectanglePropertiesEXT (0x0x7f4465308360) 0
+
+Class VkPipelineDiscardRectangleStateCreateInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkPipelineDiscardRectangleStateCreateInfoEXT (0x0x7f44653083c0) 0
+
+Class VkPhysicalDeviceConservativeRasterizationPropertiesEXT
+ size=56 align=8
+ base size=56 base align=8
+VkPhysicalDeviceConservativeRasterizationPropertiesEXT (0x0x7f4465308420) 0
+
+Class VkPipelineRasterizationConservativeStateCreateInfoEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineRasterizationConservativeStateCreateInfoEXT (0x0x7f4465308480) 0
+
+Class VkPhysicalDeviceDepthClipEnableFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceDepthClipEnableFeaturesEXT (0x0x7f44653084e0) 0
+
+Class VkPipelineRasterizationDepthClipStateCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineRasterizationDepthClipStateCreateInfoEXT (0x0x7f4465308540) 0
+
+Class VkXYColorEXT
+ size=8 align=4
+ base size=8 base align=4
+VkXYColorEXT (0x0x7f44653085a0) 0
+
+Class VkHdrMetadataEXT
+ size=64 align=8
+ base size=64 base align=8
+VkHdrMetadataEXT (0x0x7f4465308600) 0
+
+Class VkDebugUtilsObjectNameInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkDebugUtilsObjectNameInfoEXT (0x0x7f44653086c0) 0
+
+Class VkDebugUtilsObjectTagInfoEXT
+ size=56 align=8
+ base size=56 base align=8
+VkDebugUtilsObjectTagInfoEXT (0x0x7f4465308720) 0
+
+Class VkDebugUtilsLabelEXT
+ size=40 align=8
+ base size=40 base align=8
+VkDebugUtilsLabelEXT (0x0x7f4465308780) 0
+
+Class VkDebugUtilsMessengerCallbackDataEXT
+ size=96 align=8
+ base size=96 base align=8
+VkDebugUtilsMessengerCallbackDataEXT (0x0x7f44653087e0) 0
+
+Class VkDebugUtilsMessengerCreateInfoEXT
+ size=48 align=8
+ base size=48 base align=8
+VkDebugUtilsMessengerCreateInfoEXT (0x0x7f4465308840) 0
+
+Class VkPhysicalDeviceInlineUniformBlockFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceInlineUniformBlockFeaturesEXT (0x0x7f44653088a0) 0
+
+Class VkPhysicalDeviceInlineUniformBlockPropertiesEXT
+ size=40 align=8
+ base size=40 base align=8
+VkPhysicalDeviceInlineUniformBlockPropertiesEXT (0x0x7f4465308900) 0
+
+Class VkWriteDescriptorSetInlineUniformBlockEXT
+ size=32 align=8
+ base size=32 base align=8
+VkWriteDescriptorSetInlineUniformBlockEXT (0x0x7f4465308960) 0
+
+Class VkDescriptorPoolInlineUniformBlockCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkDescriptorPoolInlineUniformBlockCreateInfoEXT (0x0x7f44653089c0) 0
+
+Class VkSampleLocationEXT
+ size=8 align=4
+ base size=8 base align=4
+VkSampleLocationEXT (0x0x7f4465308a20) 0
+
+Class VkSampleLocationsInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkSampleLocationsInfoEXT (0x0x7f4465308a80) 0
+
+Class VkAttachmentSampleLocationsEXT
+ size=48 align=8
+ base size=48 base align=8
+VkAttachmentSampleLocationsEXT (0x0x7f4465308ae0) 0
+
+Class VkSubpassSampleLocationsEXT
+ size=48 align=8
+ base size=48 base align=8
+VkSubpassSampleLocationsEXT (0x0x7f4465308b40) 0
+
+Class VkRenderPassSampleLocationsBeginInfoEXT
+ size=48 align=8
+ base size=48 base align=8
+VkRenderPassSampleLocationsBeginInfoEXT (0x0x7f4465308ba0) 0
+
+Class VkPipelineSampleLocationsStateCreateInfoEXT
+ size=64 align=8
+ base size=64 base align=8
+VkPipelineSampleLocationsStateCreateInfoEXT (0x0x7f4465308c00) 0
+
+Class VkPhysicalDeviceSampleLocationsPropertiesEXT
+ size=48 align=8
+ base size=48 base align=8
+VkPhysicalDeviceSampleLocationsPropertiesEXT (0x0x7f4465308c60) 0
+
+Class VkMultisamplePropertiesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkMultisamplePropertiesEXT (0x0x7f4465308cc0) 0
+
+Class VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT (0x0x7f4465308d20) 0
+
+Class VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
+ size=40 align=8
+ base size=40 base align=8
+VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT (0x0x7f4465308d80) 0
+
+Class VkPipelineColorBlendAdvancedStateCreateInfoEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineColorBlendAdvancedStateCreateInfoEXT (0x0x7f4465308de0) 0
+
+Class VkPipelineCoverageToColorStateCreateInfoNV
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineCoverageToColorStateCreateInfoNV (0x0x7f4465308e40) 0
+
+Class VkPipelineCoverageModulationStateCreateInfoNV
+ size=40 align=8
+ base size=40 base align=8
+VkPipelineCoverageModulationStateCreateInfoNV (0x0x7f4465308ea0) 0
+
+Class VkPhysicalDeviceShaderSMBuiltinsPropertiesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderSMBuiltinsPropertiesNV (0x0x7f4465308f00) 0
+
+Class VkPhysicalDeviceShaderSMBuiltinsFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderSMBuiltinsFeaturesNV (0x0x7f4465308f60) 0
+
+Class VkDrmFormatModifierPropertiesEXT
+ size=16 align=8
+ base size=16 base align=8
+VkDrmFormatModifierPropertiesEXT (0x0x7f4465330000) 0
+
+Class VkDrmFormatModifierPropertiesListEXT
+ size=32 align=8
+ base size=32 base align=8
+VkDrmFormatModifierPropertiesListEXT (0x0x7f4465330060) 0
+
+Class VkPhysicalDeviceImageDrmFormatModifierInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkPhysicalDeviceImageDrmFormatModifierInfoEXT (0x0x7f44653300c0) 0
+
+Class VkImageDrmFormatModifierListCreateInfoEXT
+ size=32 align=8
+ base size=32 base align=8
+VkImageDrmFormatModifierListCreateInfoEXT (0x0x7f4465330120) 0
+
+Class VkImageDrmFormatModifierExplicitCreateInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkImageDrmFormatModifierExplicitCreateInfoEXT (0x0x7f4465330180) 0
+
+Class VkImageDrmFormatModifierPropertiesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkImageDrmFormatModifierPropertiesEXT (0x0x7f44653301e0) 0
+
+Class VkValidationCacheCreateInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkValidationCacheCreateInfoEXT (0x0x7f4465330240) 0
+
+Class VkShaderModuleValidationCacheCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkShaderModuleValidationCacheCreateInfoEXT (0x0x7f44653302a0) 0
+
+Class VkShadingRatePaletteNV
+ size=16 align=8
+ base size=16 base align=8
+VkShadingRatePaletteNV (0x0x7f4465330300) 0
+
+Class VkPipelineViewportShadingRateImageStateCreateInfoNV
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineViewportShadingRateImageStateCreateInfoNV (0x0x7f4465330360) 0
+
+Class VkPhysicalDeviceShadingRateImageFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShadingRateImageFeaturesNV (0x0x7f44653303c0) 0
+
+Class VkPhysicalDeviceShadingRateImagePropertiesNV
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceShadingRateImagePropertiesNV (0x0x7f4465330420) 0
+
+Class VkCoarseSampleLocationNV
+ size=12 align=4
+ base size=12 base align=4
+VkCoarseSampleLocationNV (0x0x7f4465330480) 0
+
+Class VkCoarseSampleOrderCustomNV
+ size=24 align=8
+ base size=24 base align=8
+VkCoarseSampleOrderCustomNV (0x0x7f44653304e0) 0
+
+Class VkPipelineViewportCoarseSampleOrderStateCreateInfoNV
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineViewportCoarseSampleOrderStateCreateInfoNV (0x0x7f4465330540) 0
+
+Class VkRayTracingShaderGroupCreateInfoNV
+ size=40 align=8
+ base size=40 base align=8
+VkRayTracingShaderGroupCreateInfoNV (0x0x7f44653305a0) 0
+
+Class VkRayTracingPipelineCreateInfoNV
+ size=80 align=8
+ base size=80 base align=8
+VkRayTracingPipelineCreateInfoNV (0x0x7f4465330600) 0
+
+Class VkGeometryTrianglesNV
+ size=96 align=8
+ base size=96 base align=8
+VkGeometryTrianglesNV (0x0x7f4465330660) 0
+
+Class VkGeometryAABBNV
+ size=40 align=8
+ base size=40 base align=8
+VkGeometryAABBNV (0x0x7f44653306c0) 0
+
+Class VkGeometryDataNV
+ size=136 align=8
+ base size=136 base align=8
+VkGeometryDataNV (0x0x7f4465330720) 0
+
+Class VkGeometryNV
+ size=168 align=8
+ base size=168 base align=8
+VkGeometryNV (0x0x7f4465330780) 0
+
+Class VkAccelerationStructureInfoNV
+ size=40 align=8
+ base size=40 base align=8
+VkAccelerationStructureInfoNV (0x0x7f44653307e0) 0
+
+Class VkAccelerationStructureCreateInfoNV
+ size=64 align=8
+ base size=64 base align=8
+VkAccelerationStructureCreateInfoNV (0x0x7f4465330840) 0
+
+Class VkBindAccelerationStructureMemoryInfoNV
+ size=56 align=8
+ base size=56 base align=8
+VkBindAccelerationStructureMemoryInfoNV (0x0x7f44653308a0) 0
+
+Class VkWriteDescriptorSetAccelerationStructureNV
+ size=32 align=8
+ base size=32 base align=8
+VkWriteDescriptorSetAccelerationStructureNV (0x0x7f4465330900) 0
+
+Class VkAccelerationStructureMemoryRequirementsInfoNV
+ size=32 align=8
+ base size=32 base align=8
+VkAccelerationStructureMemoryRequirementsInfoNV (0x0x7f4465330960) 0
+
+Class VkPhysicalDeviceRayTracingPropertiesNV
+ size=64 align=8
+ base size=64 base align=8
+VkPhysicalDeviceRayTracingPropertiesNV (0x0x7f44653309c0) 0
+
+Class VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV (0x0x7f4465330a80) 0
+
+Class VkPipelineRepresentativeFragmentTestStateCreateInfoNV
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineRepresentativeFragmentTestStateCreateInfoNV (0x0x7f4465330ae0) 0
+
+Class VkPhysicalDeviceImageViewImageFormatInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceImageViewImageFormatInfoEXT (0x0x7f4465330b40) 0
+
+Class VkFilterCubicImageViewImageFormatPropertiesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkFilterCubicImageViewImageFormatPropertiesEXT (0x0x7f4465330ba0) 0
+
+Class VkDeviceQueueGlobalPriorityCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkDeviceQueueGlobalPriorityCreateInfoEXT (0x0x7f4465330c00) 0
+
+Class VkImportMemoryHostPointerInfoEXT
+ size=32 align=8
+ base size=32 base align=8
+VkImportMemoryHostPointerInfoEXT (0x0x7f4465330c60) 0
+
+Class VkMemoryHostPointerPropertiesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkMemoryHostPointerPropertiesEXT (0x0x7f4465330cc0) 0
+
+Class VkPhysicalDeviceExternalMemoryHostPropertiesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceExternalMemoryHostPropertiesEXT (0x0x7f4465330d20) 0
+
+Class VkPipelineCompilerControlCreateInfoAMD
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineCompilerControlCreateInfoAMD (0x0x7f4465330d80) 0
+
+Class VkCalibratedTimestampInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkCalibratedTimestampInfoEXT (0x0x7f4465330de0) 0
+
+Class VkPhysicalDeviceShaderCorePropertiesAMD
+ size=72 align=8
+ base size=72 base align=8
+VkPhysicalDeviceShaderCorePropertiesAMD (0x0x7f4465330e40) 0
+
+Class VkDeviceMemoryOverallocationCreateInfoAMD
+ size=24 align=8
+ base size=24 base align=8
+VkDeviceMemoryOverallocationCreateInfoAMD (0x0x7f4465330ea0) 0
+
+Class VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT (0x0x7f4465330f00) 0
+
+Class VkVertexInputBindingDivisorDescriptionEXT
+ size=8 align=4
+ base size=8 base align=4
+VkVertexInputBindingDivisorDescriptionEXT (0x0x7f4465330f60) 0
+
+Class VkPipelineVertexInputDivisorStateCreateInfoEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineVertexInputDivisorStateCreateInfoEXT (0x0x7f4465360000) 0
+
+Class VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT (0x0x7f4465360060) 0
+
+Class VkPipelineCreationFeedbackEXT
+ size=16 align=8
+ base size=16 base align=8
+VkPipelineCreationFeedbackEXT (0x0x7f44653600c0) 0
+
+Class VkPipelineCreationFeedbackCreateInfoEXT
+ size=40 align=8
+ base size=40 base align=8
+VkPipelineCreationFeedbackCreateInfoEXT (0x0x7f4465360120) 0
+
+Class VkPhysicalDeviceComputeShaderDerivativesFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceComputeShaderDerivativesFeaturesNV (0x0x7f4465360180) 0
+
+Class VkPhysicalDeviceMeshShaderFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceMeshShaderFeaturesNV (0x0x7f44653601e0) 0
+
+Class VkPhysicalDeviceMeshShaderPropertiesNV
+ size=88 align=8
+ base size=88 base align=8
+VkPhysicalDeviceMeshShaderPropertiesNV (0x0x7f4465360240) 0
+
+Class VkDrawMeshTasksIndirectCommandNV
+ size=8 align=4
+ base size=8 base align=4
+VkDrawMeshTasksIndirectCommandNV (0x0x7f44653602a0) 0
+
+Class VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV (0x0x7f4465360300) 0
+
+Class VkPhysicalDeviceShaderImageFootprintFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderImageFootprintFeaturesNV (0x0x7f4465360360) 0
+
+Class VkPipelineViewportExclusiveScissorStateCreateInfoNV
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineViewportExclusiveScissorStateCreateInfoNV (0x0x7f44653603c0) 0
+
+Class VkPhysicalDeviceExclusiveScissorFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceExclusiveScissorFeaturesNV (0x0x7f4465360420) 0
+
+Class VkQueueFamilyCheckpointPropertiesNV
+ size=24 align=8
+ base size=24 base align=8
+VkQueueFamilyCheckpointPropertiesNV (0x0x7f4465360480) 0
+
+Class VkCheckpointDataNV
+ size=32 align=8
+ base size=32 base align=8
+VkCheckpointDataNV (0x0x7f44653604e0) 0
+
+Class VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL (0x0x7f4465360540) 0
+
+Class VkPerformanceValueDataINTEL
+ size=8 align=8
+ base size=8 base align=8
+VkPerformanceValueDataINTEL (0x0x7f44653605a0) 0
+
+Class VkPerformanceValueINTEL
+ size=16 align=8
+ base size=16 base align=8
+VkPerformanceValueINTEL (0x0x7f4465360600) 0
+
+Class VkInitializePerformanceApiInfoINTEL
+ size=24 align=8
+ base size=24 base align=8
+VkInitializePerformanceApiInfoINTEL (0x0x7f4465360660) 0
+
+Class VkQueryPoolCreateInfoINTEL
+ size=24 align=8
+ base size=24 base align=8
+VkQueryPoolCreateInfoINTEL (0x0x7f44653606c0) 0
+
+Class VkPerformanceMarkerInfoINTEL
+ size=24 align=8
+ base size=24 base align=8
+VkPerformanceMarkerInfoINTEL (0x0x7f4465360720) 0
+
+Class VkPerformanceStreamMarkerInfoINTEL
+ size=24 align=8
+ base size=24 base align=8
+VkPerformanceStreamMarkerInfoINTEL (0x0x7f4465360780) 0
+
+Class VkPerformanceOverrideInfoINTEL
+ size=32 align=8
+ base size=32 base align=8
+VkPerformanceOverrideInfoINTEL (0x0x7f44653607e0) 0
+
+Class VkPerformanceConfigurationAcquireInfoINTEL
+ size=24 align=8
+ base size=24 base align=8
+VkPerformanceConfigurationAcquireInfoINTEL (0x0x7f4465360840) 0
+
+Class VkPhysicalDevicePCIBusInfoPropertiesEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDevicePCIBusInfoPropertiesEXT (0x0x7f44653608a0) 0
+
+Class VkDisplayNativeHdrSurfaceCapabilitiesAMD
+ size=24 align=8
+ base size=24 base align=8
+VkDisplayNativeHdrSurfaceCapabilitiesAMD (0x0x7f4465360900) 0
+
+Class VkSwapchainDisplayNativeHdrCreateInfoAMD
+ size=24 align=8
+ base size=24 base align=8
+VkSwapchainDisplayNativeHdrCreateInfoAMD (0x0x7f4465360960) 0
+
+Class VkPhysicalDeviceFragmentDensityMapFeaturesEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceFragmentDensityMapFeaturesEXT (0x0x7f44653609c0) 0
+
+Class VkPhysicalDeviceFragmentDensityMapPropertiesEXT
+ size=40 align=8
+ base size=40 base align=8
+VkPhysicalDeviceFragmentDensityMapPropertiesEXT (0x0x7f4465360a20) 0
+
+Class VkRenderPassFragmentDensityMapCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkRenderPassFragmentDensityMapCreateInfoEXT (0x0x7f4465360a80) 0
+
+Class VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceSubgroupSizeControlFeaturesEXT (0x0x7f4465360ae0) 0
+
+Class VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceSubgroupSizeControlPropertiesEXT (0x0x7f4465360b40) 0
+
+Class VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT (0x0x7f4465360ba0) 0
+
+Class VkPhysicalDeviceShaderCoreProperties2AMD
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderCoreProperties2AMD (0x0x7f4465360c00) 0
+
+Class VkPhysicalDeviceCoherentMemoryFeaturesAMD
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceCoherentMemoryFeaturesAMD (0x0x7f4465360c60) 0
+
+Class VkPhysicalDeviceMemoryBudgetPropertiesEXT
+ size=272 align=8
+ base size=272 base align=8
+VkPhysicalDeviceMemoryBudgetPropertiesEXT (0x0x7f4465360cc0) 0
+
+Class VkPhysicalDeviceMemoryPriorityFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceMemoryPriorityFeaturesEXT (0x0x7f4465360d20) 0
+
+Class VkMemoryPriorityAllocateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkMemoryPriorityAllocateInfoEXT (0x0x7f4465360d80) 0
+
+Class VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV (0x0x7f4465360de0) 0
+
+Class VkPhysicalDeviceBufferDeviceAddressFeaturesEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceBufferDeviceAddressFeaturesEXT (0x0x7f4465360e40) 0
+
+Class VkBufferDeviceAddressCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkBufferDeviceAddressCreateInfoEXT (0x0x7f4465360ea0) 0
+
+Class VkPhysicalDeviceToolPropertiesEXT
+ size=1048 align=8
+ base size=1048 base align=8
+VkPhysicalDeviceToolPropertiesEXT (0x0x7f4465360f00) 0
+
+Class VkValidationFeaturesEXT
+ size=48 align=8
+ base size=48 base align=8
+VkValidationFeaturesEXT (0x0x7f4465360f60) 0
+
+Class VkCooperativeMatrixPropertiesNV
+ size=48 align=8
+ base size=48 base align=8
+VkCooperativeMatrixPropertiesNV (0x0x7f4465385000) 0
+
+Class VkPhysicalDeviceCooperativeMatrixFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceCooperativeMatrixFeaturesNV (0x0x7f44653850c0) 0
+
+Class VkPhysicalDeviceCooperativeMatrixPropertiesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceCooperativeMatrixPropertiesNV (0x0x7f4465385120) 0
+
+Class VkPhysicalDeviceCoverageReductionModeFeaturesNV
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceCoverageReductionModeFeaturesNV (0x0x7f4465385180) 0
+
+Class VkPipelineCoverageReductionStateCreateInfoNV
+ size=24 align=8
+ base size=24 base align=8
+VkPipelineCoverageReductionStateCreateInfoNV (0x0x7f44653851e0) 0
+
+Class VkFramebufferMixedSamplesCombinationNV
+ size=32 align=8
+ base size=32 base align=8
+VkFramebufferMixedSamplesCombinationNV (0x0x7f4465385240) 0
+
+Class VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT (0x0x7f44653852a0) 0
+
+Class VkPhysicalDeviceYcbcrImageArraysFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceYcbcrImageArraysFeaturesEXT (0x0x7f4465385300) 0
+
+Class VkHeadlessSurfaceCreateInfoEXT
+ size=24 align=8
+ base size=24 base align=8
+VkHeadlessSurfaceCreateInfoEXT (0x0x7f4465385360) 0
+
+Class VkPhysicalDeviceLineRasterizationFeaturesEXT
+ size=40 align=8
+ base size=40 base align=8
+VkPhysicalDeviceLineRasterizationFeaturesEXT (0x0x7f44653853c0) 0
+
+Class VkPhysicalDeviceLineRasterizationPropertiesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceLineRasterizationPropertiesEXT (0x0x7f4465385420) 0
+
+Class VkPipelineRasterizationLineStateCreateInfoEXT
+ size=32 align=8
+ base size=32 base align=8
+VkPipelineRasterizationLineStateCreateInfoEXT (0x0x7f4465385480) 0
+
+Class VkPhysicalDeviceIndexTypeUint8FeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceIndexTypeUint8FeaturesEXT (0x0x7f44653854e0) 0
+
+Class VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT (0x0x7f4465385540) 0
+
+Class VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
+ size=24 align=8
+ base size=24 base align=8
+VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT (0x0x7f44653855a0) 0
+
+Class VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
+ size=48 align=8
+ base size=48 base align=8
+VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT (0x0x7f4465385600) 0
+
+Class QVulkanLayer
+ size=64 align=8
+ base size=64 base align=8
+QVulkanLayer (0x0x7f4465385660) 0
+
+Class QVulkanExtension
+ size=32 align=8
+ base size=28 base align=8
+QVulkanExtension (0x0x7f44653ba300) 0
+
+Class QVulkanInstance
+ size=8 align=8
+ base size=8 base align=8
+QVulkanInstance (0x0x7f44653e3180) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7f44653e3540) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f44653e3600) 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 (0x0x7f44653d4888) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+ QObject (0x0x7f44653e35a0) 0
+ primary-for QQuickTextureFactory (0x0x7f44653d4888)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f44653e3720) 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 (0x0x7f44653d48f0) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+ QObject (0x0x7f44653e36c0) 0
+ primary-for QQuickImageResponse (0x0x7f44653d48f0)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7f44653e3900) 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 (0x0x7f44653d4958) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+ QQmlImageProviderBase (0x0x7f44653d49c0) 0
+ primary-for QQuickImageProvider (0x0x7f44653d4958)
+ QObject (0x0x7f44653e38a0) 0
+ primary-for QQmlImageProviderBase (0x0x7f44653d49c0)
+
+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 (0x0x7f44653d4a28) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+ QQuickImageProvider (0x0x7f44653d4a90) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f44653d4a28)
+ QQmlImageProviderBase (0x0x7f44653d4af8) 0
+ primary-for QQuickImageProvider (0x0x7f44653d4a90)
+ QObject (0x0x7f44653e39c0) 0
+ primary-for QQmlImageProviderBase (0x0x7f44653d4af8)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f44653e3a80) 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 (0x0x7f44653d4b60) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+ QObject (0x0x7f44653e3a20) 0
+ primary-for QQuickItemGrabResult (0x0x7f44653d4b60)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f44653e3cc0) 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 (0x0x7f44653d4bc8) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+ QQuickItem (0x0x7f44653b0540) 0
+ primary-for QQuickPaintedItem (0x0x7f44653d4bc8)
+ QObject (0x0x7f44653e3c00) 0
+ primary-for QQuickItem (0x0x7f44653b0540)
+ QQmlParserStatus (0x0x7f44653e3c60) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f4465451360) 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 (0x0x7f44653d4d68) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+ QObject (0x0x7f4465451300) 0
+ primary-for QQuickRenderControl (0x0x7f44653d4d68)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7f4465451540) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f44654516c0) 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 (0x0x7f44653d4dd0) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+ QObject (0x0x7f4465451660) 0
+ primary-for QQuickTextDocument (0x0x7f44653d4dd0)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f4465451ae0) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f4465451b40) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f4465451ba0) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f4465451c00) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f4465451c60) 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 (0x0x7f4465451a80) 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 (0x0x7f446549e660) 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 (0x0x7f44650d20d0) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+ QSGNode (0x0x7f446549eea0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f44650d20d0)
+
+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 (0x0x7f44650d2138) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+ QSGBasicGeometryNode (0x0x7f44650d21a0) 0
+ primary-for QSGGeometryNode (0x0x7f44650d2138)
+ QSGNode (0x0x7f44650ee180) 0
+ primary-for QSGBasicGeometryNode (0x0x7f44650d21a0)
+
+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 (0x0x7f44650d2208) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+ QSGBasicGeometryNode (0x0x7f44650d2270) 0
+ primary-for QSGClipNode (0x0x7f44650d2208)
+ QSGNode (0x0x7f44650ee360) 0
+ primary-for QSGBasicGeometryNode (0x0x7f44650d2270)
+
+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 (0x0x7f44650d22d8) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+ QSGNode (0x0x7f44650ee480) 0
+ primary-for QSGTransformNode (0x0x7f44650d22d8)
+
+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 (0x0x7f44650d2340) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+ QSGNode (0x0x7f44650ee5a0) 0
+ primary-for QSGRootNode (0x0x7f44650d2340)
+
+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 (0x0x7f44650d2c30) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+ QSGNode (0x0x7f44650eef60) 0
+ primary-for QSGOpacityNode (0x0x7f44650d2c30)
+
+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 (0x0x7f4465146060) 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 (0x0x7f4465146600) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f4465146d20) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f4465146d80) 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 (0x0x7f44650d2f08) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+ QWindow (0x0x7f446516c230) 0
+ primary-for QQuickWindow (0x0x7f44650d2f08)
+ QObject (0x0x7f4465146c60) 0
+ primary-for QWindow (0x0x7f446516c230)
+ QSurface (0x0x7f4465146cc0) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f44651c9540) 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 (0x0x7f44651cb068) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+ QQuickWindow (0x0x7f44651cb0d0) 0
+ primary-for QQuickView (0x0x7f44651cb068)
+ QWindow (0x0x7f446516c9a0) 0
+ primary-for QQuickWindow (0x0x7f44651cb0d0)
+ QObject (0x0x7f44651c9480) 0
+ primary-for QWindow (0x0x7f446516c9a0)
+ QSurface (0x0x7f44651c94e0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f44651c9840) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f44651c9900) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=36 align=4
+ base size=36 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7f44651c9b40) 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 (0x0x7f44651c98a0) 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 (0x0x7f44652286c0) 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 (0x0x7f44651cb618) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+ QSGMaterial (0x0x7f4465228a80) 0
+ primary-for QSGFlatColorMaterial (0x0x7f44651cb618)
+
+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 (0x0x7f4465228b40) 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 (0x0x7f4465228c00) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f4465228d20) 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 (0x0x7f44651cb680) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+ QObject (0x0x7f4465228cc0) 0
+ primary-for QSGTexture (0x0x7f44651cb680)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f4465228f60) 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 (0x0x7f44651cb6e8) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+ QSGTexture (0x0x7f44651cb750) 0
+ primary-for QSGDynamicTexture (0x0x7f44651cb6e8)
+ QObject (0x0x7f4465228f00) 0
+ primary-for QSGTexture (0x0x7f44651cb750)
+
+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 (0x0x7f44651cb7b8) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+ QSGGeometryNode (0x0x7f44651cb820) 0
+ primary-for QSGImageNode (0x0x7f44651cb7b8)
+ QSGBasicGeometryNode (0x0x7f44651cb888) 0
+ primary-for QSGGeometryNode (0x0x7f44651cb820)
+ QSGNode (0x0x7f44652ab060) 0
+ primary-for QSGBasicGeometryNode (0x0x7f44651cb888)
+
+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 (0x0x7f44651cba28) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+ QSGGeometryNode (0x0x7f44651cba90) 0
+ primary-for QSGNinePatchNode (0x0x7f44651cba28)
+ QSGBasicGeometryNode (0x0x7f44651cbaf8) 0
+ primary-for QSGGeometryNode (0x0x7f44651cba90)
+ QSGNode (0x0x7f44652ab480) 0
+ primary-for QSGBasicGeometryNode (0x0x7f44651cbaf8)
+
+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 (0x0x7f44651cbb60) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+ QSGGeometryNode (0x0x7f44651cbbc8) 0
+ primary-for QSGRectangleNode (0x0x7f44651cbb60)
+ QSGBasicGeometryNode (0x0x7f44651cbc30) 0
+ primary-for QSGGeometryNode (0x0x7f44651cbbc8)
+ QSGNode (0x0x7f44652ab4e0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f44651cbc30)
+
+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 (0x0x7f44652ab600) 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 (0x0x7f44651cbc98) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+ QSGNode (0x0x7f44652ab5a0) 0
+ primary-for QSGRenderNode (0x0x7f44651cbc98)
+
+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 (0x0x7f44651cbf70) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+ QSGGeometryNode (0x0x7f4464f16000) 0
+ primary-for QSGSimpleRectNode (0x0x7f44651cbf70)
+ QSGBasicGeometryNode (0x0x7f4464f16068) 0
+ primary-for QSGGeometryNode (0x0x7f4464f16000)
+ QSGNode (0x0x7f44652abc60) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4464f16068)
+
+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 (0x0x7f4464f160d0) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+ QSGMaterial (0x0x7f44652abd20) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f4464f160d0)
+
+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 (0x0x7f4464f16138) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+ QSGOpaqueTextureMaterial (0x0x7f4464f161a0) 0
+ primary-for QSGTextureMaterial (0x0x7f4464f16138)
+ QSGMaterial (0x0x7f4464f261e0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f4464f161a0)
+
+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 (0x0x7f4464f16208) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+ QSGGeometryNode (0x0x7f4464f16270) 0
+ primary-for QSGSimpleTextureNode (0x0x7f4464f16208)
+ QSGBasicGeometryNode (0x0x7f4464f162d8) 0
+ primary-for QSGGeometryNode (0x0x7f4464f16270)
+ QSGNode (0x0x7f4464f26240) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4464f162d8)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f4464f26900) 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 (0x0x7f4464f16478) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+ QObject (0x0x7f4464f268a0) 0
+ primary-for QSGTextureProvider (0x0x7f4464f16478)
+
+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 (0x0x7f4464f164e0) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+ QSGMaterial (0x0x7f4464f269c0) 0
+ primary-for QSGVertexColorMaterial (0x0x7f4464f164e0)
+
+Class QQuickStyle
+ size=1 align=1
+ base size=0 base align=1
+QQuickStyle (0x0x7f4464f26a20) 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 = 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 (0x0x7f4464f5ee40) 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 (0x0x7f4464f6d1e0) 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 (0x0x7f4464f6d3c0) 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 (0x0x7f4464f6d720) 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 (0x0x7f4464f6d900) 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 (0x0x7f4464f6dc60) 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 (0x0x7f4464f6dde0) 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 (0x0x7f4464f8d120) 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 (0x0x7f4464f8d300) 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 (0x0x7f4464f8d660) 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 (0x0x7f4464f8d840) 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 (0x0x7f4464f8dba0) 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 (0x0x7f4464f8dd80) 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 (0x0x7f4464faa120) 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 (0x0x7f4464faa300) 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 (0x0x7f4464faa660) 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 (0x0x7f4464fc8f00) 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 (0x0x7f4464fe12a0) 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 (0x0x7f4464fe1420) 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 (0x0x7f4464fe1780) 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 (0x0x7f4464fe1900) 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 (0x0x7f4464fe1c60) 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 (0x0x7f4464fe1de0) 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 (0x0x7f4464ffc180) 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 (0x0x7f4464ffc300) 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 (0x0x7f4464ffc660) 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 (0x0x7f4464ffc7e0) 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 (0x0x7f4464ffcb40) 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 (0x0x7f4464ffccc0) 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 (0x0x7f4465018060) 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 (0x0x7f44650181e0) 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 (0x0x7f4465018540) 0 empty
+
diff --git a/tests/auto/quickcontrols2/cmake/CMakeLists.txt b/tests/auto/quickcontrols2/cmake/CMakeLists.txt
new file mode 100644
index 0000000000..7e9eb89a7d
--- /dev/null
+++ b/tests/auto/quickcontrols2/cmake/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.16)
+
+project(qmake_cmake_files)
+
+enable_testing()
+
+find_package(Qt5Core REQUIRED)
+
+include("${_Qt5CTestMacros}")
+
+test_module_includes(
+ QuickControls2 QQuickStyle
+)
diff --git a/tests/auto/quickcontrols2/controls/CMakeLists.txt b/tests/auto/quickcontrols2/controls/CMakeLists.txt
new file mode 100644
index 0000000000..f3fa8382b6
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Generated from controls.pro.
+
+add_subdirectory(basic)
+add_subdirectory(fusion)
+add_subdirectory(imagine)
+add_subdirectory(material)
+add_subdirectory(universal)
+if(WIN32)
+ add_subdirectory(windows)
+endif()
diff --git a/tests/auto/quickcontrols2/controls/basic/BLACKLIST b/tests/auto/quickcontrols2/controls/basic/BLACKLIST
new file mode 100644
index 0000000000..bdb2af0b46
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/basic/BLACKLIST
@@ -0,0 +1,10 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+# QTBUG-70597
+[Tumbler::test_itemsCorrectlyPositioned]
+*
+
+# QTBUG-95750
+[RangeSlider::test_overlappingHandles]
+b2qt
+qnx
diff --git a/tests/auto/quickcontrols2/controls/basic/CMakeLists.txt b/tests/auto/quickcontrols2/controls/basic/CMakeLists.txt
new file mode 100644
index 0000000000..6ae45f1460
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/basic/CMakeLists.txt
@@ -0,0 +1,40 @@
+# Generated from basic.pro.
+
+#####################################################################
+## tst_basic Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_basic
+ GUI
+ QMLTEST
+ SOURCES
+ tst_basic.cpp
+ DEFINES
+ TST_CONTROLS_DATA=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../data\\\"
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::QuickControls2
+ Qt::QuickTemplates2
+ TESTDATA ${test_data}
+)
+
+# Make the QML files available to Creator's locator.
+target_sources(tst_basic
+ PRIVATE
+ ${test_data}
+)
+
+set_source_files_properties(${test_data}
+ PROPERTIES
+ HEADER_FILE_ONLY ON
+)
+
+#### Keys ignored in scope 1:.:.:basic.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/../data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/controls/basic/dependencies.qml b/tests/auto/quickcontrols2/controls/basic/dependencies.qml
new file mode 100644
index 0000000000..f7d87422b5
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/basic/dependencies.qml
@@ -0,0 +1,5 @@
+import QtTest
+import QtQuick
+import QtQuick.Controls
+
+TestCase { }
diff --git a/tests/auto/quickcontrols2/controls/basic/dummy_imports.qml b/tests/auto/quickcontrols2/controls/basic/dummy_imports.qml
new file mode 100644
index 0000000000..580db56d12
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/basic/dummy_imports.qml
@@ -0,0 +1,12 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQml
+import QtQuick
+import QtQuick.NativeStyle
+import QtQuick.Layouts
+import Qt.labs.settings
+import Qt.labs.qmlmodels
+
+QtObject { }
diff --git a/tests/auto/quickcontrols2/controls/basic/tst_basic.cpp b/tests/auto/quickcontrols2/controls/basic/tst_basic.cpp
new file mode 100644
index 0000000000..95d7e36a38
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/basic/tst_basic.cpp
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+int main(int argc, char *argv[])
+{
+ QTEST_SET_MAIN_SOURCE_PATH
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+ QQuickStyle::setStyle("Basic");
+ return quick_test_main(argc, argv, "tst_controls::Basic", TST_CONTROLS_DATA);
+}
diff --git a/tests/auto/quickcontrols2/controls/data/SignalSequenceSpy.qml b/tests/auto/quickcontrols2/controls/data/SignalSequenceSpy.qml
new file mode 100644
index 0000000000..40718c0910
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/SignalSequenceSpy.qml
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+
+QtObject {
+ property QtObject target: null
+ // We could just listen to all signals (try { signal.connect(/*...*/) } catch (e))
+ // if it weren't for the fact the spy is often declared as a property of the control,
+ // which creates a "spyChanged" signal, which leads to an unexpected spyChanged signal
+ // emission. However, we don't know what the property will be called, so the signals
+ // have to be listed explicitly.
+ property var signals: []
+ property var expectedSequence: []
+ property int sequenceIndex: 0
+ property bool sequenceFailure: false
+ readonly property bool success: !sequenceFailure && sequenceIndex === expectedSequence.length
+
+ function reset() {
+ sequenceIndex = 0
+ sequenceFailure = false
+ }
+
+ property QtObject __oldTarget: null
+ property var __connections: []
+
+ onExpectedSequenceChanged: reset()
+
+ // We may call __setup from onTargetChanged and as we would read the signals property
+ // inside __setup, we may be initializing the binding for signals for the first time, which
+ // will write the value to the property and trigger onSignalsChanged and call __setup
+ // again. One easy way to protect against it is to evaluate those two dependencies upfront
+ onTargetChanged: __setup(target, signals)
+ onSignalsChanged: __setup(target, signals)
+
+ function __setup(target, signals) {
+ if (__oldTarget) {
+ __connections.forEach(function (cx) {
+ __oldTarget[cx.name].disconnect(cx.method)
+ })
+ __oldTarget = null
+ }
+
+ __connections = []
+
+ if (!!target && !!signals && signals.length > 0) {
+ signals.forEach(function (signalName) {
+ var handlerName = "on" + signalName.substr(0, 1).toUpperCase() + signalName.substr(1)
+ var method = function() { __checkSignal(signalName, arguments) }
+ target[handlerName].connect(method)
+ __connections.push({ "name": handlerName, "method": method })
+ })
+ __oldTarget = target
+ }
+ }
+
+ function __checkSignal(signalName, signalArgs) {
+ if (sequenceFailure)
+ return;
+
+ if (sequenceIndex >= expectedSequence.length) {
+ console.warn("SignalSequenceSpy: Received unexpected signal '" + signalName + "' (none expected).")
+ sequenceFailure = true
+ return
+ }
+
+ var expectedSignal = expectedSequence[sequenceIndex]
+ if (typeof expectedSignal === "string") {
+ if (expectedSignal === signalName) {
+ sequenceIndex++
+ return
+ }
+ } else if (typeof expectedSignal === "object") {
+ var expectedSignalData = expectedSignal
+ expectedSignal = expectedSignalData[0]
+ if (expectedSignal === signalName) {
+ var expectedValues = expectedSignalData[1]
+ for (var p in expectedValues) {
+ if (target[p] != expectedValues[p]) {
+ console.warn("SignalSequenceSpy: Value mismatch for property '" + p + "' after '" + signalName + "' signal." +
+ __mismatchValuesFormat(target[p], expectedValues[p]))
+ sequenceFailure = true
+ return
+ }
+ }
+ sequenceIndex++
+ return
+ }
+ }
+ console.warn("SignalSequenceSpy: Received unexpected signal (is \"" + expectedSignal + "\" listed in the signals array?)" +
+ __mismatchValuesFormat(signalName, expectedSignal))
+ sequenceFailure = true
+ }
+
+ function __mismatchValuesFormat(actual, expected) {
+ return "\n Actual : " + actual +
+ "\n Expected : " + expected +
+ "\n Sequence index: " + sequenceIndex
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/TestItem.qml b/tests/auto/quickcontrols2/controls/data/TestItem.qml
new file mode 100644
index 0000000000..df81269ce1
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/TestItem.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+
+Item {
+ id: item
+ property var createdCallback
+ property var destroyedCallback
+ Component.onCompleted: if (createdCallback) createdCallback(item)
+ Component.onDestruction: if (destroyedCallback) destroyedCallback(item)
+}
diff --git a/tests/auto/quickcontrols2/controls/data/TumblerDatePicker.qml b/tests/auto/quickcontrols2/controls/data/TumblerDatePicker.qml
new file mode 100644
index 0000000000..c11b504b75
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/TumblerDatePicker.qml
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Row {
+ id: datePicker
+
+ readonly property var days: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
+
+ property alias dayTumbler: dayTumbler
+ property alias monthTumbler: monthTumbler
+ property alias yearTumbler: yearTumbler
+
+ Tumbler {
+ id: dayTumbler
+ objectName: "dayTumbler"
+
+ Component.onCompleted: updateModel()
+
+ function updateModel() {
+ var previousIndex = dayTumbler.currentIndex;
+ var array = [];
+ var newDays = datePicker.days[monthTumbler.currentIndex];
+ for (var i = 0; i < newDays; ++i) {
+ array.push(i + 1);
+ }
+ dayTumbler.model = array;
+ dayTumbler.currentIndex = Math.min(newDays - 1, previousIndex);
+ }
+ }
+ Tumbler {
+ id: monthTumbler
+ objectName: "monthTumbler"
+ model: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+ onCurrentIndexChanged: dayTumbler.updateModel()
+ }
+ Tumbler {
+ id: yearTumbler
+ objectName: "yearTumbler"
+ model: ListModel {
+ objectName: "yearTumblerListModel"
+ Component.onCompleted: {
+ for (var i = 2000; i < 2100; ++i) {
+ append({value: i.toString()});
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/TumblerListView.qml b/tests/auto/quickcontrols2/controls/data/TumblerListView.qml
new file mode 100644
index 0000000000..a581c4327d
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/TumblerListView.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ListView {
+ implicitWidth: 60
+ implicitHeight: 200
+ snapMode: ListView.SnapToItem
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ preferredHighlightBegin: height / 2 - (height / parent.visibleItemCount / 2)
+ preferredHighlightEnd: height / 2 + (height / parent.visibleItemCount / 2)
+ clip: true
+ model: parent.model
+ delegate: Text {
+ objectName: text
+ text: "Custom" + modelData
+ opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2)
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/TumblerPathView.qml b/tests/auto/quickcontrols2/controls/data/TumblerPathView.qml
new file mode 100644
index 0000000000..0f9be0e929
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/TumblerPathView.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+PathView {
+ id: pathView
+ implicitWidth: 60
+ implicitHeight: 200
+ clip: true
+ pathItemCount: parent.visibleItemCount + 1
+ preferredHighlightBegin: 0.5
+ preferredHighlightEnd: 0.5
+ dragMargin: width / 2
+ model: parent.model
+ delegate: Text {
+ objectName: text
+ text: "Custom" + modelData
+ opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2)
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ path: Path {
+ startX: pathView.width / 2
+ startY: -pathView.delegateHeight / 2
+ PathLine {
+ x: pathView.width / 2
+ y: pathView.pathItemCount * pathView.delegateHeight - pathView.delegateHeight / 2
+ }
+ }
+
+ property real delegateHeight: parent.availableHeight / parent.visibleItemCount
+}
diff --git a/tests/auto/quickcontrols2/controls/data/splitview/fillItemInMiddle.qml b/tests/auto/quickcontrols2/controls/data/splitview/fillItemInMiddle.qml
new file mode 100644
index 0000000000..0acac9eb22
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/splitview/fillItemInMiddle.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+SplitView {
+ anchors.fill: parent
+
+ Rectangle {
+ objectName: "salmon"
+ color: objectName
+ implicitWidth: 25
+ implicitHeight: 25
+ }
+ Rectangle {
+ objectName: "navajowhite"
+ color: objectName
+ implicitWidth: 100
+ implicitHeight: 100
+
+ SplitView.fillWidth: true
+ }
+ Rectangle {
+ objectName: "steelblue"
+ color: objectName
+ implicitWidth: 200
+ implicitHeight: 200
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/splitview/fillItemOnLeft.qml b/tests/auto/quickcontrols2/controls/data/splitview/fillItemOnLeft.qml
new file mode 100644
index 0000000000..6f9c6e0b67
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/splitview/fillItemOnLeft.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+SplitView {
+ anchors.fill: parent
+
+ Rectangle {
+ objectName: "salmon"
+ color: objectName
+ implicitWidth: 25
+ implicitHeight: 25
+
+ SplitView.fillWidth: true
+ }
+ Rectangle {
+ objectName: "navajowhite"
+ color: objectName
+ implicitWidth: 200
+ implicitHeight: 200
+ }
+ Rectangle {
+ objectName: "steelblue"
+ color: objectName
+ implicitWidth: 200
+ implicitHeight: 200
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/splitview/fillItemOnTop.qml b/tests/auto/quickcontrols2/controls/data/splitview/fillItemOnTop.qml
new file mode 100644
index 0000000000..2955aa61eb
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/splitview/fillItemOnTop.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+SplitView {
+ anchors.fill: parent
+ orientation: Qt.Vertical
+
+ Rectangle {
+ objectName: "salmon"
+ color: objectName
+ implicitWidth: 25
+ implicitHeight: 25
+
+ SplitView.fillHeight: true
+ }
+ Rectangle {
+ objectName: "navajowhite"
+ color: objectName
+ implicitWidth: 200
+ implicitHeight: 200
+ }
+ Rectangle {
+ objectName: "steelblue"
+ color: objectName
+ implicitWidth: 200
+ implicitHeight: 200
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_abstractbutton.qml b/tests/auto/quickcontrols2/controls/data/tst_abstractbutton.qml
new file mode 100644
index 0000000000..2c9ce4d9ed
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_abstractbutton.qml
@@ -0,0 +1,976 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "AbstractButton"
+
+ Component {
+ id: button
+ AbstractButton {
+ width: 100
+ height: 50
+ }
+ }
+
+ Component {
+ id: item
+ Item { }
+ }
+
+ Component {
+ id: action
+ Action { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_text() {
+ var control = createTemporaryObject(button, testCase);
+ verify(control);
+
+ compare(control.text, "");
+ control.text = "Button";
+ compare(control.text, "Button");
+ control.text = "";
+ compare(control.text, "");
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(button, testCase, {padding: 6})
+ verify(control)
+ compare(control.baselineOffset, 0)
+ control.contentItem = item.createObject(control, {baselineOffset: 12})
+ compare(control.baselineOffset, 18)
+ }
+
+ function test_implicitSize() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+
+ compare(control.implicitWidth, 0)
+ compare(control.implicitHeight, 0)
+
+ control.contentItem = item.createObject(control, {implicitWidth: 10, implicitHeight: 20})
+ compare(control.implicitWidth, 10)
+ compare(control.implicitHeight, 20)
+
+ control.background = item.createObject(control, {implicitWidth: 20, implicitHeight: 30})
+ compare(control.implicitWidth, 20)
+ compare(control.implicitHeight, 30)
+
+ control.padding = 100
+ compare(control.implicitWidth, 210)
+ compare(control.implicitHeight, 220)
+ }
+
+ function test_pressPoint_data() {
+ return [
+ { tag: "mouse", mouse: true },
+ { tag: "touch", touch: true }
+ ]
+ }
+
+ function test_pressPoint(data) {
+ var control = createTemporaryObject(button, testCase, {width: 100, height: 40})
+ verify(control)
+
+ var pressXChanges = 0
+ var pressYChanges = 0
+
+ var pressXSpy = signalSpy.createObject(control, {target: control, signalName: "pressXChanged"})
+ verify(pressXSpy.valid)
+
+ var pressYSpy = signalSpy.createObject(control, {target: control, signalName: "pressYChanged"})
+ verify(pressYSpy.valid)
+
+ compare(control.pressX, 0)
+ compare(control.pressY, 0)
+
+ var touch = data.touch ? touchEvent(control) : null
+
+ if (data.touch)
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ else
+ mousePress(control, control.width / 2, control.height / 2)
+ compare(control.pressX, control.width / 2)
+ compare(control.pressY, control.height / 2)
+ compare(pressXSpy.count, ++pressXChanges)
+ compare(pressYSpy.count, ++pressYChanges)
+
+ if (data.touch)
+ touch.move(0, control, control.width / 2, control.height / 2).commit()
+ else
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.pressX, control.width / 2)
+ compare(control.pressY, control.height / 2)
+ compare(pressXSpy.count, pressXChanges)
+ compare(pressYSpy.count, pressYChanges)
+
+ if (data.touch)
+ touch.move(0, control, control.width / 4, control.height / 4).commit()
+ else
+ mouseMove(control, control.width / 4, control.height / 4)
+ compare(control.pressX, control.width / 4)
+ compare(control.pressY, control.height / 4)
+ compare(pressXSpy.count, ++pressXChanges)
+ compare(pressYSpy.count, ++pressYChanges)
+
+ if (data.touch)
+ touch.move(0, control, 0, 0).commit()
+ else
+ mouseMove(control, 0, 0)
+ compare(control.pressX, 0)
+ compare(control.pressY, 0)
+ compare(pressXSpy.count, ++pressXChanges)
+ compare(pressYSpy.count, ++pressYChanges)
+
+ if (data.touch)
+ touch.move(0, control, -control.width / 2, -control.height / 2).commit()
+ else
+ mouseMove(control, -control.width / 2, -control.height / 2)
+ compare(control.pressX, -control.width / 2)
+ compare(control.pressY, -control.height / 2)
+ compare(pressXSpy.count, ++pressXChanges)
+ compare(pressYSpy.count, ++pressYChanges)
+
+ if (data.touch)
+ touch.release(0, control, -control.width / 2, -control.height / 2).commit()
+ else
+ mouseRelease(control, -control.width / 2, -control.height / 2)
+ compare(control.pressX, -control.width / 2)
+ compare(control.pressY, -control.height / 2)
+ compare(pressXSpy.count, pressXChanges)
+ compare(pressYSpy.count, pressYChanges)
+
+ if (data.touch)
+ touch.press(0, control, control.width - 1, control.height - 1).commit()
+ else
+ mousePress(control, control.width - 1, control.height - 1)
+ compare(control.pressX, control.width - 1)
+ compare(control.pressY, control.height - 1)
+ compare(pressXSpy.count, ++pressXChanges)
+ compare(pressYSpy.count, ++pressYChanges)
+
+ if (data.touch)
+ touch.move(0, control, control.width + 1, control.height + 1).commit()
+ else
+ mouseMove(control, control.width + 1, control.height + 1)
+ compare(control.pressX, control.width + 1)
+ compare(control.pressY, control.height + 1)
+ compare(pressXSpy.count, ++pressXChanges)
+ compare(pressYSpy.count, ++pressYChanges)
+
+ if (data.touch)
+ touch.release(0, control, control.width + 2, control.height + 2).commit()
+ else
+ mouseRelease(control, control.width + 2, control.height + 2)
+ compare(control.pressX, control.width + 2)
+ compare(control.pressY, control.height + 2)
+ compare(pressXSpy.count, ++pressXChanges)
+ compare(pressYSpy.count, ++pressYChanges)
+ }
+
+ function test_pressAndHold() {
+ var control = createTemporaryObject(button, testCase, {checkable: true})
+ verify(control)
+
+ var pressAndHoldSpy = signalSpy.createObject(control, {target: control, signalName: "pressAndHold"})
+ verify(pressAndHoldSpy.valid)
+
+ mousePress(control)
+ pressAndHoldSpy.wait()
+ compare(control.checked, false)
+
+ mouseRelease(control)
+ compare(control.checked, false)
+ }
+
+ Component {
+ id: keyCatcher
+ Item {
+ property int lastKeyPress: -1
+ property int lastKeyRelease: -1
+ Keys.onPressed: lastKeyPress = event.key
+ Keys.onReleased: lastKeyRelease = event.key
+ }
+ }
+
+ function test_keyEvents_data() {
+ return [
+ { tag: "space", key: Qt.Key_Space, result: -1 },
+ { tag: "backspace", key: Qt.Key_Backspace, result: Qt.Key_Backspace }
+ ]
+ }
+
+ function test_keyEvents(data) {
+ var container = createTemporaryObject(keyCatcher, testCase)
+ verify(container)
+
+ var control = button.createObject(container)
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ keyPress(data.key)
+ compare(container.lastKeyPress, data.result)
+
+ keyRelease(data.key)
+ compare(container.lastKeyRelease, data.result)
+ }
+
+ function test_icon() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+ compare(control.icon.name, "")
+ compare(control.icon.source, "")
+ compare(control.icon.width, 0)
+ compare(control.icon.height, 0)
+ compare(control.icon.color, "#00000000")
+
+ var iconSpy = signalSpy.createObject(control, { target: control, signalName: "iconChanged"} )
+ verify(iconSpy.valid)
+
+ control.icon.name = "test-name"
+ compare(control.icon.name, "test-name")
+ compare(iconSpy.count, 1)
+
+ control.icon.source = "qrc:/test-source"
+ compare(control.icon.source, "qrc:/test-source")
+ compare(iconSpy.count, 2)
+
+ control.icon.width = 32
+ compare(control.icon.width, 32)
+ compare(iconSpy.count, 3)
+
+ control.icon.height = 32
+ compare(control.icon.height, 32)
+ compare(iconSpy.count, 4)
+
+ control.icon.color = "#ff0000"
+ compare(control.icon.color, "#ff0000")
+ compare(iconSpy.count, 5)
+ }
+
+ function test_action_data() {
+ return [
+ { tag: "implicit text", property: "text",
+ initButton: undefined, initAction: "Action",
+ assignExpected: "Action", assignChanged: true,
+ resetExpected: "", resetChanged: true },
+ { tag: "explicit text", property: "text",
+ initButton: "Button", initAction: "Action",
+ assignExpected: "Button", assignChanged: false,
+ resetExpected: "Button", resetChanged: false },
+ { tag: "empty button text", property: "text",
+ initButton: "", initAction: "Action",
+ assignExpected: "", assignChanged: false,
+ resetExpected: "", resetChanged: false },
+ { tag: "empty action text", property: "text",
+ initButton: "Button", initAction: "",
+ assignExpected: "Button", assignChanged: false,
+ resetExpected: "Button", resetChanged: false },
+ { tag: "empty both text", property: "text",
+ initButton: undefined, initAction: "",
+ assignExpected: "", assignChanged: false,
+ resetExpected: "", resetChanged: false },
+
+ { tag: "modify button text", property: "text",
+ initButton: undefined, initAction: "Action",
+ assignExpected: "Action", assignChanged: true,
+ modifyButton: "Button2",
+ modifyButtonExpected: "Button2", modifyButtonChanged: true,
+ resetExpected: "Button2", resetChanged: false },
+ { tag: "modify implicit action text", property: "text",
+ initButton: undefined, initAction: "Action",
+ assignExpected: "Action", assignChanged: true,
+ modifyAction: "Action2",
+ modifyActionExpected: "Action2", modifyActionChanged: true,
+ resetExpected: "", resetChanged: true },
+ { tag: "modify explicit action text", property: "text",
+ initButton: "Button", initAction: "Action",
+ assignExpected: "Button", assignChanged: false,
+ modifyAction: "Action2",
+ modifyActionExpected: "Button", modifyActionChanged: false,
+ resetExpected: "Button", resetChanged: false },
+ ]
+ }
+
+ function test_action(data) {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+ control[data.property] = data.initButton
+
+ var act = action.createObject(control)
+ act[data.property] = data.initAction
+
+ var spy = signalSpy.createObject(control, {target: control, signalName: data.property + "Changed"})
+ verify(spy.valid)
+
+ // assign action
+ spy.clear()
+ control.action = act
+ compare(control[data.property], data.assignExpected)
+ compare(spy.count, data.assignChanged ? 1 : 0)
+
+ // modify button
+ if (data.hasOwnProperty("modifyButton")) {
+ spy.clear()
+ control[data.property] = data.modifyButton
+ compare(control[data.property], data.modifyButtonExpected)
+ compare(spy.count, data.modifyButtonChanged ? 1 : 0)
+ }
+
+ // modify action
+ if (data.hasOwnProperty("modifyAction")) {
+ spy.clear()
+ act[data.property] = data.modifyAction
+ compare(control[data.property], data.modifyActionExpected)
+ compare(spy.count, data.modifyActionChanged ? 1 : 0)
+ }
+
+ // reset action
+ spy.clear()
+ control.action = null
+ compare(control[data.property], data.resetExpected)
+ compare(spy.count, data.resetChanged ? 1 : 0)
+ }
+
+ function test_actionIcon_data() {
+ var data = []
+
+ // Save duplicating the rows by reusing them with different properties of the same type.
+ // This means that the first loop will test icon.name and the second one will test icon.source.
+ var stringPropertyValueSuffixes = [
+ { propertyName: "name", valueSuffix: "IconName" },
+ { propertyName: "source", valueSuffix: "IconSource" }
+ ]
+
+ for (var i = 0; i < stringPropertyValueSuffixes.length; ++i) {
+ var propertyName = stringPropertyValueSuffixes[i].propertyName
+ var valueSuffix = stringPropertyValueSuffixes[i].valueSuffix
+
+ var buttonPropertyValue = "Button" + valueSuffix
+ var buttonPropertyValue2 = "Button" + valueSuffix + "2"
+ var actionPropertyValue = "Action" + valueSuffix
+ var actionPropertyValue2 = "Action" + valueSuffix + "2"
+
+ data.push({ tag: "implicit " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ resetExpected: "", resetChanged: true })
+ data.push({ tag: "explicit " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: actionPropertyValue,
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+ data.push({ tag: "empty button " + propertyName, property: propertyName,
+ initButton: "", initAction: actionPropertyValue,
+ assignExpected: "", assignChanged: false,
+ resetExpected: "", resetChanged: false })
+ data.push({ tag: "empty action " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: "",
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+ data.push({ tag: "empty both " + propertyName, property: propertyName,
+ initButton: undefined, initAction: "",
+ assignExpected: "", assignChanged: false,
+ resetExpected: "", resetChanged: false })
+ data.push({ tag: "modify button " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ modifyButton: buttonPropertyValue2,
+ modifyButtonExpected: buttonPropertyValue2, modifyButtonChanged: true,
+ resetExpected: buttonPropertyValue2, resetChanged: false })
+ data.push({ tag: "modify implicit action " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ modifyAction: actionPropertyValue2,
+ modifyActionExpected: actionPropertyValue2, modifyActionChanged: true,
+ resetExpected: "", resetChanged: true })
+ data.push({ tag: "modify explicit action " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: actionPropertyValue,
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ modifyAction: actionPropertyValue2,
+ modifyActionExpected: buttonPropertyValue, modifyActionChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+ }
+
+ var intPropertyNames = [
+ "width",
+ "height",
+ ]
+
+ for (i = 0; i < intPropertyNames.length; ++i) {
+ propertyName = intPropertyNames[i]
+
+ buttonPropertyValue = 20
+ buttonPropertyValue2 = 21
+ actionPropertyValue = 40
+ actionPropertyValue2 = 41
+ var defaultValue = 0
+
+ data.push({ tag: "implicit " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ resetExpected: defaultValue, resetChanged: true })
+ data.push({ tag: "explicit " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: actionPropertyValue,
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+ data.push({ tag: "default button " + propertyName, property: propertyName,
+ initButton: defaultValue, initAction: actionPropertyValue,
+ assignExpected: defaultValue, assignChanged: false,
+ resetExpected: defaultValue, resetChanged: false })
+ data.push({ tag: "default action " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: defaultValue,
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+ data.push({ tag: "default both " + propertyName, property: propertyName,
+ initButton: undefined, initAction: defaultValue,
+ assignExpected: defaultValue, assignChanged: false,
+ resetExpected: defaultValue, resetChanged: false })
+ data.push({ tag: "modify button " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ modifyButton: buttonPropertyValue2,
+ modifyButtonExpected: buttonPropertyValue2, modifyButtonChanged: true,
+ resetExpected: buttonPropertyValue2, resetChanged: false })
+ data.push({ tag: "modify implicit action " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ modifyAction: actionPropertyValue2,
+ modifyActionExpected: actionPropertyValue2, modifyActionChanged: true,
+ resetExpected: defaultValue, resetChanged: true })
+ data.push({ tag: "modify explicit action " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: actionPropertyValue,
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ modifyAction: actionPropertyValue2,
+ modifyActionExpected: buttonPropertyValue, modifyActionChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+ }
+
+ propertyName = "color"
+ buttonPropertyValue = "#aa0000"
+ buttonPropertyValue2 = "#ff0000"
+ actionPropertyValue = "#0000aa"
+ actionPropertyValue2 = "#0000ff"
+ defaultValue = "#00000000"
+
+ data.push({ tag: "implicit " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ resetExpected: defaultValue, resetChanged: true })
+ data.push({ tag: "explicit " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: actionPropertyValue,
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+ data.push({ tag: "default button " + propertyName, property: propertyName,
+ initButton: defaultValue, initAction: actionPropertyValue,
+ assignExpected: defaultValue, assignChanged: false,
+ resetExpected: defaultValue, resetChanged: false })
+ data.push({ tag: "default action " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: defaultValue,
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+ data.push({ tag: "default both " + propertyName, property: propertyName,
+ initButton: undefined, initAction: defaultValue,
+ assignExpected: defaultValue, assignChanged: false,
+ resetExpected: defaultValue, resetChanged: false })
+ data.push({ tag: "modify button " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ modifyButton: buttonPropertyValue2,
+ modifyButtonExpected: buttonPropertyValue2, modifyButtonChanged: true,
+ resetExpected: buttonPropertyValue2, resetChanged: false })
+ data.push({ tag: "modify implicit action " + propertyName, property: propertyName,
+ initButton: undefined, initAction: actionPropertyValue,
+ assignExpected: actionPropertyValue, assignChanged: true,
+ modifyAction: actionPropertyValue2,
+ modifyActionExpected: actionPropertyValue2, modifyActionChanged: true,
+ resetExpected: defaultValue, resetChanged: true })
+ data.push({ tag: "modify explicit action " + propertyName, property: propertyName,
+ initButton: buttonPropertyValue, initAction: actionPropertyValue,
+ assignExpected: buttonPropertyValue, assignChanged: false,
+ modifyAction: actionPropertyValue2,
+ modifyActionExpected: buttonPropertyValue, modifyActionChanged: false,
+ resetExpected: buttonPropertyValue, resetChanged: false })
+
+ return data;
+ }
+
+ function test_actionIcon(data) {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+ control.icon[data.property] = data.initButton
+
+ var act = action.createObject(control)
+ act.icon[data.property] = data.initAction
+
+ var spy = signalSpy.createObject(control, {target: control, signalName: "iconChanged"})
+ verify(spy.valid)
+
+ // assign action
+ spy.clear()
+ control.action = act
+ compare(control.icon[data.property], data.assignExpected)
+ compare(spy.count, data.assignChanged ? 1 : 0)
+
+ // modify button
+ if (data.hasOwnProperty("modifyButton")) {
+ spy.clear()
+ control.icon[data.property] = data.modifyButton
+ compare(control.icon[data.property], data.modifyButtonExpected)
+ compare(spy.count, data.modifyButtonChanged ? 1 : 0)
+ }
+
+ // modify action
+ if (data.hasOwnProperty("modifyAction")) {
+ spy.clear()
+ act.icon[data.property] = data.modifyAction
+ compare(control.icon[data.property], data.modifyActionExpected)
+ compare(spy.count, data.modifyActionChanged ? 1 : 0)
+ }
+
+ // reset action
+ spy.clear()
+ control.action = null
+ compare(control.icon[data.property], data.resetExpected)
+ compare(spy.count, data.resetChanged ? 1 : 0)
+ }
+
+ Component {
+ id: actionButton
+ AbstractButton {
+ width: 100
+ height: 50
+ action: Action {
+ text: "Default"
+ icon.name: checked ? "checked" : "unchecked"
+ icon.source: "qrc:/icons/default.png"
+ checkable: true
+ checked: true
+ enabled: false
+ }
+ }
+ }
+
+ function test_actionButton() {
+ var control = createTemporaryObject(actionButton, testCase)
+ verify(control)
+
+ // initial values
+ compare(control.text, "Default")
+ compare(control.checkable, true)
+ compare(control.checked, true)
+ compare(control.enabled, false)
+ compare(control.icon.name, "checked")
+
+ var textSpy = signalSpy.createObject(control, { target: control, signalName: "textChanged" })
+ verify(textSpy.valid)
+
+ // changes via action
+ control.action.text = "Action"
+ control.action.checkable = false
+ control.action.checked = false
+ control.action.enabled = true
+ compare(control.text, "Action") // propagates
+ compare(control.checkable, false) // propagates
+ compare(control.checked, false) // propagates
+ compare(control.enabled, true) // propagates
+ compare(control.icon.name, "unchecked") // propagates
+ compare(textSpy.count, 1)
+
+ // changes via button
+ control.text = "Button"
+ control.checkable = true
+ control.checked = true
+ control.enabled = false
+ control.icon.name = "default"
+ compare(control.text, "Button")
+ compare(control.checkable, true)
+ compare(control.checked, true)
+ compare(control.enabled, false)
+ compare(control.icon.name, "default")
+ compare(control.action.text, "Action") // does NOT propagate
+ compare(control.action.checkable, true) // propagates
+ compare(control.action.checked, true) // propagates
+ compare(control.action.enabled, true) // does NOT propagate
+ compare(control.action.icon.name, control.action.checked ? "checked" : "unchecked") // does NOT propagate
+ compare(textSpy.count, 2)
+
+ // remove the action so that only the button's properties are left
+ control.action = null
+ compare(control.text, "Button")
+ compare(control.icon.name, "default")
+ compare(textSpy.count, 2)
+
+ // setting an action while button has a particular property set
+ // shouldn't cause a change in the button's effective property value
+ var secondAction = createTemporaryObject(action, testCase)
+ verify(secondAction)
+ secondAction.text = "SecondAction"
+ control.action = secondAction
+ compare(control.text, "Button")
+ compare(textSpy.count, 2)
+
+ // test setting an action whose properties aren't set
+ var thirdAction = createTemporaryObject(action, testCase)
+ verify(thirdAction)
+ control.action = thirdAction
+ compare(control.text, "Button")
+ compare(textSpy.count, 2)
+ }
+
+ Component {
+ id: checkableButton
+ AbstractButton {
+ width: 100
+ height: 50
+ checkable: true
+ action: Action {}
+ }
+ }
+
+ function test_checkable_button() {
+ var control = createTemporaryObject(checkableButton, testCase)
+ verify(control)
+ control.checked = false
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+ verify(!control.checked)
+ verify(!control.action.checked)
+
+ keyPress(Qt.Key_Space)
+ keyRelease(Qt.Key_Space)
+
+ compare(control.action.checked, true)
+ compare(control.checked, true)
+
+ keyPress(Qt.Key_Space)
+
+ compare(control.action.checked, true)
+ compare(control.checked, true)
+
+ keyRelease(Qt.Key_Space)
+
+ compare(control.action.checked, false)
+ compare(control.checked, false)
+
+ var checkedSpy = signalSpy.createObject(control, {target: control.action, signalName: "checkedChanged"})
+ var toggledSpy = signalSpy.createObject(control, {target: control, signalName: "toggled"})
+ var actionToggledSpy = signalSpy.createObject(control, {target: control.action, signalName: "toggled"})
+
+ verify(checkedSpy.valid)
+ verify(toggledSpy.valid)
+ verify(actionToggledSpy.valid)
+
+ mousePress(control)
+
+ compare(control.action.checked, false)
+ compare(control.checked, false)
+
+ mouseRelease(control)
+
+ checkedSpy.wait()
+ compare(checkedSpy.count, 1)
+ compare(actionToggledSpy.count, 1)
+ compare(toggledSpy.count, 1)
+
+ compare(control.action.checked, true)
+ compare(control.checked, true)
+
+ mousePress(control)
+ mouseRelease(control)
+
+ compare(control.checked, false)
+ compare(control.action.checked, false)
+ }
+
+ function test_trigger_data() {
+ return [
+ {tag: "click", click: true, button: true, action: true, clicked: true, triggered: true},
+ {tag: "click disabled button", click: true, button: false, action: true, clicked: false, triggered: false},
+ {tag: "click disabled action", click: true, button: true, action: false, clicked: true, triggered: false},
+ {tag: "trigger", trigger: true, button: true, action: true, clicked: true, triggered: true},
+ {tag: "trigger disabled button", trigger: true, button: false, action: true, clicked: false, triggered: true},
+ {tag: "trigger disabled action", trigger: true, button: true, action: false, clicked: false, triggered: false}
+ ]
+ }
+
+ function test_trigger(data) {
+ var control = createTemporaryObject(actionButton, testCase, {"action.enabled": data.action, "enabled": data.button})
+ verify(control)
+
+ compare(control.enabled, data.button)
+ compare(control.action.enabled, data.action)
+
+ var buttonSpy = signalSpy.createObject(control, {target: control, signalName: "clicked"})
+ verify(buttonSpy.valid)
+
+ var actionSpy = signalSpy.createObject(control, {target: control.action, signalName: "triggered"})
+ verify(actionSpy.valid)
+
+ if (data.click)
+ mouseClick(control)
+ else if (data.trigger)
+ control.action.trigger()
+
+ compare(buttonSpy.count, data.clicked ? 1 : 0)
+ compare(actionSpy.count, data.triggered ? 1 : 0)
+ }
+
+ function test_mnemonic() {
+ if (Qt.platform.os === "osx" || Qt.platform.os === "macos")
+ skip("Mnemonics are not used on macOS")
+
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+
+ control.text = "&Hello"
+ compare(control.text, "&Hello")
+
+ var clickSpy = signalSpy.createObject(control, {target: control, signalName: "clicked"})
+ verify(clickSpy.valid)
+
+ keyClick(Qt.Key_H, Qt.AltModifier)
+ compare(clickSpy.count, 1)
+
+ control.visible = false
+ keyClick(Qt.Key_H, Qt.AltModifier)
+ compare(clickSpy.count, 1)
+
+ control.visible = true
+ keyClick(Qt.Key_H, Qt.AltModifier)
+ compare(clickSpy.count, 2)
+
+ control.text = "Te&st"
+ compare(control.text, "Te&st")
+
+ keyClick(Qt.Key_H, Qt.AltModifier)
+ compare(clickSpy.count, 2)
+
+ keyClick(Qt.Key_S, Qt.AltModifier)
+ compare(clickSpy.count, 3)
+
+ control.visible = false
+ control.text = "&Hidden"
+ keyClick(Qt.Key_H, Qt.AltModifier)
+ compare(clickSpy.count, 3)
+
+ control.visible = true
+ keyClick(Qt.Key_H, Qt.AltModifier)
+ compare(clickSpy.count, 4)
+
+ control.text = undefined
+ control.action = action.createObject(control, {text: "&Action"})
+
+ var actionSpy = signalSpy.createObject(control, {target: control.action, signalName: "triggered"})
+ verify(actionSpy.valid)
+
+ keyClick(Qt.Key_A, Qt.AltModifier)
+ compare(actionSpy.count, 1)
+ compare(clickSpy.count, 5)
+
+ // ungrab on destruction (don't crash)
+ control.Component.onDestruction.connect(function() { control = null })
+ control.destroy()
+ wait(0)
+ verify(!control)
+ keyClick(Qt.Key_H, Qt.AltModifier)
+ }
+
+ Component {
+ id: actionGroup
+ ActionGroup {
+ Action { id: action1; checkable: true; checked: true }
+ Action { id: action2; checkable: true }
+ Action { id: action3; checkable: true }
+ }
+ }
+
+ function test_actionGroup() {
+ var group = createTemporaryObject(actionGroup, testCase)
+ verify(group)
+
+ var button1 = createTemporaryObject(button, testCase, {action: group.actions[0], width: 10, height: 10})
+ var button2 = createTemporaryObject(button, testCase, {action: group.actions[1], width: 10, height: 10, y: 10})
+ var button3 = createTemporaryObject(button, testCase, {action: group.actions[2], width: 10, height: 10, y: 20})
+
+ verify(button1)
+ compare(button1.checked, true)
+ compare(button1.action.checked, true)
+
+ verify(button2)
+ compare(button2.checked, false)
+ compare(button2.action.checked, false)
+
+ verify(button3)
+ compare(button3.checked, false)
+ compare(button3.action.checked, false)
+
+ mouseClick(button2)
+
+ compare(button1.checked, false)
+ compare(button1.action.checked, false)
+
+ compare(button2.checked, true)
+ compare(button2.action.checked, true)
+
+ compare(button3.checked, false)
+ compare(button3.action.checked, false)
+ }
+
+ function test_clickedAfterLongPress() {
+ var control = createTemporaryObject(button, testCase, { text: "Hello" })
+ verify(control)
+
+ var clickedSpy = signalSpy.createObject(control, { target: control, signalName: "clicked" })
+ verify(clickedSpy.valid)
+
+ mousePress(control)
+ // Ensure that clicked is emitted when no handler is defined for the pressAndHold() signal.
+ // Note that even though signal spies aren't considered in QObject::isSignalConnected(),
+ // we can't use one here to check for pressAndHold(), because otherwise clicked() won't be emitted.
+ wait(Qt.styleHints.mousePressAndHoldInterval + 100)
+ mouseRelease(control)
+ compare(clickedSpy.count, 1)
+ }
+
+ function test_doubleClick() {
+ let control = createTemporaryObject(button, testCase, { text: "Hello" })
+ verify(control)
+
+ let pressedSpy = signalSpy.createObject(control, { target: control, signalName: "pressed" })
+ verify(pressedSpy.valid)
+
+ let releasedSpy = signalSpy.createObject(control, { target: control, signalName: "released" })
+ verify(releasedSpy.valid)
+
+ let clickedSpy = signalSpy.createObject(control, { target: control, signalName: "clicked" })
+ verify(clickedSpy.valid)
+
+ let doubleClickedSpy = signalSpy.createObject(control, { target: control, signalName: "doubleClicked" })
+ verify(doubleClickedSpy.valid)
+
+ mouseDoubleClickSequence(control)
+ compare(pressedSpy.count, 2)
+ compare(releasedSpy.count, 2)
+ compare(clickedSpy.count, 1)
+ compare(doubleClickedSpy.count, 1)
+ }
+
+ // It should be possible to quickly click a button whose doubleClicked signal
+ // is not connected to anything.
+ function test_fastClick() {
+ let control = createTemporaryObject(button, testCase, { text: "Hello" })
+ verify(control)
+
+ let pressedSpy = signalSpy.createObject(control, { target: control, signalName: "pressed" })
+ verify(pressedSpy.valid)
+
+ let releasedSpy = signalSpy.createObject(control, { target: control, signalName: "released" })
+ verify(releasedSpy.valid)
+
+ let clickedSpy = signalSpy.createObject(control, { target: control, signalName: "clicked" })
+ verify(clickedSpy.valid)
+
+ // Can't listen to doubleClicked because it would cause it to be emitted.
+ // We instead just check that clicked is emitted twice.
+
+ mouseDoubleClickSequence(control)
+ compare(pressedSpy.count, 2)
+ compare(releasedSpy.count, 2)
+ compare(clickedSpy.count, 2)
+
+ let touch = touchEvent(control)
+ touch.press(0, control)
+ touch.commit()
+ compare(pressedSpy.count, 3)
+ compare(releasedSpy.count, 2)
+ compare(clickedSpy.count, 2)
+
+ touch.release(0, control)
+ touch.commit()
+ compare(pressedSpy.count, 3)
+ compare(releasedSpy.count, 3)
+ compare(clickedSpy.count, 3)
+
+ touch.press(0, control)
+ touch.commit()
+ compare(pressedSpy.count, 4)
+ compare(releasedSpy.count, 3)
+ compare(clickedSpy.count, 3)
+
+ touch.release(0, control)
+ touch.commit()
+ compare(pressedSpy.count, 4)
+ compare(releasedSpy.count, 4)
+ compare(clickedSpy.count, 4)
+ }
+
+ function test_checkedShouldNotSetCheckable() {
+ let control = createTemporaryObject(button, testCase, { checked: true })
+ verify(control)
+
+ verify(!control.checkable)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_action.qml b/tests/auto/quickcontrols2/controls/data/tst_action.qml
new file mode 100644
index 0000000000..c286b95344
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_action.qml
@@ -0,0 +1,230 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+import QtQuick.Templates as T
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Action"
+
+ Component {
+ id: component
+ Action { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_enabled() {
+ var action = createTemporaryObject(component, testCase)
+ verify(action)
+
+ var spy = createTemporaryObject(signalSpy, testCase, {target: action, signalName: "triggered"})
+ verify(spy.valid)
+
+ action.trigger()
+ compare(spy.count, 1)
+
+ action.enabled = false
+ action.trigger()
+ compare(spy.count, 1)
+
+ action.enabled = undefined // reset
+ action.trigger()
+ compare(spy.count, 2)
+ }
+
+ Component {
+ id: buttonAndMenu
+ Item {
+ property alias button: button
+ property alias menu: menu
+ property alias menuItem: menuItem
+ property alias action: sharedAction
+ property var lastSource
+ Action {
+ id: sharedAction
+ text: "Shared"
+ shortcut: "Ctrl+B"
+ onTriggered: (source) => lastSource = source
+ }
+ Button {
+ id: button
+ action: sharedAction
+ Menu {
+ id: menu
+ MenuItem {
+ id: menuItem
+ action: sharedAction
+ }
+ }
+ }
+ }
+ }
+
+ function test_shared() {
+ var container = createTemporaryObject(buttonAndMenu, testCase)
+ verify(container)
+
+ keyClick(Qt.Key_B, Qt.ControlModifier)
+ compare(container.lastSource, container.button)
+
+ container.menu.open()
+ keyClick(Qt.Key_B, Qt.ControlModifier)
+ compare(container.lastSource, container.menuItem)
+
+ tryVerify(function() { return !container.menu.visible })
+ keyClick(Qt.Key_B, Qt.ControlModifier)
+ compare(container.lastSource, container.button)
+
+ container.button.visible = false
+ keyClick(Qt.Key_B, Qt.ControlModifier)
+ compare(container.lastSource, container.action)
+ }
+
+ Component {
+ id: actionAndRepeater
+ Item {
+ property alias action: testAction
+ Action {
+ id: testAction
+ shortcut: "Ctrl+A"
+ }
+ Repeater {
+ model: 1
+ Button {
+ action: testAction
+ }
+ }
+ }
+ }
+
+ function test_repeater() {
+ var container = createTemporaryObject(actionAndRepeater, testCase)
+ verify(container)
+
+ var spy = signalSpy.createObject(container, {target: container.action, signalName: "triggered"})
+ verify(spy.valid)
+
+ keyClick(Qt.Key_A, Qt.ControlModifier)
+ compare(spy.count, 1)
+ }
+
+ Component {
+ id: shortcutBinding
+ Item {
+ Action {
+ id: action
+ shortcut: StandardKey.Copy
+ }
+
+ Shortcut {
+ id: indirectShortcut
+ sequences: [ action.shortcut ]
+ }
+
+ Shortcut {
+ id: directShortcut
+ sequences: [ StandardKey.Copy ]
+ }
+
+ property alias indirect: indirectShortcut;
+ property alias direct: directShortcut
+ }
+ }
+
+ function test_shortcutBinding() {
+ var container = createTemporaryObject(shortcutBinding, testCase);
+ verify(container)
+ compare(container.indirect.nativeText, container.direct.nativeText);
+ }
+
+ Component {
+ id: shortcutCleanup
+ Item {
+ property alias page: page
+ property alias action: action
+ property alias menu: menu
+ Item {
+ id: page
+ Action {
+ id: action
+ text: "action"
+ shortcut: "Insert"
+ }
+ Menu {
+ id: menu
+ MenuItem { action: action }
+ }
+ }
+ }
+ }
+
+ function test_shortcutCleanup() {
+ {
+ var container = createTemporaryObject(shortcutCleanup, testCase);
+ verify(container)
+ container.action.shortcut = "Delete"
+ container.menu.open()
+ container.page.destroy()
+ tryVerify(function() { return !container.page })
+ }
+ keyClick(Qt.Key_Delete, Qt.NoModifier)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_actiongroup.qml b/tests/auto/quickcontrols2/controls/data/tst_actiongroup.qml
new file mode 100644
index 0000000000..e4ea5679da
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_actiongroup.qml
@@ -0,0 +1,400 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "ActionGroup"
+
+ Component {
+ id: actionGroup
+ ActionGroup { }
+ }
+
+ Component {
+ id: nonExclusiveGroup
+ ActionGroup { exclusive: false }
+ }
+
+ Component {
+ id: declarativeGroup
+ ActionGroup {
+ Action { text: "First" }
+ Action { text: "Second" }
+ Action { text: "Third" }
+ }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_null() {
+ var group = createTemporaryObject(actionGroup, testCase)
+ verify(group)
+
+ group.addAction(null)
+ group.removeAction(null)
+ }
+
+ Component {
+ id: action
+ Action { }
+ }
+
+ function test_defaults() {
+ var group = createTemporaryObject(actionGroup, testCase)
+ verify(group)
+ compare(group.actions.length, 0)
+ compare(group.checkedAction, null)
+ compare(group.exclusive, true)
+ }
+
+ function test_current() {
+ var group = createTemporaryObject(actionGroup, testCase)
+ verify(group)
+
+ var checkedActionSpy = createTemporaryObject(signalSpy, testCase, {target: group, signalName: "checkedActionChanged"})
+ verify(checkedActionSpy.valid)
+ verify(!group.checkedAction)
+
+ var action1 = createTemporaryObject(action, testCase, {checked: true})
+ var action2 = createTemporaryObject(action, testCase, {checked: false})
+ var action3 = createTemporaryObject(action, testCase, {checked: true, objectName: "3"})
+
+ // add checked
+ group.addAction(action1)
+ compare(group.checkedAction, action1)
+ compare(action1.checked, true)
+ compare(action2.checked, false)
+ compare(action3.checked, true)
+ compare(checkedActionSpy.count, 1)
+
+ // add non-checked
+ group.addAction(action2)
+ compare(group.checkedAction, action1)
+ compare(action1.checked, true)
+ compare(action2.checked, false)
+ compare(action3.checked, true)
+ compare(checkedActionSpy.count, 1)
+
+ // add checked
+ group.addAction(action3)
+ compare(group.checkedAction, action3)
+ compare(action1.checked, false)
+ compare(action2.checked, false)
+ compare(action3.checked, true)
+ compare(checkedActionSpy.count, 2)
+
+ // change current
+ group.checkedAction = action2
+ compare(group.checkedAction, action2)
+ compare(action1.checked, false)
+ compare(action2.checked, true)
+ compare(action3.checked, false)
+ compare(checkedActionSpy.count, 3)
+
+ // check
+ action1.checked = true
+ compare(group.checkedAction, action1)
+ compare(action1.checked, true)
+ compare(action2.checked, false)
+ compare(action3.checked, false)
+ compare(checkedActionSpy.count, 4)
+
+ // remove non-checked
+ group.removeAction(action2)
+ compare(group.checkedAction, action1)
+ compare(action1.checked, true)
+ compare(action2.checked, false)
+ compare(action3.checked, false)
+ compare(checkedActionSpy.count, 4)
+
+ // remove checked
+ group.removeAction(action1)
+ verify(!group.checkedAction)
+ compare(action1.checked, false)
+ compare(action2.checked, false)
+ compare(action3.checked, false)
+ compare(checkedActionSpy.count, 5)
+ }
+
+ function test_actions() {
+ var group = createTemporaryObject(actionGroup, testCase)
+ verify(group)
+
+ var actionsSpy = createTemporaryObject(signalSpy, testCase, {target: group, signalName: "actionsChanged"})
+ verify(actionsSpy.valid)
+
+ compare(group.actions.length, 0)
+ compare(group.checkedAction, null)
+
+ var action1 = createTemporaryObject(action, testCase, {checked: true})
+ var action2 = createTemporaryObject(action, testCase, {checked: false})
+
+ group.actions = [action1, action2]
+ compare(group.actions.length, 2)
+ compare(group.actions[0], action1)
+ compare(group.actions[1], action2)
+ compare(group.checkedAction, action1)
+ compare(actionsSpy.count, 2)
+
+ var action3 = createTemporaryObject(action, testCase, {checked: true})
+
+ group.addAction(action3)
+ compare(group.actions.length, 3)
+ compare(group.actions[0], action1)
+ compare(group.actions[1], action2)
+ compare(group.actions[2], action3)
+ compare(group.checkedAction, action3)
+ compare(actionsSpy.count, 3)
+
+ group.removeAction(action1)
+ compare(group.actions.length, 2)
+ compare(group.actions[0], action2)
+ compare(group.actions[1], action3)
+ compare(group.checkedAction, action3)
+ compare(actionsSpy.count, 4)
+
+ group.actions = []
+ compare(group.actions.length, 0)
+ tryCompare(group, "checkedAction", null)
+ compare(actionsSpy.count, 5)
+ }
+
+ function test_declarative() {
+ var group = createTemporaryObject(declarativeGroup, testCase)
+ verify(group)
+
+ compare(group.actions.length, 3)
+ compare(group.actions[0].text, "First")
+ compare(group.actions[1].text, "Second")
+ compare(group.actions[2].text, "Third")
+ }
+
+ function test_triggered_data() {
+ return [
+ {tag: "exclusive", exclusive: true},
+ {tag: "non-exclusive", exclusive: false}
+ ]
+ }
+
+ function test_triggered(data) {
+ var group = createTemporaryObject(actionGroup, testCase, {exclusive: data.exclusive})
+ verify(group)
+
+ var triggeredSpy = createTemporaryObject(signalSpy, testCase, {target: group, signalName: "triggered"})
+ verify(triggeredSpy.valid)
+
+ var action1 = createTemporaryObject(action, testCase)
+ var action2 = createTemporaryObject(action, testCase)
+
+ group.addAction(action1)
+ group.addAction(action2)
+
+ action1.triggered()
+ compare(triggeredSpy.count, 1)
+ compare(triggeredSpy.signalArguments[0][0], action1)
+
+ action2.triggered()
+ compare(triggeredSpy.count, 2)
+ compare(triggeredSpy.signalArguments[1][0], action2)
+ }
+
+ Component {
+ id: attachedGroup
+ Item {
+ property ActionGroup group: ActionGroup { id: group }
+ property Action action1: Action { ActionGroup.group: group }
+ property Action action2: Action { ActionGroup.group: group }
+ property Action action3: Action { ActionGroup.group: group }
+ }
+ }
+
+ function test_attached() {
+ var container = createTemporaryObject(attachedGroup, testCase)
+ verify(container)
+
+ verify(!container.group.checkedAction)
+
+ container.action1.checked = true
+ compare(container.group.checkedAction, container.action1)
+ compare(container.action1.checked, true)
+ compare(container.action2.checked, false)
+ compare(container.action3.checked, false)
+
+ container.action2.checked = true
+ compare(container.group.checkedAction, container.action2)
+ compare(container.action1.checked, false)
+ compare(container.action2.checked, true)
+ compare(container.action3.checked, false)
+
+ container.action3.checked = true
+ compare(container.group.checkedAction, container.action3)
+ compare(container.action1.checked, false)
+ compare(container.action2.checked, false)
+ compare(container.action3.checked, true)
+ }
+
+ function test_actionDestroyed() {
+ var group = createTemporaryObject(actionGroup, testCase)
+ verify(group)
+
+ var actionsSpy = createTemporaryObject(signalSpy, testCase, {target: group, signalName: "actionsChanged"})
+ verify(actionsSpy.valid)
+
+ var action1 = createTemporaryObject(action, testCase, {objectName: "action1", checked: true})
+
+ group.addAction(action1)
+ compare(group.actions.length, 1)
+ compare(group.actions[0], action1)
+ compare(group.checkedAction, action1)
+ compare(actionsSpy.count, 1)
+
+ action1.destroy()
+ wait(0)
+ compare(group.actions.length, 0)
+ compare(group.checkedAction, null)
+ compare(actionsSpy.count, 2)
+ }
+
+ function test_nonExclusive() {
+ var group = createTemporaryObject(nonExclusiveGroup, testCase)
+ verify(group)
+
+ var action1 = createTemporaryObject(action, testCase, {checked: true})
+ group.addAction(action1)
+ compare(action1.checked, true)
+ compare(group.checkedAction, null)
+
+ var action2 = createTemporaryObject(action, testCase, {checked: true})
+ group.addAction(action2)
+ compare(action1.checked, true)
+ compare(action2.checked, true)
+ compare(group.checkedAction, null)
+
+ action1.checked = false
+ compare(action1.checked, false)
+ compare(action2.checked, true)
+ compare(group.checkedAction, null)
+
+ action2.checked = false
+ compare(action1.checked, false)
+ compare(action2.checked, false)
+ compare(group.checkedAction, null)
+
+ action1.checked = true
+ compare(action1.checked, true)
+ compare(action2.checked, false)
+ compare(group.checkedAction, null)
+
+ action2.checked = true
+ compare(action1.checked, true)
+ compare(action2.checked, true)
+ compare(group.checkedAction, null)
+ }
+
+ function test_enabled() {
+ var group = createTemporaryObject(actionGroup, testCase)
+ verify(group)
+
+ compare(group.enabled, true)
+
+ var action1 = createTemporaryObject(action, testCase)
+ var action2 = createTemporaryObject(action, testCase)
+ compare(action1.enabled, true)
+ compare(action2.enabled, true)
+
+ var action1Spy = createTemporaryObject(signalSpy, testCase, {target: action1, signalName: "enabledChanged"})
+ var action2Spy = createTemporaryObject(signalSpy, testCase, {target: action2, signalName: "enabledChanged"})
+ verify(action1Spy.valid && action2Spy.valid)
+
+ group.addAction(action1)
+ compare(action1.enabled, true)
+ compare(action2.enabled, true)
+ compare(action1Spy.count, 0)
+ compare(action2Spy.count, 0)
+
+ group.enabled = false
+ compare(action1.enabled, false)
+ compare(action2.enabled, true)
+ compare(action1Spy.count, 1)
+ compare(action1Spy.signalArguments[0][0], false)
+ compare(action2Spy.count, 0)
+
+ group.addAction(action2)
+ compare(action1.enabled, false)
+ compare(action2.enabled, false)
+ compare(action1Spy.count, 1)
+ compare(action2Spy.count, 1)
+ compare(action2Spy.signalArguments[0][0], false)
+
+ action1.enabled = false
+ compare(action1.enabled, false)
+ compare(action1Spy.count, 2)
+ compare(action1Spy.signalArguments[1][0], false)
+ compare(action2Spy.count, 1)
+
+ group.enabled = true
+ compare(action1.enabled, false)
+ compare(action2.enabled, true)
+ compare(action1Spy.count, 2)
+ compare(action2Spy.count, 2)
+ compare(action2Spy.signalArguments[1][0], true)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_busyindicator.qml b/tests/auto/quickcontrols2/controls/data/tst_busyindicator.qml
new file mode 100644
index 0000000000..9353c33828
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_busyindicator.qml
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "BusyIndicator"
+
+ Component {
+ id: busyIndicator
+ BusyIndicator { }
+ }
+
+ Component {
+ id: mouseArea
+ MouseArea { }
+ }
+
+ function test_running() {
+ var control = createTemporaryObject(busyIndicator, testCase)
+ verify(control)
+
+ compare(control.running, true)
+ control.running = false
+ compare(control.running, false)
+ }
+
+ // QTBUG-61785
+ function test_mouseArea() {
+ var ma = createTemporaryObject(mouseArea, testCase, {width: testCase.width, height: testCase.height})
+ verify(ma)
+
+ var control = busyIndicator.createObject(ma, {width: testCase.width, height: testCase.height})
+ verify(control)
+
+ mousePress(control)
+ verify(ma.pressed)
+
+ mouseRelease(control)
+ verify(!ma.pressed)
+
+ var touch = touchEvent(control)
+ touch.press(0, control).commit()
+ verify(ma.pressed)
+
+ touch.release(0, control).commit()
+ verify(!ma.pressed)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_button.qml b/tests/auto/quickcontrols2/controls/data/tst_button.qml
new file mode 100644
index 0000000000..a6ec4faad9
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_button.qml
@@ -0,0 +1,511 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "Button"
+
+ Component {
+ id: button
+ Button { }
+ }
+
+ Component {
+ id: signalSequenceSpy
+ SignalSequenceSpy {
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "doubleClicked", "pressedChanged", "downChanged", "checkedChanged"]
+ }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_text() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+
+ compare(control.text, "")
+ control.text = "Button"
+ compare(control.text, "Button")
+ control.text = ""
+ compare(control.text, "")
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // click
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // release outside
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }]]
+ mouseMove(control, control.width * 2, control.height * 2, 0)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["canceled", { "pressed": false }]]
+ mouseRelease(control, control.width * 2, control.height * 2, Qt.LeftButton)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // right button
+ sequenceSpy.expectedSequence = []
+ mousePress(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.pressed, false)
+
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // double click
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked",
+ ["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ "doubleClicked",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released"]
+ mouseDoubleClickSequence(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ verify(sequenceSpy.success)
+ }
+
+ function test_touch() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+
+ var touch = touchEvent(control)
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // click
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // release outside
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }]]
+ touch.move(0, control, control.width * 2, control.height * 2).commit()
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["canceled", { "pressed": false }]]
+ touch.release(0, control, control.width * 2, control.height * 2).commit()
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ }
+
+ function test_multiTouch() {
+ var control1 = createTemporaryObject(button, testCase)
+ verify(control1)
+
+ var pressedCount1 = 0
+
+ var pressedSpy1 = signalSpy.createObject(control1, {target: control1, signalName: "pressedChanged"})
+ verify(pressedSpy1.valid)
+
+ var touch = touchEvent(control1)
+ touch.press(0, control1, 0, 0).commit().move(0, control1, control1.width - 1, control1.height - 1).commit()
+
+ compare(pressedSpy1.count, ++pressedCount1)
+ compare(control1.pressed, true)
+
+ // second touch point on the same control is ignored
+ touch.stationary(0).press(1, control1, 0, 0).commit()
+ touch.stationary(0).move(1, control1).commit()
+ touch.stationary(0).release(1).commit()
+
+ compare(pressedSpy1.count, pressedCount1)
+ compare(control1.pressed, true)
+
+ var control2 = createTemporaryObject(button, testCase, {y: control1.height})
+ verify(control2)
+
+ var pressedCount2 = 0
+
+ var pressedSpy2 = signalSpy.createObject(control2, {target: control2, signalName: "pressedChanged"})
+ verify(pressedSpy2.valid)
+
+ // press the second button
+ touch.stationary(0).press(2, control2, 0, 0).commit()
+
+ compare(pressedSpy2.count, ++pressedCount2)
+ compare(control2.pressed, true)
+
+ compare(pressedSpy1.count, pressedCount1)
+ compare(control1.pressed, true)
+
+ // release both buttons
+ touch.release(0, control1).release(2, control2).commit()
+
+ compare(pressedSpy2.count, ++pressedCount2)
+ compare(control2.pressed, false)
+
+ compare(pressedSpy1.count, ++pressedCount1)
+ compare(control1.pressed, false)
+ }
+
+ function test_keys() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // click
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ verify(sequenceSpy.success)
+
+ // no change
+ sequenceSpy.expectedSequence = []
+ var keys = [Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab]
+ for (var i = 0; i < keys.length; ++i) {
+ sequenceSpy.reset()
+ keyClick(keys[i])
+ verify(sequenceSpy.success)
+ }
+ }
+
+ function eventErrorMessage(actual, expected) {
+ return "actual event:" + JSON.stringify(actual) + ", expected event:" + JSON.stringify(expected)
+ }
+
+ function test_autoRepeat() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+
+ compare(control.autoRepeat, false)
+ control.autoRepeat = true
+ compare(control.autoRepeat, true)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ var clickSpy = signalSpy.createObject(control, {target: control, signalName: "clicked"})
+ verify(clickSpy.valid)
+ var pressSpy = signalSpy.createObject(control, {target: control, signalName: "pressed"})
+ verify(pressSpy.valid)
+ var releaseSpy = signalSpy.createObject(control, {target: control, signalName: "released"})
+ verify(releaseSpy.valid)
+
+ // auto-repeat mouse click
+ mousePress(control)
+ compare(control.pressed, true)
+ clickSpy.wait()
+ clickSpy.wait()
+ compare(pressSpy.count, clickSpy.count + 1)
+ compare(releaseSpy.count, clickSpy.count)
+ mouseRelease(control)
+ compare(control.pressed, false)
+ compare(clickSpy.count, pressSpy.count)
+ compare(releaseSpy.count, pressSpy.count)
+
+ clickSpy.clear()
+ pressSpy.clear()
+ releaseSpy.clear()
+
+ // auto-repeat key click
+ keyPress(Qt.Key_Space)
+ compare(control.pressed, true)
+ clickSpy.wait()
+ clickSpy.wait()
+ compare(pressSpy.count, clickSpy.count + 1)
+ compare(releaseSpy.count, clickSpy.count)
+ keyRelease(Qt.Key_Space)
+ compare(control.pressed, false)
+ compare(clickSpy.count, pressSpy.count)
+ compare(releaseSpy.count, pressSpy.count)
+
+ clickSpy.clear()
+ pressSpy.clear()
+ releaseSpy.clear()
+
+ mousePress(control)
+ compare(control.pressed, true)
+ clickSpy.wait()
+ compare(pressSpy.count, clickSpy.count + 1)
+ compare(releaseSpy.count, clickSpy.count)
+
+ // move inside during repeat -> continue repeat
+ mouseMove(control, control.width / 4, control.height / 4)
+ clickSpy.wait()
+ compare(pressSpy.count, clickSpy.count + 1)
+ compare(releaseSpy.count, clickSpy.count)
+
+ clickSpy.clear()
+ pressSpy.clear()
+ releaseSpy.clear()
+
+ // move outside during repeat -> stop repeat
+ mouseMove(control, -1, -1)
+ // NOTE: The following wait() is NOT a reliable way to test that the
+ // auto-repeat timer is not running, but there's no way dig into the
+ // private APIs from QML. If this test ever fails in the future, it
+ // indicates that the auto-repeat timer logic is broken.
+ wait(125)
+ compare(clickSpy.count, 0)
+ compare(pressSpy.count, 0)
+ compare(releaseSpy.count, 0)
+
+ mouseRelease(control, -1, -1)
+ compare(control.pressed, false)
+ compare(clickSpy.count, 0)
+ compare(pressSpy.count, 0)
+ compare(releaseSpy.count, 0)
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ function test_checkable() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+ verify(control.hasOwnProperty("checkable"))
+ verify(!control.checkable)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked"]
+ mouseClick(control)
+ verify(!control.checked)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ ["checkedChanged", { "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ control.checkable = true
+ mouseClick(control)
+ verify(control.checked)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ ["checkedChanged", { "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseClick(control)
+ verify(!control.checked)
+ verify(sequenceSpy.success)
+ }
+
+ function test_highlighted() {
+ var control = createTemporaryObject(button, testCase)
+ verify(control)
+ verify(!control.highlighted)
+
+ control.highlighted = true
+ verify(control.highlighted)
+ }
+
+ function test_spacing() {
+ var control = createTemporaryObject(button, testCase, { text: "Some long, long, long text" })
+ verify(control)
+ verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
+
+ var textLabel = findChild(control.contentItem, "label")
+ verify(textLabel)
+
+ // The implicitWidth of the IconLabel that all buttons use as their contentItem
+ // should be equal to the implicitWidth of the Text while no icon is set.
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // That means that spacing shouldn't affect it.
+ control.spacing += 100
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // The implicitWidth of the Button itself should, therefore, also never include spacing while no icon is set.
+ compare(control.implicitWidth, textLabel.implicitWidth + control.leftPadding + control.rightPadding)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: Button.IconOnly },
+ { "tag": "TextOnly", display: Button.TextOnly },
+ { "tag": "TextUnderIcon", display: Button.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: Button.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: Button.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: Button.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: Button.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: Button.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(button, testCase, {
+ text: "Button",
+ display: data.display,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ switch (control.display) {
+ case Button.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case Button.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case Button.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case Button.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_buttongroup.qml b/tests/auto/quickcontrols2/controls/data/tst_buttongroup.qml
new file mode 100644
index 0000000000..138c0e2441
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_buttongroup.qml
@@ -0,0 +1,465 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "ButtonGroup"
+
+ Component {
+ id: buttonGroup
+ ButtonGroup { }
+ }
+
+ Component {
+ id: nonExclusiveGroup
+ ButtonGroup { exclusive: false }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_null() {
+ var group = createTemporaryObject(buttonGroup, testCase)
+ verify(group)
+
+ group.addButton(null)
+ group.removeButton(null)
+ }
+
+ Component {
+ id: button
+ Button { }
+ }
+
+ Component {
+ id: nonCheckable
+ QtObject { }
+ }
+
+ function test_defaults() {
+ var group = createTemporaryObject(buttonGroup, testCase)
+ verify(group)
+ compare(group.buttons.length, 0)
+ compare(group.checkedButton, null)
+ compare(group.exclusive, true)
+ compare(group.checkState, Qt.Unchecked)
+ }
+
+ function test_current() {
+ var group = createTemporaryObject(buttonGroup, testCase)
+ verify(group)
+
+ var checkedButtonSpy = createTemporaryObject(signalSpy, testCase, {target: group, signalName: "checkedButtonChanged"})
+ verify(checkedButtonSpy.valid)
+ verify(!group.checkedButton)
+
+ var button1 = createTemporaryObject(button, testCase, {checked: true})
+ var button2 = createTemporaryObject(button, testCase, {checked: false})
+ var button3 = createTemporaryObject(button, testCase, {checked: true, objectName: "3"})
+
+ // add checked
+ group.addButton(button1)
+ compare(group.checkedButton, button1)
+ compare(button1.checked, true)
+ compare(button2.checked, false)
+ compare(button3.checked, true)
+ compare(checkedButtonSpy.count, 1)
+
+ // add non-checked
+ group.addButton(button2)
+ compare(group.checkedButton, button1)
+ compare(button1.checked, true)
+ compare(button2.checked, false)
+ compare(button3.checked, true)
+ compare(checkedButtonSpy.count, 1)
+
+ // add checked
+ group.addButton(button3)
+ compare(group.checkedButton, button3)
+ compare(button1.checked, false)
+ compare(button2.checked, false)
+ compare(button3.checked, true)
+ compare(checkedButtonSpy.count, 2)
+
+ // change current
+ group.checkedButton = button2
+ compare(group.checkedButton, button2)
+ compare(button1.checked, false)
+ compare(button2.checked, true)
+ compare(button3.checked, false)
+ compare(checkedButtonSpy.count, 3)
+
+ // check
+ button1.checked = true
+ compare(group.checkedButton, button1)
+ compare(button1.checked, true)
+ compare(button2.checked, false)
+ compare(button3.checked, false)
+ compare(checkedButtonSpy.count, 4)
+
+ // remove non-checked
+ group.removeButton(button2)
+ compare(group.checkedButton, button1)
+ compare(button1.checked, true)
+ compare(button2.checked, false)
+ compare(button3.checked, false)
+ compare(checkedButtonSpy.count, 4)
+
+ // remove checked
+ group.removeButton(button1)
+ verify(!group.checkedButton)
+ compare(button1.checked, false)
+ compare(button2.checked, false)
+ compare(button3.checked, false)
+ compare(checkedButtonSpy.count, 5)
+ }
+
+ function test_buttons() {
+ var group = createTemporaryObject(buttonGroup, testCase)
+ verify(group)
+
+ var buttonsSpy = createTemporaryObject(signalSpy, testCase, {target: group, signalName: "buttonsChanged"})
+ verify(buttonsSpy.valid)
+
+ compare(group.buttons.length, 0)
+ compare(group.checkedButton, null)
+
+ var button1 = createTemporaryObject(button, testCase, {checked: true})
+ var button2 = createTemporaryObject(button, testCase, {checked: false})
+
+ group.buttons = [button1, button2]
+ compare(group.buttons.length, 2)
+ compare(group.buttons[0], button1)
+ compare(group.buttons[1], button2)
+ compare(group.checkedButton, button1)
+ compare(buttonsSpy.count, 2)
+
+ var button3 = createTemporaryObject(button, testCase, {checked: true})
+
+ group.addButton(button3)
+ compare(group.buttons.length, 3)
+ compare(group.buttons[0], button1)
+ compare(group.buttons[1], button2)
+ compare(group.buttons[2], button3)
+ compare(group.checkedButton, button3)
+ compare(buttonsSpy.count, 3)
+
+ group.removeButton(button1)
+ compare(group.buttons.length, 2)
+ compare(group.buttons[0], button2)
+ compare(group.buttons[1], button3)
+ compare(group.checkedButton, button3)
+ compare(buttonsSpy.count, 4)
+
+ group.buttons = []
+ compare(group.buttons.length, 0)
+ tryCompare(group, "checkedButton", null)
+ compare(buttonsSpy.count, 5)
+ }
+
+ function test_clicked_data() {
+ return [
+ {tag: "exclusive", exclusive: true},
+ {tag: "non-exclusive", exclusive: false}
+ ]
+ }
+
+ function test_clicked(data) {
+ var group = createTemporaryObject(buttonGroup, testCase, {exclusive: data.exclusive})
+ verify(group)
+
+ var clickedSpy = createTemporaryObject(signalSpy, testCase, {target: group, signalName: "clicked"})
+ verify(clickedSpy.valid)
+
+ var button1 = createTemporaryObject(button, testCase)
+ var button2 = createTemporaryObject(button, testCase)
+
+ group.addButton(button1)
+ group.addButton(button2)
+
+ button1.clicked()
+ compare(clickedSpy.count, 1)
+ compare(clickedSpy.signalArguments[0][0], button1)
+
+ button2.clicked()
+ compare(clickedSpy.count, 2)
+ compare(clickedSpy.signalArguments[1][0], button2)
+ }
+
+ Component {
+ id: checkBoxes
+ Item {
+ property ButtonGroup group: ButtonGroup { id: group }
+ property CheckBox control1: CheckBox { ButtonGroup.group: group }
+ property CheckBox control2: CheckBox { ButtonGroup.group: group }
+ property CheckBox control3: CheckBox { ButtonGroup.group: group }
+ }
+ }
+
+ Component {
+ id: radioButtons
+ Item {
+ property ButtonGroup group: ButtonGroup { id: group }
+ property RadioButton control1: RadioButton { ButtonGroup.group: group }
+ property RadioButton control2: RadioButton { ButtonGroup.group: group }
+ property RadioButton control3: RadioButton { ButtonGroup.group: group }
+ }
+ }
+
+ Component {
+ id: switches
+ Item {
+ property ButtonGroup group: ButtonGroup { id: group }
+ property Switch control1: Switch { ButtonGroup.group: group }
+ property Switch control2: Switch { ButtonGroup.group: group }
+ property Switch control3: Switch { ButtonGroup.group: group }
+ }
+ }
+
+ Component {
+ id: childControls
+ Item {
+ id: container
+ property ButtonGroup group: ButtonGroup { id: group; buttons: container.children }
+ property alias control1: control1
+ property alias control2: control2
+ property alias control3: control3
+ CheckBox { id: control1 }
+ RadioButton { id: control2 }
+ Switch { id: control3 }
+ }
+ }
+
+ function test_controls_data() {
+ return [
+ { tag: "CheckBox", component: checkBoxes },
+ { tag: "RadioButton", component: radioButtons },
+ { tag: "Switch", component: switches },
+ { tag: "Children", component: childControls }
+ ]
+ }
+
+ function test_controls(data) {
+ var container = createTemporaryObject(data.component, testCase)
+ verify(container)
+
+ verify(!container.group.checkedButton)
+
+ container.control1.checked = true
+ compare(container.group.checkedButton, container.control1)
+ compare(container.control1.checked, true)
+ compare(container.control2.checked, false)
+ compare(container.control3.checked, false)
+
+ container.control2.checked = true
+ compare(container.group.checkedButton, container.control2)
+ compare(container.control1.checked, false)
+ compare(container.control2.checked, true)
+ compare(container.control3.checked, false)
+
+ container.control3.checked = true
+ compare(container.group.checkedButton, container.control3)
+ compare(container.control1.checked, false)
+ compare(container.control2.checked, false)
+ compare(container.control3.checked, true)
+ }
+
+ function test_buttonDestroyed() {
+ var group = createTemporaryObject(buttonGroup, testCase)
+ verify(group)
+
+ var buttonsSpy = createTemporaryObject(signalSpy, testCase, {target: group, signalName: "buttonsChanged"})
+ verify(buttonsSpy.valid)
+
+ var button1 = createTemporaryObject(button, testCase, {objectName: "button1", checked: true})
+
+ group.addButton(button1)
+ compare(group.buttons.length, 1)
+ compare(group.buttons[0], button1)
+ compare(group.checkedButton, button1)
+ compare(buttonsSpy.count, 1)
+
+ button1.destroy()
+ wait(0)
+ compare(group.buttons.length, 0)
+ compare(group.checkedButton, null)
+ compare(buttonsSpy.count, 2)
+ }
+
+ Component {
+ id: repeater
+ Column {
+ id: column
+ property ButtonGroup group: ButtonGroup { buttons: column.children }
+ property alias repeater: r
+ Repeater {
+ id: r
+ model: 3
+ delegate: RadioDelegate {
+ checked: index == 0
+ objectName: index
+ }
+ }
+ }
+ }
+
+ function test_repeater() {
+ var container = createTemporaryObject(repeater, testCase)
+ verify(container)
+
+ verify(container.group.checkedButton)
+ compare(container.group.checkedButton.objectName, "0")
+ }
+
+ function test_nonExclusive() {
+ var group = createTemporaryObject(nonExclusiveGroup, testCase)
+ verify(group)
+
+ compare(group.checkState, Qt.Unchecked)
+
+ var button1 = createTemporaryObject(button, testCase, {checked: true})
+ group.addButton(button1)
+ compare(button1.checked, true)
+ compare(group.checkedButton, null)
+ compare(group.checkState, Qt.Checked)
+
+ var button2 = createTemporaryObject(button, testCase, {checked: true})
+ group.addButton(button2)
+ compare(button1.checked, true)
+ compare(button2.checked, true)
+ compare(group.checkedButton, null)
+ compare(group.checkState, Qt.Checked)
+
+ var button3 = createTemporaryObject(button, testCase, {checked: false})
+ group.addButton(button3)
+ compare(button1.checked, true)
+ compare(button2.checked, true)
+ compare(button3.checked, false)
+ compare(group.checkedButton, null)
+ compare(group.checkState, Qt.PartiallyChecked)
+
+ button1.checked = false
+ compare(button1.checked, false)
+ compare(button2.checked, true)
+ compare(button3.checked, false)
+ compare(group.checkedButton, null)
+ compare(group.checkState, Qt.PartiallyChecked)
+
+ button2.checked = false
+ compare(button1.checked, false)
+ compare(button2.checked, false)
+ compare(button3.checked, false)
+ compare(group.checkedButton, null)
+ compare(group.checkState, Qt.Unchecked)
+
+ button1.checked = true
+ compare(button1.checked, true)
+ compare(button2.checked, false)
+ compare(button3.checked, false)
+ compare(group.checkedButton, null)
+ compare(group.checkState, Qt.PartiallyChecked)
+
+ button2.checked = true
+ compare(button1.checked, true)
+ compare(button2.checked, true)
+ compare(button3.checked, false)
+ compare(group.checkedButton, null)
+ compare(group.checkState, Qt.PartiallyChecked)
+
+ button3.checked = true
+ compare(button1.checked, true)
+ compare(button2.checked, true)
+ compare(button3.checked, true)
+ compare(group.checkedButton, null)
+ compare(group.checkState, Qt.Checked)
+ }
+
+ Component {
+ id: checkedButtonColumn
+ Column {
+ id: column
+ ButtonGroup { buttons: column.children }
+ Repeater {
+ id: repeater
+ delegate: Button {
+ checkable: true
+ text: modelData
+ onClicked: listModel.remove(index)
+ }
+ model: ListModel {
+ id: listModel
+ Component.onCompleted: {
+ for (var i = 0; i < 10; ++i)
+ append({text: i})
+ }
+ }
+ }
+ }
+ }
+
+ function test_checkedButtonDestroyed() {
+ var column = createTemporaryObject(checkedButtonColumn, testCase)
+ verify(column)
+
+ waitForRendering(column)
+ mouseClick(column.children[0])
+ wait(0) // don't crash (QTBUG-62946, QTBUG-63470)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_checkbox.qml b/tests/auto/quickcontrols2/controls/data/tst_checkbox.qml
new file mode 100644
index 0000000000..81c3d6ca94
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_checkbox.qml
@@ -0,0 +1,544 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "CheckBox"
+
+ Component {
+ id: checkBox
+ CheckBox { }
+ }
+
+ Component {
+ id: signalSequenceSpy
+ SignalSequenceSpy {
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged", "checkStateChanged"]
+ }
+ }
+
+ function test_text() {
+ var control = createTemporaryObject(checkBox, testCase)
+ verify(control)
+
+ compare(control.text, "")
+ control.text = "CheckBox"
+ compare(control.text, "CheckBox")
+ control.text = ""
+ compare(control.text, "")
+ }
+
+ function test_checked() {
+ var control = createTemporaryObject(checkBox, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ sequenceSpy.expectedSequence = []
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["checkStateChanged", { "checked": true, "checkState": Qt.Checked }],
+ ["checkedChanged", { "checked": true, "checkState": Qt.Checked }]]
+ control.checked = true
+ compare(control.checked, true)
+ compare(control.checkState, Qt.Checked)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["checkStateChanged", { "checked": false, "checkState": Qt.Unchecked }],
+ ["checkedChanged", { "checked": false, "checkState": Qt.Unchecked }]]
+ control.checked = false
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ verify(sequenceSpy.success)
+ }
+
+ function test_checkState() {
+ var control = createTemporaryObject(checkBox, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ sequenceSpy.expectedSequence = []
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["checkStateChanged", { "checked": true, "checkState": Qt.Checked }],
+ ["checkedChanged", { "checked": true, "checkState": Qt.Checked }]]
+ control.checkState = Qt.Checked
+ compare(control.checked, true)
+ compare(control.checkState, Qt.Checked)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["checkStateChanged", { "checked": false, "checkState": Qt.Unchecked }],
+ ["checkedChanged", { "checked": false, "checkState": Qt.Unchecked }]]
+ control.checkState = Qt.Unchecked
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ verify(sequenceSpy.success)
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(checkBox, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.Unchecked }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, true)
+ compare(control.checkState, Qt.Checked)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true, "checkState": Qt.Checked }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // release outside
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.Unchecked }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }]]
+ mouseMove(control, control.width * 2, control.height * 2, 0)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["canceled", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }]]
+ mouseRelease(control, control.width * 2, control.height * 2, Qt.LeftButton)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // right button
+ sequenceSpy.expectedSequence = []
+ mousePress(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.pressed, false)
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ }
+
+ function test_touch() {
+ var control = createTemporaryObject(checkBox, testCase)
+ verify(control)
+
+ var touch = touchEvent(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.Unchecked }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, true)
+ compare(control.checkState, Qt.Checked)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true, "checkState": Qt.Checked }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // release outside
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.Unchecked }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }]]
+ touch.move(0, control, control.width * 2, control.height * 2).commit()
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["canceled", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }]]
+ touch.release(0, control, control.width * 2, control.height * 2).commit()
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ }
+
+ function test_keys() {
+ var control = createTemporaryObject(checkBox, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ sequenceSpy.expectedSequence = []
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+ verify(sequenceSpy.success)
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.Unchecked }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ "toggled",
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, true)
+ compare(control.checkState, Qt.Checked)
+ verify(sequenceSpy.success)
+
+ // uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true, "checkState": Qt.Checked }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ "toggled",
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ verify(sequenceSpy.success)
+
+ // no change
+ sequenceSpy.expectedSequence = []
+ var keys = [Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab]
+ for (var i = 0; i < keys.length; ++i) {
+ sequenceSpy.reset()
+ keyClick(keys[i])
+ compare(control.checked, false)
+ verify(sequenceSpy.success)
+ }
+ }
+
+ Component {
+ id: checkedBoundBoxes
+ Item {
+ property CheckBox cb1: CheckBox { id: cb1 }
+ property CheckBox cb2: CheckBox { id: cb2; checked: cb1.checked; enabled: false }
+ }
+ }
+
+ function test_checked_binding() {
+ var container = createTemporaryObject(checkedBoundBoxes, testCase)
+ verify(container)
+
+ compare(container.cb1.checked, false)
+ compare(container.cb1.checkState, Qt.Unchecked)
+ compare(container.cb2.checked, false)
+ compare(container.cb2.checkState, Qt.Unchecked)
+
+ container.cb1.checked = true
+ compare(container.cb1.checked, true)
+ compare(container.cb1.checkState, Qt.Checked)
+ compare(container.cb2.checked, true)
+ compare(container.cb2.checkState, Qt.Checked)
+
+ container.cb1.checked = false
+ compare(container.cb1.checked, false)
+ compare(container.cb1.checkState, Qt.Unchecked)
+ compare(container.cb2.checked, false)
+ compare(container.cb2.checkState, Qt.Unchecked)
+ }
+
+ Component {
+ id: checkStateBoundBoxes
+ Item {
+ property CheckBox cb1: CheckBox { id: cb1 }
+ property CheckBox cb2: CheckBox { id: cb2; checkState: cb1.checkState; enabled: false }
+ }
+ }
+
+ function test_checkState_binding() {
+ var container = createTemporaryObject(checkStateBoundBoxes, testCase)
+ verify(container)
+
+ compare(container.cb1.checked, false)
+ compare(container.cb1.checkState, Qt.Unchecked)
+ compare(container.cb2.checked, false)
+ compare(container.cb2.checkState, Qt.Unchecked)
+
+ container.cb1.checkState = Qt.Checked
+ compare(container.cb1.checked, true)
+ compare(container.cb1.checkState, Qt.Checked)
+ compare(container.cb2.checked, true)
+ compare(container.cb2.checkState, Qt.Checked)
+
+ container.cb1.checkState = Qt.Unchecked
+ compare(container.cb1.checked, false)
+ compare(container.cb1.checkState, Qt.Unchecked)
+ compare(container.cb2.checked, false)
+ compare(container.cb2.checkState, Qt.Unchecked)
+
+ compare(container.cb1.tristate, false)
+ compare(container.cb2.tristate, false)
+
+ container.cb1.checkState = Qt.PartiallyChecked
+ compare(container.cb1.checked, false)
+ compare(container.cb1.checkState, Qt.PartiallyChecked)
+ compare(container.cb2.checked, false)
+ compare(container.cb2.checkState, Qt.PartiallyChecked)
+
+ // note: since Qt Quick Controls 2.4 (Qt 5.11), CheckBox does not
+ // force tristate when checkState is set to Qt.PartiallyChecked
+ compare(container.cb1.tristate, false)
+ compare(container.cb2.tristate, false)
+ }
+
+ function test_tristate() {
+ var control = createTemporaryObject(checkBox, testCase, {tristate: true})
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ sequenceSpy.expectedSequence = []
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ compare(control.tristate, true)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+
+ sequenceSpy.expectedSequence = [["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.PartiallyChecked }]]
+ control.checkState = Qt.PartiallyChecked
+ compare(control.checked, false)
+ compare(control.checkState, Qt.PartiallyChecked)
+ verify(sequenceSpy.success)
+
+ // key: partial -> checked
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.PartiallyChecked }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.PartiallyChecked }],
+ ["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, true)
+ compare(control.checkState, Qt.Checked)
+ verify(sequenceSpy.success)
+
+ // key: checked -> unchecked
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true, "checkState": Qt.Checked }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ verify(sequenceSpy.success)
+
+ // key: unchecked -> partial
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.Unchecked }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.PartiallyChecked }],
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.PartiallyChecked)
+ verify(sequenceSpy.success)
+
+ // mouse: partial -> checked
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.PartiallyChecked }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.PartiallyChecked }],
+ ["checkStateChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ "released",
+ "clicked"]
+ mouseClick(control)
+ compare(control.checked, true)
+ compare(control.checkState, Qt.Checked)
+ verify(sequenceSpy.success)
+
+ // mouse: checked -> unchecked
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true, "checkState": Qt.Checked }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": true, "checkState": Qt.Checked }],
+ ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ "released",
+ "clicked"]
+ mouseClick(control)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.Unchecked)
+ verify(sequenceSpy.success)
+
+ // mouse: unchecked -> partial
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false, "checkState": Qt.Unchecked }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": false, "checkState": Qt.Unchecked }],
+ ["checkStateChanged", { "pressed": false, "checked": false, "checkState": Qt.PartiallyChecked }],
+ "released",
+ "clicked"]
+ mouseClick(control)
+ compare(control.checked, false)
+ compare(control.checkState, Qt.PartiallyChecked)
+ verify(sequenceSpy.success)
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(checkBox, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ Component {
+ id: nextCheckStateBox
+ CheckBox {
+ tristate: true
+ nextCheckState: function() {
+ if (checkState === Qt.Checked)
+ return Qt.Unchecked
+ else
+ return Qt.Checked
+ }
+ }
+ }
+
+ function test_nextCheckState_data() {
+ return [
+ { tag: "unchecked", checkState: Qt.Unchecked, expectedState: Qt.Checked },
+ { tag: "partially-checked", checkState: Qt.PartiallyChecked, expectedState: Qt.Checked },
+ { tag: "checked", checkState: Qt.Checked, expectedState: Qt.Unchecked }
+ ]
+ }
+
+ function test_nextCheckState(data) {
+ var control = createTemporaryObject(nextCheckStateBox, testCase)
+ verify(control)
+
+ // mouse
+ control.checkState = data.checkState
+ compare(control.checkState, data.checkState)
+ mouseClick(control)
+ compare(control.checkState, data.expectedState)
+
+ // touch
+ control.checkState = data.checkState
+ compare(control.checkState, data.checkState)
+ var touch = touchEvent(control)
+ touch.press(0, control).commit().release(0, control).commit()
+ compare(control.checkState, data.expectedState)
+
+ // keyboard
+ control.forceActiveFocus()
+ tryCompare(control, "activeFocus", true)
+ control.checkState = data.checkState
+ compare(control.checkState, data.checkState)
+ keyClick(Qt.Key_Space)
+ compare(control.checkState, data.expectedState)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_checkdelegate.qml b/tests/auto/quickcontrols2/controls/data/tst_checkdelegate.qml
new file mode 100644
index 0000000000..70f1ae9dbf
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_checkdelegate.qml
@@ -0,0 +1,220 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "CheckDelegate"
+
+ Component {
+ id: checkDelegate
+ CheckDelegate {}
+ }
+
+ // TODO: data-fy tst_checkbox (rename to tst_check?) so we don't duplicate its tests here?
+
+ function test_defaults() {
+ var control = createTemporaryObject(checkDelegate, testCase);
+ verify(control);
+ verify(!control.checked);
+ }
+
+ function test_checked() {
+ var control = createTemporaryObject(checkDelegate, testCase);
+ verify(control);
+
+ mouseClick(control);
+ verify(control.checked);
+
+ mouseClick(control);
+ verify(!control.checked);
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(checkDelegate, testCase);
+ verify(control);
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset);
+ }
+
+ function test_spacing() {
+ var control = createTemporaryObject(checkDelegate, testCase, { text: "Some long, long, long text" })
+ verify(control)
+ verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
+
+ var textLabel = findChild(control.contentItem, "label")
+ verify(textLabel)
+
+ // The implicitWidth of the IconLabel that all buttons use as their contentItem should be
+ // equal to the implicitWidth of the Text and the check indicator + spacing while no icon is set.
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing)
+
+ control.spacing += 100
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing)
+
+ compare(control.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing + control.leftPadding + control.rightPadding)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: CheckDelegate.IconOnly },
+ { "tag": "TextOnly", display: CheckDelegate.TextOnly },
+ { "tag": "TextUnderIcon", display: CheckDelegate.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: CheckDelegate.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: CheckDelegate.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: CheckDelegate.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: CheckDelegate.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: CheckDelegate.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(checkDelegate, testCase, {
+ text: "CheckDelegate",
+ display: data.display,
+ width: 400,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ var availableWidth = control.availableWidth - control.indicator.width - control.spacing
+ var indicatorOffset = control.mirrored ? control.indicator.width + control.spacing : 0
+
+ switch (control.display) {
+ case CheckDelegate.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, indicatorOffset + (availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case CheckDelegate.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, control.mirrored ? control.availableWidth - textLabel.width : 0)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case CheckDelegate.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, indicatorOffset + (availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, indicatorOffset + (availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case CheckDelegate.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+
+ Component {
+ id: nextCheckStateDelegate
+ CheckDelegate {
+ tristate: true
+ nextCheckState: function() {
+ if (checkState === Qt.Checked)
+ return Qt.Unchecked
+ else
+ return Qt.Checked
+ }
+ }
+ }
+
+ function test_nextCheckState_data() {
+ return [
+ { tag: "unchecked", checkState: Qt.Unchecked, expectedState: Qt.Checked },
+ { tag: "partially-checked", checkState: Qt.PartiallyChecked, expectedState: Qt.Checked },
+ { tag: "checked", checkState: Qt.Checked, expectedState: Qt.Unchecked }
+ ]
+ }
+
+ function test_nextCheckState(data) {
+ var control = createTemporaryObject(nextCheckStateDelegate, testCase)
+ verify(control)
+
+ // mouse
+ control.checkState = data.checkState
+ compare(control.checkState, data.checkState)
+ mouseClick(control)
+ compare(control.checkState, data.expectedState)
+
+ // touch
+ control.checkState = data.checkState
+ compare(control.checkState, data.checkState)
+ var touch = touchEvent(control)
+ touch.press(0, control).commit().release(0, control).commit()
+ compare(control.checkState, data.expectedState)
+
+ // keyboard
+ control.forceActiveFocus()
+ tryCompare(control, "activeFocus", true)
+ control.checkState = data.checkState
+ compare(control.checkState, data.checkState)
+ keyClick(Qt.Key_Space)
+ compare(control.checkState, data.expectedState)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_combobox.qml b/tests/auto/quickcontrols2/controls/data/tst_combobox.qml
new file mode 100644
index 0000000000..e015553355
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_combobox.qml
@@ -0,0 +1,2324 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "ComboBox"
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component {
+ id: comboBox
+ ComboBox { }
+ }
+
+ Component {
+ id: emptyBox
+ ComboBox {
+ delegate: ItemDelegate {
+ width: parent.width
+ }
+ }
+ }
+
+ Component {
+ id: mouseArea
+ MouseArea { }
+ }
+
+ Component {
+ id: customPopup
+ Popup {
+ width: 100
+ implicitHeight: contentItem.implicitHeight
+ contentItem: TextInput {
+ anchors.fill: parent
+ }
+ }
+ }
+
+ Component {
+ id: comboBoxWithShaderEffect
+ ComboBox {
+ delegate: Rectangle {
+ Text {
+ id: txt
+ anchors.centerIn: parent
+ text: "item" + index
+ font.pixelSize: 20
+ color: "red"
+ }
+ id: rect
+ objectName: "rect"
+ width: parent.width
+ height: txt.implicitHeight
+ gradient: Gradient {
+ GradientStop { color: "lightsteelblue"; position: 0.0 }
+ GradientStop { color: "blue"; position: 1.0 }
+ }
+ layer.enabled: true
+ layer.effect: ShaderEffect {
+ objectName: "ShaderFX"
+ width: rect.width
+ height: rect.height
+ fragmentShader: "
+ uniform lowp sampler2D source; // this item
+ uniform lowp float qt_Opacity; // inherited opacity of this item
+ varying highp vec2 qt_TexCoord0;
+ void main() {
+ lowp vec4 p = texture2D(source, qt_TexCoord0);
+ lowp float g = dot(p.xyz, vec3(0.344, 0.5, 0.156));
+ gl_FragColor = vec4(g, g, g, p.a) * qt_Opacity;
+ }"
+
+ }
+ }
+ }
+ }
+
+ function init() {
+ // QTBUG-61225: Move the mouse away to avoid QQuickWindowPrivate::flushFrameSynchronousEvents()
+ // delivering interfering hover events based on the last mouse position from earlier tests. For
+ // example, ComboBox::test_activation() kept receiving hover events for the last mouse position
+ // from CheckDelegate::test_checked().
+ mouseMove(testCase, testCase.width - 1, testCase.height - 1)
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(comboBox, testCase)
+ verify(control)
+
+ compare(control.count, 0)
+ compare(control.model, undefined)
+ compare(control.flat, false)
+ compare(control.pressed, false)
+ compare(control.currentIndex, -1)
+ compare(control.highlightedIndex, -1)
+ compare(control.currentText, "")
+ verify(control.delegate)
+ if (Qt.platform.pluginName !== "cocoa" && Qt.platform.pluginName !== "windows") {
+ // Only the non-native styles sets an indicator delegate. The native
+ // styles will instead draw the indicator as a part of the background.
+ verify(control.indicator)
+ }
+ verify(control.popup)
+ verify(control.acceptableInput)
+ compare(control.inputMethodHints, Qt.ImhNoPredictiveText)
+ }
+
+ function test_array() {
+ var control = createTemporaryObject(comboBox, testCase)
+ verify(control)
+
+ var items = [ "Banana", "Apple", "Coconut" ]
+
+ control.model = items
+ compare(control.model, items)
+
+ compare(control.count, 3)
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "Banana")
+
+ control.currentIndex = 2
+ compare(control.currentIndex, 2)
+ compare(control.currentText, "Coconut")
+
+ control.model = null
+ compare(control.model, null)
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentText, "")
+ }
+
+ function test_objects() {
+ var control = createTemporaryObject(emptyBox, testCase)
+ verify(control)
+
+ var items = [
+ { text: "Apple" },
+ { text: "Orange" },
+ { text: "Banana" }
+ ]
+
+ control.model = items
+ compare(control.model, items)
+
+ compare(control.count, 3)
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "Apple")
+
+ control.currentIndex = 2
+ compare(control.currentIndex, 2)
+ compare(control.currentText, "Banana")
+
+ control.model = null
+ compare(control.model, null)
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentText, "")
+ }
+
+ function test_qobjects() {
+ var control = createTemporaryObject(emptyBox, testCase, {textRole: "text"})
+ verify(control)
+
+ var obj1 = Qt.createQmlObject("import QtQml; QtObject { property string text: 'one' }", control)
+ var obj2 = Qt.createQmlObject("import QtQml; QtObject { property string text: 'two' }", control)
+ var obj3 = Qt.createQmlObject("import QtQml; QtObject { property string text: 'three' }", control)
+
+ control.model = [obj1, obj2, obj3]
+
+ compare(control.count, 3)
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "one")
+
+ control.currentIndex = 2
+ compare(control.currentIndex, 2)
+ compare(control.currentText, "three")
+
+ control.model = null
+ compare(control.model, null)
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentText, "")
+ }
+
+ function test_number() {
+ var control = createTemporaryObject(comboBox, testCase)
+ verify(control)
+
+ control.model = 10
+ compare(control.model, 10)
+
+ compare(control.count, 10)
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "0")
+
+ control.currentIndex = 9
+ compare(control.currentIndex, 9)
+ compare(control.currentText, "9")
+
+ control.model = 0
+ compare(control.model, 0)
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentText, "")
+ }
+
+ ListModel {
+ id: listmodel
+ ListElement { text: "First" }
+ ListElement { text: "Second" }
+ ListElement { text: "Third" }
+ ListElement { text: "Fourth" }
+ ListElement { text: "Fifth" }
+ }
+
+ function test_listModel() {
+ var control = createTemporaryObject(comboBox, testCase)
+ verify(control)
+
+ control.model = listmodel
+ compare(control.model, listmodel)
+
+ compare(control.count, 5)
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "First")
+
+ control.currentIndex = 2
+ compare(control.currentIndex, 2)
+ compare(control.currentText, "Third")
+
+ control.model = undefined
+ compare(control.model, undefined)
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentText, "")
+ }
+
+ ListModel {
+ id: fruitmodel
+ ListElement { name: "Apple"; color: "red" }
+ ListElement { name: "Orange"; color: "orange" }
+ ListElement { name: "Banana"; color: "yellow" }
+ }
+
+ Component {
+ id: fruitModelComponent
+ ListModel {
+ ListElement { name: "Apple"; color: "red" }
+ ListElement { name: "Orange"; color: "orange" }
+ ListElement { name: "Banana"; color: "yellow" }
+ }
+ }
+
+ property var fruitarray: [
+ { name: "Apple", color: "red" },
+ { name: "Orange", color: "orange" },
+ { name: "Banana", color: "yellow" }
+ ]
+
+ Component {
+ id: birdModelComponent
+ ListModel {
+ ListElement { name: "Galah"; color: "pink" }
+ ListElement { name: "Kookaburra"; color: "brown" }
+ ListElement { name: "Magpie"; color: "black" }
+ }
+ }
+
+ function test_textRole_data() {
+ return [
+ { tag: "ListModel", model: fruitmodel },
+ { tag: "ObjectArray", model: fruitarray }
+ ]
+ }
+
+ function test_textRole(data) {
+ var control = createTemporaryObject(emptyBox, testCase)
+ verify(control)
+
+ control.model = data.model
+ compare(control.count, 3)
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "")
+
+ control.textRole = "name"
+ compare(control.currentText, "Apple")
+
+ control.textRole = "color"
+ compare(control.currentText, "red")
+
+ control.currentIndex = 1
+ compare(control.currentIndex, 1)
+ compare(control.currentText, "orange")
+
+ control.textRole = "name"
+ compare(control.currentText, "Orange")
+
+ control.textRole = ""
+ compare(control.currentText, "")
+ }
+
+ function test_textAt() {
+ var control = createTemporaryObject(comboBox, testCase)
+ verify(control)
+
+ control.model = ["Apple", "Orange", "Banana"]
+ compare(control.textAt(0), "Apple")
+ compare(control.textAt(1), "Orange")
+ compare(control.textAt(2), "Banana")
+ compare(control.textAt(-1), "") // TODO: null?
+ compare(control.textAt(5), "") // TODO: null?
+ }
+
+ function test_find_data() {
+ return [
+ { tag: "Banana (MatchExactly)", term: "Banana", flags: Qt.MatchExactly, index: 0 },
+ { tag: "banana (MatchExactly)", term: "banana", flags: Qt.MatchExactly, index: 1 },
+ { tag: "bananas (MatchExactly)", term: "bananas", flags: Qt.MatchExactly, index: -1 },
+ { tag: "Cocomuffin (MatchExactly)", term: "Cocomuffin", flags: Qt.MatchExactly, index: 4 },
+
+ { tag: "b(an)+a (MatchRegularExpression)", term: "B(an)+a", flags: Qt.MatchRegularExpression, index: 0 },
+ { tag: "b(an)+a (MatchRegularExpression|MatchCaseSensitive)", term: "b(an)+a", flags: Qt.MatchRegularExpression | Qt.MatchCaseSensitive, index: 1 },
+ { tag: "[coc]+\\w+ (MatchRegularExpression)", term: "[coc]+\\w+", flags: Qt.MatchRegularExpression, index: 2 },
+
+ { tag: "?pp* (MatchWildcard)", term: "?pp*", flags: Qt.MatchWildcard, index: 3 },
+ { tag: "app* (MatchWildcard|MatchCaseSensitive)", term: "app*", flags: Qt.MatchWildcard | Qt.MatchCaseSensitive, index: -1 },
+
+ { tag: "Banana (MatchFixedString)", term: "Banana", flags: Qt.MatchFixedString, index: 0 },
+ { tag: "banana (MatchFixedString|MatchCaseSensitive)", term: "banana", flags: Qt.MatchFixedString | Qt.MatchCaseSensitive, index: 1 },
+
+ { tag: "coco (MatchStartsWith)", term: "coco", flags: Qt.MatchStartsWith, index: 2 },
+ { tag: "coco (MatchStartsWith|MatchCaseSensitive)", term: "coco", flags: Qt.StartsWith | Qt.MatchCaseSensitive, index: -1 },
+
+ { tag: "MUFFIN (MatchEndsWith)", term: "MUFFIN", flags: Qt.MatchEndsWith, index: 4 },
+ { tag: "MUFFIN (MatchEndsWith|MatchCaseSensitive)", term: "MUFFIN", flags: Qt.MatchEndsWith | Qt.MatchCaseSensitive, index: -1 },
+
+ { tag: "Con (MatchContains)", term: "Con", flags: Qt.MatchContains, index: 2 },
+ { tag: "Con (MatchContains|MatchCaseSensitive)", term: "Con", flags: Qt.MatchContains | Qt.MatchCaseSensitive, index: -1 },
+ ]
+ }
+
+ function test_find(data) {
+ var control = createTemporaryObject(comboBox, testCase)
+ verify(control)
+
+ control.model = ["Banana", "banana", "Coconut", "Apple", "Cocomuffin"]
+
+ compare(control.find(data.term, data.flags), data.index)
+ }
+
+ function test_valueRole_data() {
+ return [
+ { tag: "ListModel", model: fruitmodel },
+ { tag: "ObjectArray", model: fruitarray }
+ ]
+ }
+
+ function test_valueRole(data) {
+ var control = createTemporaryObject(emptyBox, testCase,
+ { model: data.model, valueRole: "color" })
+ verify(control)
+ compare(control.count, 3)
+ compare(control.currentIndex, 0)
+ compare(control.currentValue, "red")
+
+ control.valueRole = "name"
+ compare(control.currentValue, "Apple")
+
+ control.currentIndex = 1
+ compare(control.currentIndex, 1)
+ compare(control.currentValue, "Orange")
+
+ control.valueRole = "color"
+ compare(control.currentValue, "orange")
+
+ control.model = null
+ compare(control.currentIndex, -1)
+ // An invalid QVariant is represented as undefined.
+ compare(control.currentValue, undefined)
+
+ control.valueRole = ""
+ compare(control.currentValue, undefined)
+ }
+
+ function test_valueAt() {
+ var control = createTemporaryObject(comboBox, testCase,
+ { model: fruitmodel, textRole: "name", valueRole: "color" })
+ verify(control)
+
+ compare(control.valueAt(0), "red")
+ compare(control.valueAt(1), "orange")
+ compare(control.valueAt(2), "yellow")
+ compare(control.valueAt(-1), undefined)
+ compare(control.valueAt(5), undefined)
+ }
+
+ function test_indexOfValue_data() {
+ return [
+ { tag: "red", expectedIndex: 0 },
+ { tag: "orange", expectedIndex: 1 },
+ { tag: "yellow", expectedIndex: 2 },
+ { tag: "brown", expectedIndex: -1 },
+ ]
+ }
+
+ function test_indexOfValue(data) {
+ var control = createTemporaryObject(comboBox, testCase,
+ { model: fruitmodel, textRole: "name", valueRole: "color" })
+ verify(control)
+
+ compare(control.indexOfValue(data.tag), data.expectedIndex)
+ }
+
+ function test_currentValueAfterModelChanged() {
+ let fruitModel = createTemporaryObject(fruitModelComponent, testCase)
+ verify(fruitModel)
+
+ let control = createTemporaryObject(comboBox, testCase,
+ { model: fruitModel, textRole: "name", valueRole: "color", currentIndex: 1 })
+ verify(control)
+ compare(control.currentText, "Orange")
+ compare(control.currentValue, "orange")
+
+ // Remove "Apple"; the current item should now be "Banana", so currentValue should be "yellow".
+ fruitModel.remove(0)
+ compare(control.currentText, "Banana")
+ compare(control.currentValue, "yellow")
+ }
+
+ function test_currentValueAfterNewModelSet() {
+ let control = createTemporaryObject(comboBox, testCase,
+ { model: fruitmodel, textRole: "name", valueRole: "color", currentIndex: 0 })
+ verify(control)
+ compare(control.currentText, "Apple")
+ compare(control.currentValue, "red")
+
+ // Swap the model out entirely. Since the currentIndex was 0 and
+ // is reset to 0 when a new model is set, it remains 0.
+ let birdModel = createTemporaryObject(birdModelComponent, testCase)
+ verify(birdModel)
+ control.model = birdModel
+ compare(control.currentText, "Galah")
+ compare(control.currentValue, "pink")
+ }
+
+ function test_arrowKeys() {
+ var control = createTemporaryObject(comboBox, testCase,
+ { model: fruitmodel, textRole: "name", valueRole: "color" })
+ verify(control)
+
+ var activatedSpy = signalSpy.createObject(control, {target: control, signalName: "activated"})
+ verify(activatedSpy.valid)
+
+ var highlightedSpy = signalSpy.createObject(control, {target: control, signalName: "highlighted"})
+ verify(highlightedSpy.valid)
+
+ var openedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ var closedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "closed"})
+ verify(closedSpy.valid)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, -1)
+
+ keyClick(Qt.Key_Down)
+ compare(control.currentIndex, 1)
+ compare(control.highlightedIndex, -1)
+ compare(highlightedSpy.count, 0)
+ compare(activatedSpy.count, 1)
+ compare(activatedSpy.signalArguments[0][0], 1)
+ activatedSpy.clear()
+
+ keyClick(Qt.Key_Down)
+ compare(control.currentIndex, 2)
+ compare(control.highlightedIndex, -1)
+ compare(highlightedSpy.count, 0)
+ compare(activatedSpy.count, 1)
+ compare(activatedSpy.signalArguments[0][0], 2)
+ activatedSpy.clear()
+
+ keyClick(Qt.Key_Down)
+ compare(control.currentIndex, 2)
+ compare(control.highlightedIndex, -1)
+ compare(highlightedSpy.count, 0)
+ compare(activatedSpy.count, 0)
+
+ keyClick(Qt.Key_Up)
+ compare(control.currentIndex, 1)
+ compare(control.highlightedIndex, -1)
+ compare(highlightedSpy.count, 0)
+ compare(activatedSpy.count, 1)
+ compare(activatedSpy.signalArguments[0][0], 1)
+ activatedSpy.clear()
+
+ keyClick(Qt.Key_Up)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, -1)
+ compare(highlightedSpy.count, 0)
+ compare(activatedSpy.count, 1)
+ compare(activatedSpy.signalArguments[0][0], 0)
+ activatedSpy.clear()
+
+ keyClick(Qt.Key_Up)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, -1)
+ compare(highlightedSpy.count, 0)
+ compare(activatedSpy.count, 0)
+
+ // show popup
+ keyClick(Qt.Key_Space)
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 0)
+
+ keyClick(Qt.Key_Down)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 1)
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 1)
+ compare(highlightedSpy.signalArguments[0][0], 1)
+ highlightedSpy.clear()
+
+ keyClick(Qt.Key_Down)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 2)
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 1)
+ compare(highlightedSpy.signalArguments[0][0], 2)
+ highlightedSpy.clear()
+
+ keyClick(Qt.Key_Down)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 2)
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 0)
+
+ keyClick(Qt.Key_Up)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 1)
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 1)
+ compare(highlightedSpy.signalArguments[0][0], 1)
+ highlightedSpy.clear()
+
+ keyClick(Qt.Key_Up)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 0)
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 1)
+ compare(highlightedSpy.signalArguments[0][0], 0)
+ highlightedSpy.clear()
+
+ keyClick(Qt.Key_Up)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 0)
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 0)
+
+ keyClick(Qt.Key_Down)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 1)
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 1)
+ compare(highlightedSpy.signalArguments[0][0], 1)
+ highlightedSpy.clear()
+
+ // hide popup
+ keyClick(Qt.Key_Space)
+ closedSpy.wait()
+ compare(closedSpy.count, 1)
+
+ compare(control.currentIndex, 1)
+ compare(control.highlightedIndex, -1)
+ }
+
+ function test_keys_space_enter_escape_data() {
+ return [
+ { tag: "space-space", key1: Qt.Key_Space, key2: Qt.Key_Space, showPopup: true, showPress: true, hidePopup: true, hidePress: true },
+ { tag: "space-enter", key1: Qt.Key_Space, key2: Qt.Key_Enter, showPopup: true, showPress: true, hidePopup: true, hidePress: true },
+ { tag: "space-return", key1: Qt.Key_Space, key2: Qt.Key_Return, showPopup: true, showPress: true, hidePopup: true, hidePress: true },
+ { tag: "space-escape", key1: Qt.Key_Space, key2: Qt.Key_Escape, showPopup: true, showPress: true, hidePopup: true, hidePress: false },
+ { tag: "space-0", key1: Qt.Key_Space, key2: Qt.Key_0, showPopup: true, showPress: true, hidePopup: false, hidePress: false },
+ { tag: "enter-enter", key1: Qt.Key_Enter, key2: Qt.Key_Enter, showPopup: false, showPress: false, hidePopup: true, hidePress: false },
+ { tag: "return-return", key1: Qt.Key_Return, key2: Qt.Key_Return, showPopup: false, showPress: false, hidePopup: true, hidePress: false },
+ { tag: "escape-escape", key1: Qt.Key_Escape, key2: Qt.Key_Escape, showPopup: false, showPress: false, hidePopup: true, hidePress: false }
+ ]
+ }
+
+ function test_keys_space_enter_escape(data) {
+ var control = createTemporaryObject(comboBox, testCase, {model: 3})
+ verify(control)
+
+ var openedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ compare(control.pressed, false)
+ compare(control.popup.visible, false)
+
+ // show popup
+ keyPress(data.key1)
+ compare(control.pressed, data.showPress)
+ compare(control.popup.visible, false)
+ keyRelease(data.key1)
+ compare(control.pressed, false)
+ compare(control.popup.visible, data.showPopup)
+ if (data.showPopup)
+ openedSpy.wait()
+
+ // hide popup
+ keyPress(data.key2)
+ compare(control.pressed, data.hidePress)
+ keyRelease(data.key2)
+ compare(control.pressed, false)
+ tryCompare(control.popup, "visible", !data.hidePopup)
+ }
+
+ function test_keys_home_end() {
+ var control = createTemporaryObject(comboBox, testCase, {model: 5})
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, -1)
+
+ var activatedCount = 0
+ var activatedSpy = signalSpy.createObject(control, {target: control, signalName: "activated"})
+ verify(activatedSpy.valid)
+
+ var highlightedCount = 0
+ var highlightedSpy = signalSpy.createObject(control, {target: control, signalName: "highlighted"})
+ verify(highlightedSpy.valid)
+
+ var currentIndexCount = 0
+ var currentIndexSpy = signalSpy.createObject(control, {target: control, signalName: "currentIndexChanged"})
+ verify(currentIndexSpy.valid)
+
+ var highlightedIndexCount = 0
+ var highlightedIndexSpy = signalSpy.createObject(control, {target: control, signalName: "highlightedIndexChanged"})
+ verify(highlightedIndexSpy.valid)
+
+ // end (popup closed)
+ keyClick(Qt.Key_End)
+ compare(control.currentIndex, 4)
+ compare(currentIndexSpy.count, ++currentIndexCount)
+
+ compare(control.highlightedIndex, -1)
+ compare(highlightedIndexSpy.count, highlightedIndexCount)
+
+ compare(activatedSpy.count, ++activatedCount)
+ compare(activatedSpy.signalArguments[activatedCount-1][0], 4)
+
+ compare(highlightedSpy.count, highlightedCount)
+
+ // repeat (no changes/signals)
+ keyClick(Qt.Key_End)
+ compare(currentIndexSpy.count, currentIndexCount)
+ compare(highlightedIndexSpy.count, highlightedIndexCount)
+ compare(activatedSpy.count, activatedCount)
+ compare(highlightedSpy.count, highlightedCount)
+
+ // home (popup closed)
+ keyClick(Qt.Key_Home)
+ compare(control.currentIndex, 0)
+ compare(currentIndexSpy.count, ++currentIndexCount)
+
+ compare(control.highlightedIndex, -1)
+ compare(highlightedIndexSpy.count, highlightedIndexCount)
+
+ compare(activatedSpy.count, ++activatedCount)
+ compare(activatedSpy.signalArguments[activatedCount-1][0], 0)
+
+ compare(highlightedSpy.count, highlightedCount)
+
+ // repeat (no changes/signals)
+ keyClick(Qt.Key_Home)
+ compare(currentIndexSpy.count, currentIndexCount)
+ compare(highlightedIndexSpy.count, highlightedIndexCount)
+ compare(activatedSpy.count, activatedCount)
+ compare(highlightedSpy.count, highlightedCount)
+
+ control.popup.open()
+ compare(control.highlightedIndex, 0)
+ compare(highlightedIndexSpy.count, ++highlightedIndexCount)
+ compare(highlightedSpy.count, highlightedCount)
+
+ // end (popup open)
+ keyClick(Qt.Key_End)
+ compare(control.currentIndex, 0)
+ compare(currentIndexSpy.count, currentIndexCount)
+
+ compare(control.highlightedIndex, 4)
+ compare(highlightedIndexSpy.count, ++highlightedIndexCount)
+
+ compare(activatedSpy.count, activatedCount)
+
+ compare(highlightedSpy.count, ++highlightedCount)
+ compare(highlightedSpy.signalArguments[highlightedCount-1][0], 4)
+
+ // repeat (no changes/signals)
+ keyClick(Qt.Key_End)
+ compare(currentIndexSpy.count, currentIndexCount)
+ compare(highlightedIndexSpy.count, highlightedIndexCount)
+ compare(activatedSpy.count, activatedCount)
+ compare(highlightedSpy.count, highlightedCount)
+
+ // home (popup open)
+ keyClick(Qt.Key_Home)
+ compare(control.currentIndex, 0)
+ compare(currentIndexSpy.count, currentIndexCount)
+
+ compare(control.highlightedIndex, 0)
+ compare(highlightedIndexSpy.count, ++highlightedIndexCount)
+
+ compare(activatedSpy.count, activatedCount)
+
+ compare(highlightedSpy.count, ++highlightedCount)
+ compare(highlightedSpy.signalArguments[highlightedCount-1][0], 0)
+
+ // repeat (no changes/signals)
+ keyClick(Qt.Key_Home)
+ compare(currentIndexSpy.count, currentIndexCount)
+ compare(highlightedIndexSpy.count, highlightedIndexCount)
+ compare(activatedSpy.count, activatedCount)
+ compare(highlightedSpy.count, highlightedCount)
+ }
+
+ function test_keySearch() {
+ var control = createTemporaryObject(comboBox, testCase, {model: ["Banana", "Coco", "Coconut", "Apple", "Cocomuffin"]})
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "Banana")
+ compare(control.highlightedIndex, -1)
+
+ keyPress(Qt.Key_C)
+ compare(control.currentIndex, 1)
+ compare(control.currentText, "Coco")
+ compare(control.highlightedIndex, -1)
+
+ // no match
+ keyPress(Qt.Key_N)
+ compare(control.currentIndex, 1)
+ compare(control.currentText, "Coco")
+ compare(control.highlightedIndex, -1)
+
+ keyPress(Qt.Key_C)
+ compare(control.currentIndex, 2)
+ compare(control.currentText, "Coconut")
+ compare(control.highlightedIndex, -1)
+
+ keyPress(Qt.Key_C)
+ compare(control.currentIndex, 4)
+ compare(control.currentText, "Cocomuffin")
+ compare(control.highlightedIndex, -1)
+
+ // wrap
+ keyPress(Qt.Key_C)
+ compare(control.currentIndex, 1)
+ compare(control.currentText, "Coco")
+ compare(control.highlightedIndex, -1)
+
+ keyPress(Qt.Key_A)
+ compare(control.currentIndex, 3)
+ compare(control.currentText, "Apple")
+ compare(control.highlightedIndex, -1)
+
+ keyPress(Qt.Key_B)
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "Banana")
+ compare(control.highlightedIndex, -1)
+
+ // popup
+ control.popup.open()
+ tryCompare(control.popup, "opened", true)
+
+ compare(control.currentIndex, 0)
+ compare(control.highlightedIndex, 0)
+
+ keyClick(Qt.Key_C)
+ compare(control.highlightedIndex, 1) // "Coco"
+ compare(control.currentIndex, 0)
+
+ // no match
+ keyClick(Qt.Key_N)
+ compare(control.highlightedIndex, 1)
+ compare(control.currentIndex, 0)
+
+ keyClick(Qt.Key_C)
+ compare(control.highlightedIndex, 2) // "Coconut"
+ compare(control.currentIndex, 0)
+
+ keyClick(Qt.Key_C)
+ compare(control.highlightedIndex, 4) // "Cocomuffin"
+ compare(control.currentIndex, 0)
+
+ // wrap
+ keyClick(Qt.Key_C)
+ compare(control.highlightedIndex, 1) // "Coco"
+ compare(control.currentIndex, 0)
+
+ keyClick(Qt.Key_B)
+ compare(control.highlightedIndex, 0) // "Banana"
+ compare(control.currentIndex, 0)
+
+ keyClick(Qt.Key_A)
+ compare(control.highlightedIndex, 3) // "Apple"
+ compare(control.currentIndex, 0)
+
+ verify(control.popup.visible)
+
+ // accept
+ keyClick(Qt.Key_Return)
+ tryCompare(control.popup, "visible", false)
+ compare(control.currentIndex, 3)
+ compare(control.currentText, "Apple")
+ compare(control.highlightedIndex, -1)
+ }
+
+ function test_popup() {
+ var control = createTemporaryObject(comboBox, testCase, {model: 3})
+ verify(control)
+
+ // show below
+ mousePress(control)
+ compare(control.pressed, true)
+ compare(control.popup.visible, false)
+ mouseRelease(control)
+ compare(control.pressed, false)
+ compare(control.popup.visible, true)
+ verify(control.popup.contentItem.y >= control.y)
+
+ // hide
+ mouseClick(control)
+ compare(control.pressed, false)
+ tryCompare(control.popup, "visible", false)
+
+ // show above
+ control.y = control.Window.height - control.height
+ mousePress(control)
+ compare(control.pressed, true)
+ compare(control.popup.visible, false)
+ mouseRelease(control)
+ compare(control.pressed, false)
+ compare(control.popup.visible, true)
+ verify(control.popup.contentItem.y < control.y)
+
+
+ // Account for when a transition of a scale from 0.9-1.0 that it is placed above right away and not below
+ // first just because there is room at the 0.9 scale
+ if (control.popup.enter !== null) {
+ // hide
+ mouseClick(control)
+ compare(control.pressed, false)
+ tryCompare(control.popup, "visible", false)
+ control.y = control.Window.height - (control.popup.contentItem.height * 0.99)
+ var popupYSpy = createTemporaryObject(signalSpy, testCase, {target: control.popup, signalName: "yChanged"})
+ verify(popupYSpy.valid)
+ mousePress(control)
+ compare(control.pressed, true)
+ compare(control.popup.visible, false)
+ mouseRelease(control)
+ compare(control.pressed, false)
+ compare(control.popup.visible, true)
+ tryCompare(control.popup.enter, "running", false)
+ verify(control.popup.contentItem.y < control.y)
+ verify(popupYSpy.count === 1)
+ }
+
+ // follow the control outside the horizontal window bounds
+ control.x = -control.width / 2
+ compare(control.x, -control.width / 2)
+ compare(control.popup.contentItem.parent.x, -control.width / 2)
+ control.x = testCase.width - control.width / 2
+ compare(control.x, testCase.width - control.width / 2)
+ compare(control.popup.contentItem.parent.x, testCase.width - control.width / 2)
+
+ // close the popup when hidden (QTBUG-67684)
+ control.popup.open()
+ tryCompare(control.popup, "opened", true)
+ control.visible = false
+ tryCompare(control.popup, "visible", false)
+ }
+
+ Component {
+ id: reopenCombo
+ Window {
+ property alias innerCombo: innerCombo
+ visible: true
+ width: 300
+ height: 300
+ ComboBox {
+ id: innerCombo
+ model: 10
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+ }
+
+ // This test checks that when reopening the combobox that it is still appears at the same y position as
+ // previously
+ function test_reopen_popup() {
+ var control = createTemporaryObject(reopenCombo, testCase)
+ verify(control)
+ var y = 0;
+ for (var i = 0; i < 2; ++i) {
+ tryCompare(control.innerCombo.popup, "visible", false)
+ control.innerCombo.y = control.height - (control.innerCombo.popup.contentItem.height * 0.99)
+ var popupYSpy = createTemporaryObject(signalSpy, testCase, {target: control.innerCombo.popup, signalName: "yChanged"})
+ verify(popupYSpy.valid)
+ mousePress(control.innerCombo)
+ compare(control.innerCombo.pressed, true)
+ compare(control.innerCombo.popup.visible, false)
+ mouseRelease(control.innerCombo)
+ compare(control.innerCombo.pressed, false)
+ compare(control.innerCombo.popup.visible, true)
+ if (control.innerCombo.popup.enter)
+ tryCompare(control.innerCombo.popup.enter, "running", false)
+ // Check on the second opening that it has the same y position as before
+ if (i !== 0) {
+ // y should not have changed again
+ verify(popupYSpy.count === 0)
+ verify(y === control.innerCombo.popup.y)
+ } else {
+ // In some cases on the initial show, y changes more than once
+ verify(popupYSpy.count >= 1)
+ y = control.innerCombo.popup.y
+ mouseClick(control.innerCombo)
+ compare(control.innerCombo.pressed, false)
+ tryCompare(control.innerCombo.popup, "visible", false)
+ }
+ }
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(comboBox, testCase, {model: 3, hoverEnabled: false})
+ verify(control)
+
+ var activatedSpy = signalSpy.createObject(control, {target: control, signalName: "activated"})
+ verify(activatedSpy.valid)
+
+ mouseClick(control)
+ compare(control.popup.visible, true)
+
+ var content = control.popup.contentItem
+ waitForRendering(content)
+
+ // press - move - release outside - not activated - not closed
+ mousePress(content)
+ compare(activatedSpy.count, 0)
+ mouseMove(content, content.width * 2)
+ compare(activatedSpy.count, 0)
+ mouseRelease(content, content.width * 2)
+ compare(activatedSpy.count, 0)
+ compare(control.popup.visible, true)
+
+ // press - move - release inside - activated - closed
+ mousePress(content)
+ compare(activatedSpy.count, 0)
+ mouseMove(content, content.width / 2 + 1, content.height / 2 + 1)
+ compare(activatedSpy.count, 0)
+ mouseRelease(content)
+ compare(activatedSpy.count, 1)
+ tryCompare(control.popup, "visible", false)
+ }
+
+ function test_touch() {
+ var control = createTemporaryObject(comboBox, testCase, {model: 3})
+ verify(control)
+
+ var touch = touchEvent(control)
+
+ var activatedSpy = signalSpy.createObject(control, {target: control, signalName: "activated"})
+ verify(activatedSpy.valid)
+
+ var highlightedSpy = signalSpy.createObject(control, {target: control, signalName: "highlighted"})
+ verify(highlightedSpy.valid)
+
+ touch.press(0, control).commit()
+ touch.release(0, control).commit()
+ compare(control.popup.visible, true)
+
+ var content = control.popup.contentItem
+ waitForRendering(content)
+
+ // press - move - release outside - not activated - not closed
+ touch.press(0, control).commit()
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 0)
+ touch.move(0, control, control.width * 2, control.height / 2).commit()
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 0)
+ touch.release(0, control, control.width * 2, control.height / 2).commit()
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 0)
+ compare(control.popup.visible, true)
+
+ // press - move - release inside - activated - closed
+ touch.press(0, content).commit()
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 0)
+ touch.move(0, content, content.width / 2 + 1, content.height / 2 + 1).commit()
+ compare(activatedSpy.count, 0)
+ compare(highlightedSpy.count, 0)
+ touch.release(0, content).commit()
+ compare(activatedSpy.count, 1)
+ compare(highlightedSpy.count, 1)
+ tryCompare(control.popup, "visible", false)
+ }
+
+ function test_down() {
+ var control = createTemporaryObject(comboBox, testCase, {model: 3})
+ verify(control)
+
+ // some styles position the popup over the combo button. move it out
+ // of the way to avoid stealing mouse presses. we want to test the
+ // combinations of the button being pressed and the popup being visible.
+ control.popup.y = control.height
+
+ var downSpy = signalSpy.createObject(control, {target: control, signalName: "downChanged"})
+ verify(downSpy.valid)
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ mousePress(control)
+ compare(control.popup.visible, false)
+ compare(control.pressed, true)
+ compare(control.down, true)
+ compare(downSpy.count, 1)
+ compare(pressedSpy.count, 1)
+
+ mouseRelease(control)
+ compare(control.popup.visible, true)
+ compare(control.pressed, false)
+ compare(control.down, true)
+ compare(downSpy.count, 3)
+ compare(pressedSpy.count, 2)
+
+ compare(control.popup.y, control.height)
+
+ control.down = false
+ compare(control.down, false)
+ compare(downSpy.count, 4)
+
+ mousePress(control)
+ compare(control.popup.visible, true)
+ compare(control.pressed, true)
+ compare(control.down, false) // explicit false
+ compare(downSpy.count, 4)
+ compare(pressedSpy.count, 3)
+
+ control.down = undefined
+ compare(control.down, true)
+ compare(downSpy.count, 5)
+
+ mouseRelease(control)
+ tryCompare(control.popup, "visible", false)
+ compare(control.pressed, false)
+ compare(control.down, false)
+ compare(downSpy.count, 6)
+ compare(pressedSpy.count, 4)
+
+ control.popup.open()
+ compare(control.popup.visible, true)
+ compare(control.pressed, false)
+ compare(control.down, true)
+ compare(downSpy.count, 7)
+ compare(pressedSpy.count, 4)
+
+ control.popup.close()
+ tryCompare(control.popup, "visible", false)
+ compare(control.pressed, false)
+ compare(control.down, false)
+ compare(downSpy.count, 8)
+ compare(pressedSpy.count, 4)
+ }
+
+ function test_focus() {
+ var control = createTemporaryObject(comboBox, testCase, {model: 3})
+ verify(control)
+
+ var openedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ var closedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "closed"})
+ verify(openedSpy.valid)
+
+ // click - gain focus - show popup
+ mouseClick(control)
+ verify(control.activeFocus)
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+ compare(control.popup.visible, true)
+
+ // lose focus - hide popup
+ control.focus = false
+ verify(!control.activeFocus)
+ closedSpy.wait()
+ compare(closedSpy.count, 1)
+ compare(control.popup.visible, false)
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(comboBox, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ Component {
+ id: displayBox
+ ComboBox {
+ textRole: "key"
+ model: ListModel {
+ ListElement { key: "First"; value: 123 }
+ ListElement { key: "Second"; value: 456 }
+ ListElement { key: "Third"; value: 789 }
+ }
+ }
+ }
+
+ function test_displayText() {
+ var control = createTemporaryObject(displayBox, testCase)
+ verify(control)
+
+ compare(control.displayText, "First")
+ control.currentIndex = 1
+ compare(control.displayText, "Second")
+ control.textRole = "value"
+ compare(control.displayText, "456")
+ control.displayText = "Display"
+ compare(control.displayText, "Display")
+ control.currentIndex = 2
+ compare(control.displayText, "Display")
+ control.displayText = undefined
+ compare(control.displayText, "789")
+ }
+
+ Component {
+ id: component
+ Pane {
+ id: panel
+ property alias button: _button;
+ property alias combobox: _combobox;
+ font.pixelSize: 30
+ Column {
+ Button {
+ id: _button
+ text: "Button"
+ font.pixelSize: 20
+ }
+ ComboBox {
+ id: _combobox
+ model: ["ComboBox", "With"]
+ delegate: ItemDelegate {
+ width: _combobox.width
+ text: _combobox.textRole ? (Array.isArray(_combobox.model) ? modelData[_combobox.textRole] : model[_combobox.textRole]) : modelData
+ objectName: "delegate"
+ autoExclusive: true
+ checked: _combobox.currentIndex === index
+ highlighted: _combobox.highlightedIndex === index
+ }
+ }
+ }
+ }
+ }
+
+ function getChild(control, objname, idx) {
+ var index = idx
+ for (var i = index+1; i < control.children.length; i++)
+ {
+ if (control.children[i].objectName === objname) {
+ index = i
+ break
+ }
+ }
+ return index
+ }
+
+ function test_font() { // QTBUG_50984, QTBUG-51696
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+ verify(control.button)
+ verify(control.combobox)
+
+ compare(control.font.pixelSize, 30)
+ compare(control.button.font.pixelSize, 20)
+ compare(control.combobox.font.pixelSize, 30)
+
+// verify(control.combobox.popup)
+// var popup = control.combobox.popup
+// popup.open()
+
+// verify(popup.contentItem)
+
+// var listview = popup.contentItem
+// verify(listview.contentItem)
+// waitForRendering(listview)
+
+// var idx1 = getChild(listview.contentItem, "delegate", -1)
+// compare(listview.contentItem.children[idx1].font.pixelSize, 25)
+// var idx2 = getChild(listview.contentItem, "delegate", idx1)
+// compare(listview.contentItem.children[idx2].font.pixelSize, 25)
+
+// compare(listview.contentItem.children[idx1].font.pixelSize, 25)
+// compare(listview.contentItem.children[idx2].font.pixelSize, 25)
+
+ control.font.pixelSize = control.font.pixelSize + 10
+ compare(control.combobox.font.pixelSize, 40)
+// waitForRendering(listview)
+// compare(listview.contentItem.children[idx1].font.pixelSize, 25)
+// compare(listview.contentItem.children[idx2].font.pixelSize, 25)
+
+ control.combobox.font.pixelSize = control.combobox.font.pixelSize + 5
+ compare(control.combobox.font.pixelSize, 45)
+// waitForRendering(listview)
+
+// idx1 = getChild(listview.contentItem, "delegate", -1)
+// compare(listview.contentItem.children[idx1].font.pixelSize, 25)
+// idx2 = getChild(listview.contentItem, "delegate", idx1)
+// compare(listview.contentItem.children[idx2].font.pixelSize, 25)
+ }
+
+ function test_wheel() {
+ var ma = createTemporaryObject(mouseArea, testCase, {width: 100, height: 100})
+ verify(ma)
+
+ var control = comboBox.createObject(ma, {model: 2, wheelEnabled: true})
+ verify(control)
+
+ var delta = 120
+
+ var spy = signalSpy.createObject(ma, {target: ma, signalName: "wheel"})
+ verify(spy.valid)
+
+ mouseWheel(control, control.width / 2, control.height / 2, -delta, -delta)
+ compare(control.currentIndex, 1)
+ compare(spy.count, 0) // no propagation
+
+ // reached bounds -> no change
+ mouseWheel(control, control.width / 2, control.height / 2, -delta, -delta)
+ compare(control.currentIndex, 1)
+ compare(spy.count, 0) // no propagation
+
+ mouseWheel(control, control.width / 2, control.height / 2, delta, delta)
+ compare(control.currentIndex, 0)
+ compare(spy.count, 0) // no propagation
+
+ // reached bounds -> no change
+ mouseWheel(control, control.width / 2, control.height / 2, delta, delta)
+ compare(control.currentIndex, 0)
+ compare(spy.count, 0) // no propagation
+ }
+
+ function test_activation_data() {
+ return [
+ { tag: "open:enter", key: Qt.Key_Enter, open: true },
+ { tag: "open:return", key: Qt.Key_Return, open: true },
+ { tag: "closed:enter", key: Qt.Key_Enter, open: false },
+ { tag: "closed:return", key: Qt.Key_Return, open: false }
+ ]
+ }
+
+ // QTBUG-51645
+ function test_activation(data) {
+ var control = createTemporaryObject(comboBox, testCase, {currentIndex: 1, model: ["Apple", "Orange", "Banana"]})
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ if (data.open) {
+ var openedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ keyClick(Qt.Key_Space)
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+ }
+ compare(control.popup.visible, data.open)
+
+ compare(control.currentIndex, 1)
+ compare(control.currentText, "Orange")
+ compare(control.displayText, "Orange")
+
+ keyClick(data.key)
+
+ compare(control.currentIndex, 1)
+ compare(control.currentText, "Orange")
+ compare(control.displayText, "Orange")
+ }
+
+ Component {
+ id: asyncLoader
+ Loader {
+ active: false
+ asynchronous: true
+ sourceComponent: ComboBox {
+ model: ["First", "Second", "Third"]
+ }
+ }
+ }
+
+ // QTBUG-51972
+ function test_async() {
+ var loader = createTemporaryObject(asyncLoader, testCase)
+ verify(loader)
+
+ loader.active = true
+ tryCompare(loader, "status", Loader.Ready)
+ verify(loader.item)
+ compare(loader.item.currentText, "First")
+ compare(loader.item.displayText, "First")
+ }
+
+ // QTBUG-52615
+ function test_currentIndex() {
+ var control = createTemporaryObject(comboBox, testCase, {currentIndex: -1, model: 3})
+ verify(control)
+
+ compare(control.currentIndex, -1)
+ }
+
+ ListModel {
+ id: resetmodel
+ ListElement { text: "First" }
+ ListElement { text: "Second" }
+ ListElement { text: "Third" }
+ }
+
+ // QTBUG-54573
+ function test_modelReset() {
+ var control = createTemporaryObject(comboBox, testCase, {model: resetmodel})
+ verify(control)
+ control.popup.open()
+
+ var listview = control.popup.contentItem
+ verify(listview)
+
+ tryCompare(listview.contentItem.children, "length", resetmodel.count + 1) // + highlight item
+
+ resetmodel.clear()
+ resetmodel.append({text: "Fourth"})
+ resetmodel.append({text: "Fifth"})
+
+ tryCompare(listview.contentItem.children, "length", resetmodel.count + 1) // + highlight item
+ }
+
+ // QTBUG-55118
+ function test_currentText() {
+ var control = createTemporaryObject(comboBox, testCase, {model: listmodel})
+ verify(control)
+
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "First")
+
+ listmodel.setProperty(0, "text", "1st")
+ compare(control.currentText, "1st")
+
+ control.currentIndex = 1
+ compare(control.currentText, "Second")
+
+ listmodel.setProperty(0, "text", "First")
+ compare(control.currentText, "Second")
+ }
+
+ // QTBUG-55030
+ function test_highlightRange() {
+ var control = createTemporaryObject(comboBox, testCase, {model: 100})
+ verify(control)
+
+ control.currentIndex = 50
+ compare(control.currentIndex, 50)
+ compare(control.highlightedIndex, -1)
+
+ var openedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ control.popup.open()
+ compare(control.highlightedIndex, 50)
+ tryCompare(openedSpy, "count", 1)
+
+ var listview = control.popup.contentItem
+ verify(listview)
+
+ var first = listview.itemAt(0, listview.contentY)
+ verify(first)
+ compare(first.text, "50")
+
+ var closedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "closed"})
+ verify(closedSpy.valid)
+
+ control.popup.close()
+ tryCompare(closedSpy, "count", 1)
+ compare(control.highlightedIndex, -1)
+
+ control.currentIndex = 99
+ compare(control.currentIndex, 99)
+ compare(control.highlightedIndex, -1)
+
+ control.popup.open()
+ compare(control.highlightedIndex, 99)
+ tryCompare(openedSpy, "count", 2)
+ tryVerify(function() { return listview.height > 0 })
+
+ var last = listview.itemAt(0, listview.contentY + listview.height - 1)
+ verify(last)
+ compare(last.text, "99")
+
+ openedSpy.target = null
+ closedSpy.target = null
+ }
+
+ function test_mouseHighlight() {
+ if ((Qt.platform.pluginName === "offscreen")
+ || (Qt.platform.pluginName === "minimal"))
+ skip("Mouse highlight not functional on offscreen/minimal platforms")
+ var control = createTemporaryObject(comboBox, testCase, {model: 20})
+ verify(control)
+
+ compare(control.highlightedIndex, -1)
+
+ var openedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ control.popup.open()
+ compare(control.highlightedIndex, 0)
+ tryCompare(openedSpy, "count", 1)
+
+ var listview = control.popup.contentItem
+ verify(listview)
+ waitForRendering(listview)
+
+ // hover-highlight through all visible list items one by one
+ var hoverIndex = -1
+ var prevHoverItem = null
+ for (var y = 0; y < listview.height; ++y) {
+ var hoverItem = listview.itemAt(0, listview.contentY + y)
+ if (!hoverItem || !hoverItem.visible || hoverItem === prevHoverItem)
+ continue
+ mouseMove(hoverItem, 0, 0)
+ tryCompare(control, "highlightedIndex", ++hoverIndex)
+ prevHoverItem = hoverItem
+ }
+
+ mouseMove(listview, listview.width / 2, listview.height / 2)
+
+ // wheel-highlight the rest of the items
+ var delta = 120
+ var prevWheelItem = null
+ while (!listview.atYEnd) {
+ var prevContentY = listview.contentY
+ mouseWheel(listview, listview.width / 2, listview.height / 2, -delta, -delta)
+ tryCompare(listview, "moving", false)
+ verify(listview.contentY > prevContentY)
+
+ var wheelItem = listview.itemAt(listview.width / 2, listview.contentY + listview.height / 2)
+ if (!wheelItem || !wheelItem.visible || wheelItem === prevWheelItem)
+ continue
+
+ tryCompare(control, "highlightedIndex", parseInt(wheelItem.text))
+ prevWheelItem = wheelItem
+ }
+ }
+
+ RegularExpressionValidator {
+ id: regExpValidator
+ regularExpression: /(red|blue|green)?/
+ }
+
+ function test_validator() {
+ var control = createTemporaryObject(comboBox, testCase, {editable: true, validator: regExpValidator})
+
+ control.editText = "blu"
+ compare(control.acceptableInput, false)
+ control.editText = "blue"
+ compare(control.acceptableInput, true)
+ control.editText = "bluee"
+ compare(control.acceptableInput, false)
+ control.editText = ""
+ compare(control.acceptableInput, true)
+ control.editText = ""
+ control.contentItem.forceActiveFocus()
+ keyPress(Qt.Key_A)
+ compare(control.editText, "")
+ keyPress(Qt.Key_A)
+ compare(control.editText, "")
+ keyPress(Qt.Key_R)
+ compare(control.editText, "r")
+ keyPress(Qt.Key_A)
+ compare(control.editText, "r")
+ compare(control.acceptableInput, false)
+ keyPress(Qt.Key_E)
+ compare(control.editText, "re")
+ compare(control.acceptableInput, false)
+ keyPress(Qt.Key_D)
+ compare(control.editText, "red")
+ compare(control.acceptableInput, true)
+ }
+
+ Component {
+ id: appendFindBox
+ ComboBox {
+ editable: true
+ model: ListModel {
+ ListElement { text:"first" }
+ }
+ onAccepted: {
+ if (find(editText) === -1)
+ model.append({text: editText})
+ }
+ }
+ }
+
+ function test_append_find() {
+ var control = createTemporaryObject(appendFindBox, testCase)
+
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "first")
+ control.contentItem.forceActiveFocus()
+ compare(control.activeFocus, true)
+
+ control.selectAll()
+ keyPress(Qt.Key_T)
+ keyPress(Qt.Key_H)
+ keyPress(Qt.Key_I)
+ keyPress(Qt.Key_R)
+ keyPress(Qt.Key_D)
+ compare(control.count, 1)
+ compare(control.currentText, "first")
+ compare(control.editText, "third")
+
+ keyPress(Qt.Key_Enter)
+ compare(control.count, 2)
+ compare(control.currentIndex, 1)
+ compare(control.currentText, "third")
+ }
+
+ function test_editable() {
+ var control = createTemporaryObject(comboBox, testCase, {editable: true, model: ["Banana", "Coco", "Coconut", "Apple", "Cocomuffin"]})
+ verify(control)
+
+ control.contentItem.forceActiveFocus()
+ verify(control.activeFocus)
+
+ var acceptCount = 0
+
+ var acceptSpy = signalSpy.createObject(control, {target: control, signalName: "accepted"})
+ verify(acceptSpy.valid)
+
+ compare(control.editText, "Banana")
+ compare(control.currentText, "Banana")
+ compare(control.currentIndex, 0)
+ compare(acceptSpy.count, 0)
+ control.editText = ""
+
+ keyPress(Qt.Key_C)
+ compare(control.editText, "coco")
+ compare(control.currentText, "Banana")
+ compare(control.currentIndex, 0)
+
+ keyPress(Qt.Key_Right)
+ keyPress(Qt.Key_N)
+ compare(control.editText, "coconut")
+ compare(control.currentText, "Banana")
+ compare(control.currentIndex, 0)
+
+ keyPress(Qt.Key_Enter) // Accept
+ compare(control.editText, "Coconut")
+ compare(control.currentText, "Coconut")
+ compare(control.currentIndex, 2)
+ compare(acceptSpy.count, ++acceptCount)
+
+ keyPress(Qt.Key_Backspace)
+ keyPress(Qt.Key_Backspace)
+ keyPress(Qt.Key_Backspace)
+ keyPress(Qt.Key_M)
+ compare(control.editText, "Cocomuffin")
+ compare(control.currentText, "Coconut")
+ compare(control.currentIndex, 2)
+
+ keyPress(Qt.Key_Enter) // Accept
+ compare(control.editText, "Cocomuffin")
+ compare(control.currentText, "Cocomuffin")
+ compare(control.currentIndex, 4)
+ compare(acceptSpy.count, ++acceptCount)
+
+ keyPress(Qt.Key_Return) // Accept
+ compare(control.editText, "Cocomuffin")
+ compare(control.currentText, "Cocomuffin")
+ compare(control.currentIndex, 4)
+ compare(acceptSpy.count, ++acceptCount)
+
+ control.editText = ""
+ compare(control.editText, "")
+ compare(control.currentText, "Cocomuffin")
+ compare(control.currentIndex, 4)
+
+ keyPress(Qt.Key_A)
+ compare(control.editText, "apple")
+ compare(control.currentText, "Cocomuffin")
+ compare(control.currentIndex, 4)
+
+ keyPress(Qt.Key_Return) // Accept
+ compare(control.editText, "Apple")
+ compare(control.currentText, "Apple")
+ compare(control.currentIndex, 3)
+ compare(acceptSpy.count, ++acceptCount)
+
+ control.editText = ""
+ keyPress(Qt.Key_A)
+ keyPress(Qt.Key_B)
+ compare(control.editText, "ab")
+ compare(control.currentText, "Apple")
+ compare(control.currentIndex, 3)
+
+ keyPress(Qt.Key_Return) // Accept
+ compare(control.editText, "ab")
+ compare(control.currentText, "")
+ compare(control.currentIndex, -1)
+ compare(acceptSpy.count, ++acceptCount)
+
+ control.editText = ""
+ compare(control.editText, "")
+ compare(control.currentText, "")
+ compare(control.currentIndex, -1)
+
+ keyPress(Qt.Key_C)
+ keyPress(Qt.Key_Return) // Accept
+ compare(control.editText, "Coco")
+ compare(control.currentText, "Coco")
+ compare(control.currentIndex, 1)
+ compare(acceptSpy.count, ++acceptCount)
+
+ keyPress(Qt.Key_Down)
+ compare(control.editText, "Coconut")
+ compare(control.currentText, "Coconut")
+ compare(control.currentIndex, 2)
+
+ keyPress(Qt.Key_Up)
+ compare(control.editText, "Coco")
+ compare(control.currentText, "Coco")
+ compare(control.currentIndex, 1)
+
+ control.editText = ""
+ compare(control.editText, "")
+ compare(control.currentText, "Coco")
+ compare(control.currentIndex, 1)
+
+ keyPress(Qt.Key_C)
+ keyPress(Qt.Key_O)
+ keyPress(Qt.Key_C) // autocompletes "coco"
+ keyPress(Qt.Key_Backspace)
+ keyPress(Qt.Key_Return) // Accept "coc"
+ compare(control.editText, "coc")
+ compare(control.currentText, "")
+ compare(control.currentIndex, -1)
+ compare(acceptSpy.count, ++acceptCount)
+
+ control.editText = ""
+ compare(control.editText, "")
+ compare(control.currentText, "")
+ compare(control.currentIndex, -1)
+
+ keyPress(Qt.Key_C)
+ keyPress(Qt.Key_O)
+ keyPress(Qt.Key_C) // autocompletes "coc"
+ keyPress(Qt.Key_Space)
+ keyPress(Qt.Key_Return) // Accept "coc "
+ compare(control.editText, "coc ")
+ compare(control.currentText, "")
+ compare(control.currentIndex, -1)
+ compare(acceptSpy.count, ++acceptCount)
+ }
+
+ Component {
+ id: keysAttachedBox
+ ComboBox {
+ editable: true
+ property bool gotit: false
+ Keys.onPressed: {
+ if (!gotit && event.key === Qt.Key_B) {
+ gotit = true
+ event.accepted = true
+ }
+ }
+ }
+ }
+
+ function test_keys_attached() {
+ var control = createTemporaryObject(keysAttachedBox, testCase)
+ verify(control)
+
+ control.contentItem.forceActiveFocus()
+ verify(control.activeFocus)
+
+ verify(!control.gotit)
+ compare(control.editText, "")
+
+ keyPress(Qt.Key_A)
+ verify(control.activeFocus)
+ verify(!control.gotit)
+ compare(control.editText, "a")
+
+ keyPress(Qt.Key_B)
+ verify(control.activeFocus)
+ verify(control.gotit)
+ compare(control.editText, "a")
+
+ keyPress(Qt.Key_B)
+ verify(control.activeFocus)
+ verify(control.gotit)
+ compare(control.editText, "ab")
+ }
+
+ function test_minusOneIndexResetsSelection_QTBUG_35794_data() {
+ return [
+ { tag: "editable", editable: true },
+ { tag: "non-editable", editable: false }
+ ]
+ }
+
+ function test_minusOneIndexResetsSelection_QTBUG_35794(data) {
+ var control = createTemporaryObject(comboBox, testCase, {editable: data.editable, model: ["A", "B", "C"]})
+ verify(control)
+
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "A")
+ control.currentIndex = -1
+ compare(control.currentIndex, -1)
+ compare(control.currentText, "")
+ control.currentIndex = 1
+ compare(control.currentIndex, 1)
+ compare(control.currentText, "B")
+ }
+
+ function test_minusOneToZeroSelection_QTBUG_38036() {
+ var control = createTemporaryObject(comboBox, testCase, {model: ["A", "B", "C"]})
+ verify(control)
+
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "A")
+ control.currentIndex = -1
+ compare(control.currentIndex, -1)
+ compare(control.currentText, "")
+ control.currentIndex = 0
+ compare(control.currentIndex, 0)
+ compare(control.currentText, "A")
+ }
+
+ function test_emptyPopupAfterModelCleared() {
+ var control = createTemporaryObject(comboBox, testCase, { model: 1 })
+ verify(control)
+ compare(control.popup.implicitHeight, 0)
+
+ // Ensure that it's open so that the popup's implicitHeight changes when we increase the model count.
+ control.popup.open()
+ tryCompare(control.popup, "visible", true)
+
+ // Add lots of items to the model. The popup should take up the entire height of the window.
+ control.model = 100
+ compare(control.popup.height, control.Window.height - control.popup.topMargin - control.popup.bottomMargin)
+
+ control.popup.close()
+
+ // Clearing the model should result in a zero height.
+ control.model = 0
+ control.popup.open()
+ tryCompare(control.popup, "visible", true)
+ compare(control.popup.height, control.popup.topPadding + control.popup.bottomPadding)
+ }
+
+ Component {
+ id: keysMonitor
+ Item {
+ property int pressedKeys: 0
+ property int releasedKeys: 0
+ property int lastPressedKey: 0
+ property int lastReleasedKey: 0
+ property alias comboBox: comboBox
+
+ width: 200
+ height: 200
+
+ Keys.onPressed: { ++pressedKeys; lastPressedKey = event.key }
+ Keys.onReleased: { ++releasedKeys; lastReleasedKey = event.key }
+
+ ComboBox {
+ id: comboBox
+ }
+ }
+ }
+
+ function test_keyClose_data() {
+ return [
+ { tag: "Escape", key: Qt.Key_Escape },
+ { tag: "Back", key: Qt.Key_Back }
+ ]
+ }
+
+ function test_keyClose(data) {
+ var container = createTemporaryObject(keysMonitor, testCase)
+ verify(container)
+
+ var control = comboBox.createObject(container)
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ var pressedKeys = 0
+ var releasedKeys = 0
+
+ // popup not visible -> propagates
+ keyPress(data.key)
+ compare(container.pressedKeys, ++pressedKeys)
+ compare(container.lastPressedKey, data.key)
+
+ keyRelease(data.key)
+ compare(container.releasedKeys, ++releasedKeys)
+ compare(container.lastReleasedKey, data.key)
+
+ verify(control.activeFocus)
+
+ // popup visible -> handled -> does not propagate
+ control.popup.open()
+ tryCompare(control.popup, "opened", true)
+
+ keyPress(data.key)
+ compare(container.pressedKeys, pressedKeys)
+
+ keyRelease(data.key)
+ // Popup receives the key release event if it has an exit transition, but
+ // not if it has been immediately closed on press, without a transition.
+ // ### TODO: Should Popup somehow always block the key release event?
+ if (!control.popup.exit)
+ ++releasedKeys
+ compare(container.releasedKeys, releasedKeys)
+
+ tryCompare(control.popup, "visible", false)
+ verify(control.activeFocus)
+
+ // popup not visible -> propagates
+ keyPress(data.key)
+ compare(container.pressedKeys, ++pressedKeys)
+ compare(container.lastPressedKey, data.key)
+
+ keyRelease(data.key)
+ compare(container.releasedKeys, ++releasedKeys)
+ compare(container.lastReleasedKey, data.key)
+ }
+
+ function test_popupFocus_QTBUG_74661() {
+ var control = createTemporaryObject(comboBox, testCase)
+ verify(control)
+
+ var popup = createTemporaryObject(customPopup, testCase)
+ verify(popup)
+
+ control.popup = popup
+
+ var openedSpy = signalSpy.createObject(control, {target: popup, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ var closedSpy = signalSpy.createObject(control, {target: popup, signalName: "closed"})
+ verify(closedSpy.valid)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ // show popup
+ keyClick(Qt.Key_Space)
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+
+ popup.contentItem.forceActiveFocus()
+ verify(popup.contentItem.activeFocus)
+
+ // type something in the text field
+ keyClick(Qt.Key_Space)
+ keyClick(Qt.Key_H)
+ keyClick(Qt.Key_I)
+ compare(popup.contentItem.text, " hi")
+
+ compare(closedSpy.count, 0)
+
+ // hide popup
+ keyClick(Qt.Key_Escape)
+ closedSpy.wait()
+ compare(closedSpy.count, 1)
+ }
+
+ function test_comboBoxWithShaderEffect() {
+ var control = createTemporaryObject(comboBoxWithShaderEffect, testCase, {model: 9})
+ verify(control)
+ waitForRendering(control)
+ control.forceActiveFocus()
+ var openedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ var closedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "closed"})
+ verify(closedSpy.valid)
+
+ control.popup.open()
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+ control.popup.close()
+ closedSpy.wait()
+ compare(closedSpy.count, 1)
+ }
+
+ function test_comboBoxSelectTextByMouse() {
+ let control = createTemporaryObject(comboBox, testCase,
+ { editable: true, selectTextByMouse: true, model: [ "Some text" ], width: parent.width })
+ verify(control)
+ waitForRendering(control)
+ control.forceActiveFocus()
+
+ // Position the text cursor at the beginning of the text.
+ mouseClick(control, control.leftPadding, control.height / 2)
+ // Select all of the text.
+ mousePress(control, control.leftPadding, control.height / 2)
+ mouseMove(control, control.leftPadding + control.contentItem.width, control.height / 2)
+ mouseRelease(control, control.leftPadding + control.contentItem.width, control.height / 2)
+ compare(control.contentItem.selectedText, "Some text")
+ }
+
+ // QTBUG-78885: When the edit text is changed on an editable ComboBox,
+ // and then that ComboBox loses focus, its currentIndex should change
+ // to the index of the edit text (assuming a match is found).
+ function test_currentIndexChangeOnLostFocus() {
+ if (Qt.styleHints.tabFocusBehavior !== Qt.TabFocusAllControls)
+ skip("This platform only allows tab focus for text controls")
+
+ let theModel = []
+ for (let i = 0; i < 10; ++i)
+ theModel.push("Item " + (i + 1))
+
+ let comboBox1 = createTemporaryObject(comboBox, testCase,
+ { objectName: "comboBox1", editable: true, model: theModel })
+ verify(comboBox1)
+ compare(comboBox1.currentIndex, 0)
+
+ let comboBox2 = createTemporaryObject(comboBox, testCase, { objectName: "comboBox2" })
+ verify(comboBox2)
+
+ // Give the first ComboBox focus and type in 0 to select "Item 10" (default is "Item 1").
+ waitForRendering(comboBox1)
+ comboBox1.contentItem.forceActiveFocus()
+ verify(comboBox1.activeFocus)
+ keyClick(Qt.Key_0)
+ compare(comboBox1.editText, "Item 10")
+
+ let currentIndexSpy = signalSpy.createObject(comboBox1,
+ { target: comboBox1, signalName: "currentIndexChanged" })
+ verify(currentIndexSpy.valid)
+
+ // Give focus to the other ComboBox so that the first one loses it.
+ // The first ComboBox's currentIndex should change to that of "Item 10".
+ keyClick(Qt.Key_Tab)
+ verify(comboBox2.activeFocus)
+ compare(comboBox1.currentIndex, 9)
+ compare(currentIndexSpy.count, 1)
+
+ // Give focus back to the first ComboBox, and try the same thing except
+ // with non-existing text; the currentIndex should not change.
+ comboBox1.contentItem.forceActiveFocus()
+ verify(comboBox1.activeFocus)
+ keySequence(StandardKey.SelectAll)
+ compare(comboBox1.contentItem.selectedText, "Item 10")
+ keyClick(Qt.Key_N)
+ keyClick(Qt.Key_O)
+ keyClick(Qt.Key_P)
+ keyClick(Qt.Key_E)
+ compare(comboBox1.editText, "nope")
+ compare(comboBox1.currentIndex, 9)
+ compare(currentIndexSpy.count, 1)
+ }
+
+ Component {
+ id: appFontTextFieldComponent
+ TextField {
+ objectName: "appFontTextField"
+ font: Qt.application.font
+ // We don't want the background's implicit width to interfere with our tests,
+ // which are about implicit width of the contentItem of ComboBox, which is by default TextField.
+ background: null
+ }
+ }
+
+ Component {
+ id: appFontContentItemComboBoxComponent
+ ComboBox {
+ // Override the contentItem so that the font doesn't vary between styles.
+ contentItem: TextField {
+ objectName: "appFontContentItemTextField"
+ // We do this just to be extra sure that the font never comes from the control,
+ // as we want it to match that of the TextField in the appFontTextFieldComponent.
+ font: Qt.application.font
+ background: null
+ }
+ }
+ }
+
+ Component {
+ id: twoItemListModelComponent
+
+ ListModel {
+ ListElement { display: "Short" }
+ ListElement { display: "Kinda long" }
+ }
+ }
+
+ function appendedToModel(model, item) {
+ if (Array.isArray(model)) {
+ let newModel = model
+ newModel.push(item)
+ return newModel
+ }
+
+ if (model.hasOwnProperty("append")) {
+ model.append({ display: item })
+ // To account for the fact that changes to a JS array are not seen by the QML engine,
+ // we need to reassign the entire model and hence return it. For simplicity in the
+ // calling code, we do it for the ListModel code path too. It should be a no-op.
+ return model
+ }
+
+ console.warn("appendedToModel: unrecognised model")
+ return undefined
+ }
+
+ function removedFromModel(model, index, count) {
+ if (Array.isArray(model)) {
+ let newModel = model
+ newModel.splice(index, count)
+ return newModel
+ }
+
+ if (model.hasOwnProperty("remove")) {
+ model.remove(index, count)
+ return model
+ }
+
+ console.warn("removedFromModel: unrecognised model")
+ return undefined
+ }
+
+ // We don't use a data-driven test for the policy because the checks vary a lot based on which enum we're testing.
+ function test_implicitContentWidthPolicy_ContentItemImplicitWidth() {
+ // Set ContentItemImplicitWidth and ensure that implicitContentWidth is as wide as the current item
+ // by comparing it against the implicitWidth of an identical TextField
+ let control = createTemporaryObject(appFontContentItemComboBoxComponent, testCase, {
+ model: ["Short", "Kinda long"],
+ implicitContentWidthPolicy: ComboBox.ContentItemImplicitWidth
+ })
+ verify(control)
+ compare(control.implicitContentWidthPolicy, ComboBox.ContentItemImplicitWidth)
+
+ let textField = createTemporaryObject(appFontTextFieldComponent, testCase)
+ verify(textField)
+ // Don't set any text on textField because we're not accounting for the widest
+ // text here, so we want to compare it against an empty TextField.
+ compare(control.implicitContentWidth, textField.implicitWidth)
+
+ textField.font.pixelSize *= 2
+ control.font.pixelSize *= 2
+ compare(control.implicitContentWidth, textField.implicitWidth)
+ }
+
+ function test_implicitContentWidthPolicy_WidestText_data() {
+ return [
+ { tag: "Array", model: ["Short", "Kinda long"] },
+ { tag: "ListModel", model: twoItemListModelComponent.createObject(testCase) },
+ ]
+ }
+
+ function test_implicitContentWidthPolicy_WidestText(data) {
+ let control = createTemporaryObject(appFontContentItemComboBoxComponent, testCase, {
+ model: data.model,
+ implicitContentWidthPolicy: ComboBox.WidestText
+ })
+ verify(control)
+ compare(control.implicitContentWidthPolicy, ComboBox.WidestText)
+
+ let textField = createTemporaryObject(appFontTextFieldComponent, testCase)
+ verify(textField)
+ textField.text = "Kinda long"
+ // Note that we don't need to change the current index here, as the implicitContentWidth
+ // is set to the implicitWidth of the TextField within the ComboBox as if it had the largest
+ // text from the model set on it.
+ // We use Math.ceil because TextInput uses qCeil internally, whereas the implicitWidth
+ // binding for TextField does not.
+ compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth))
+
+ // Add a longer item; it should affect the implicit content width.
+ let modifiedModel = appendedToModel(data.model, "Moderately long")
+ control.model = modifiedModel
+ textField.text = "Moderately long"
+ compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth))
+
+ // Remove the last two items; it should use the only remaining item's width.
+ modifiedModel = removedFromModel(data.model, 1, 2)
+ control.model = modifiedModel
+ compare(control.count, 1)
+ compare(control.currentText, "Short")
+ textField.text = "Short"
+ compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth))
+
+ // Changes in font should result in the implicitContentWidth being updated.
+ textField.font.pixelSize *= 2
+ // We have to change the contentItem's font size manually since we break the
+ // style's binding to the control's font when we set Qt.application.font to it.
+ control.contentItem.font.pixelSize *= 2
+ control.font.pixelSize *= 2
+ compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth))
+ }
+
+ function test_implicitContentWidthPolicy_WidestTextWhenCompleted_data() {
+ return test_implicitContentWidthPolicy_WidestText_data()
+ }
+
+ function test_implicitContentWidthPolicy_WidestTextWhenCompleted(data) {
+ let control = createTemporaryObject(appFontContentItemComboBoxComponent, testCase, {
+ model: data.model,
+ implicitContentWidthPolicy: ComboBox.WidestTextWhenCompleted
+ })
+ verify(control)
+ compare(control.implicitContentWidthPolicy, ComboBox.WidestTextWhenCompleted)
+
+ let textField = createTemporaryObject(appFontTextFieldComponent, testCase)
+ verify(textField)
+ textField.text = "Kinda long"
+ compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth))
+
+ // Add a longer item; it should not affect the implicit content width
+ // since we've already accounted for it once.
+ let modifiedModel = appendedToModel(data.model, "Moderately long")
+ control.model = modifiedModel
+ compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth))
+
+ // Remove the last two items; it should still not affect the implicit content width.
+ modifiedModel = removedFromModel(data.model, 1, 2)
+ control.model = modifiedModel
+ compare(control.count, 1)
+ compare(control.currentText, "Short")
+ compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth))
+
+ // Changes in font should not result in the implicitContentWidth being updated.
+ let oldTextFieldImplicitWidth = textField.implicitWidth
+ // Changes in font should result in the implicitContentWidth being updated.
+ textField.font.pixelSize *= 2
+ control.contentItem.font.pixelSize *= 2
+ control.font.pixelSize *= 2
+ compare(Math.ceil(control.implicitContentWidth), Math.ceil(oldTextFieldImplicitWidth))
+ }
+
+ // QTBUG-61021: text line should not be focused by default
+ // It causes (e.g. on Android) showing virtual keyboard when it is not needed
+ function test_doNotFocusTextLineByDefault() {
+ var control = createTemporaryObject(comboBox, testCase)
+ // Focus not set after creating combobox
+ verify(!control.activeFocus)
+ verify(!control.contentItem.focus)
+
+ // After setting focus on combobox, text line should not be focused
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+ verify(!control.contentItem.focus)
+
+ // Text line is focused after intentional setting focus on it
+ control.contentItem.forceActiveFocus()
+ verify(control.activeFocus)
+ verify(control.contentItem.focus)
+ }
+
+ Component {
+ id: intValidatorComponent
+ IntValidator {
+ bottom: 0
+ top: 255
+ }
+ }
+
+ function test_acceptableInput_QTBUG_94307() {
+ let items = [
+ { text: "A" },
+ { text: "2" },
+ { text: "3" }
+ ]
+ let control = createTemporaryObject(comboBox, testCase, {model: items, editable: true})
+ verify(control)
+
+ verify(control.acceptableInput)
+ compare(control.displayText, "A")
+
+ let acceptableInputSpy = signalSpy.createObject(control, {target: control, signalName: "acceptableInputChanged"})
+ verify(acceptableInputSpy.valid)
+
+ let intValidator = intValidatorComponent.createObject(testCase)
+ verify(intValidator)
+
+ control.validator = intValidator
+
+ compare(acceptableInputSpy.count, 1)
+ compare(control.displayText, "A")
+ compare(control.acceptableInput, false)
+
+ control.currentIndex = 1
+
+ compare(acceptableInputSpy.count, 2)
+ compare(control.displayText, "2")
+ compare(control.acceptableInput, true)
+ }
+
+ function test_selectionCleared() {
+ const model = [
+ { text: "Apple" },
+ { text: "Banana" },
+ { text: "Coconut" }
+ ]
+ let control = createTemporaryObject(comboBox, testCase, { model: model, editable: true })
+ verify(control)
+
+ compare(control.displayText, "Apple")
+ compare(control.editText, "Apple")
+ compare(control.currentIndex, 0)
+
+ // Give the TextField focus and select the text.
+ let textField = control.contentItem
+ textField.forceActiveFocus()
+ textField.selectAll()
+ compare(textField.selectedText, "Apple")
+
+ // Type "B" so that Banana is selected.
+ keyPress(Qt.Key_Shift)
+ keyClick(Qt.Key_B)
+ keyRelease(Qt.Key_Shift)
+ compare(control.displayText, "Apple")
+ expectFail("", "QTBUG-102950")
+ compare(control.editText, "Banana")
+ compare(textField.selectedText, "anana")
+ compare(control.currentIndex, 0)
+
+ // Select Banana by pressing enter.
+ keyClick(Qt.Key_Return)
+ compare(control.displayText, "Banana")
+ compare(control.editText, "Banana")
+ compare(textField.selectedText, "")
+ compare(control.currentIndex, 1)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_container.qml b/tests/auto/quickcontrols2/controls/data/tst_container.qml
new file mode 100644
index 0000000000..5fa3137ade
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_container.qml
@@ -0,0 +1,298 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+import QtQuick.Templates as T
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Container"
+
+ Component {
+ id: container
+ Container { }
+ }
+
+ Component {
+ id: rectangle
+ Rectangle { }
+ }
+
+ function test_implicitSize() {
+ var control = createTemporaryObject(container, testCase)
+ verify(control)
+
+ compare(control.implicitWidth, 0)
+ compare(control.implicitHeight, 0)
+
+ control.contentItem = rectangle.createObject(control, {implicitWidth: 10, implicitHeight: 20})
+ compare(control.implicitWidth, 10)
+ compare(control.implicitHeight, 20)
+
+ control.background = rectangle.createObject(control, {implicitWidth: 20, implicitHeight: 30})
+ compare(control.implicitWidth, 20)
+ compare(control.implicitHeight, 30)
+
+ control.padding = 100
+ compare(control.implicitWidth, 210)
+ compare(control.implicitHeight, 220)
+ }
+
+ function test_currentIndex() {
+ var control1 = createTemporaryObject(container, testCase)
+ verify(control1)
+
+ var control2 = createTemporaryObject(container, testCase)
+ verify(control2)
+
+ compare(control1.currentIndex, -1)
+ compare(control2.currentIndex, -1)
+
+ for (var i = 0; i < 3; ++i) {
+ control1.addItem(rectangle.createObject(control1))
+ control2.addItem(rectangle.createObject(control2))
+ }
+
+ compare(control1.count, 3)
+ compare(control2.count, 3)
+ compare(control1.currentIndex, 0)
+ compare(control2.currentIndex, 0)
+
+ control1.currentIndex = Qt.binding(function() { return control2.currentIndex })
+ control2.currentIndex = Qt.binding(function() { return control1.currentIndex })
+
+ control1.setCurrentIndex(1)
+ compare(control1.currentIndex, 1)
+ compare(control2.currentIndex, 1)
+
+ control1.incrementCurrentIndex()
+ compare(control1.currentIndex, 2)
+ compare(control2.currentIndex, 2)
+
+ control2.decrementCurrentIndex()
+ compare(control1.currentIndex, 1)
+ compare(control2.currentIndex, 1)
+ }
+
+ Component {
+ id: repeaterContainer1
+ Container {
+ id: container
+ Item { objectName: "0" }
+ Item { objectName: "1" }
+ Item { objectName: "2" }
+ Item { objectName: "3" }
+ contentItem: Row {
+ Repeater {
+ model: container.contentModel
+ }
+ }
+ }
+ }
+
+ Component {
+ id: repeaterContainer2
+ Container {
+ id: container
+ contentItem: Item {
+ Repeater {
+ model: container.contentModel
+ }
+ Rectangle { objectName: "extra" }
+ }
+ Rectangle { objectName: "0" }
+ Rectangle { objectName: "1" }
+ Rectangle { objectName: "2" }
+ Rectangle { objectName: "3" }
+ }
+ }
+
+ function test_repeater_data() {
+ return [
+ { tag: "1", component: repeaterContainer1 },
+ { tag: "2", component: repeaterContainer2 }
+ ]
+ }
+
+ // don't crash (QTBUG-61310)
+ function test_repeater(data) {
+ var control = createTemporaryObject(data.component, testCase)
+ verify(control)
+
+ compare(control.itemAt(0).objectName, "0")
+ compare(control.itemAt(1).objectName, "1")
+ compare(control.itemAt(2).objectName, "2")
+ compare(control.itemAt(3).objectName, "3")
+ }
+
+ function test_removeTakeItem() {
+ var control = createTemporaryObject(container, testCase)
+ verify(control)
+
+ var item1 = rectangle.createObject(control)
+ var item2 = rectangle.createObject(control)
+ var item3 = rectangle.createObject(control)
+
+ item1.Component.onDestruction.connect(function() { item1 = null })
+ item2.Component.onDestruction.connect(function() { item2 = null })
+ item3.Component.onDestruction.connect(function() { item3 = null })
+
+ control.addItem(item1)
+ control.addItem(item2)
+ control.addItem(item3)
+ compare(control.count, 3)
+
+ // takeItem(int) does not destroy
+ compare(control.takeItem(1), item2)
+ compare(control.count, 2)
+ wait(1)
+ verify(item2)
+
+ // removeItem(Item) destroys
+ control.removeItem(item1)
+ compare(control.count, 1)
+ wait(1)
+ verify(!item1)
+
+ // removeItem(null) must not call removeItem(0)
+ control.removeItem(null)
+ compare(control.count, 1)
+ wait(1)
+ verify(item3)
+ }
+
+ Component {
+ id: contentItemDeletionOrder1
+
+ Item {
+ objectName: "parentItem"
+
+ Item {
+ id: item
+ objectName: "contentItem"
+ }
+ Container {
+ objectName: "control"
+ contentItem: item
+ }
+ }
+ }
+
+ Component {
+ id: contentItemDeletionOrder2
+
+ Item {
+ objectName: "parentItem"
+
+ Container {
+ objectName: "control"
+ contentItem: item
+ }
+ Item {
+ id: item
+ objectName: "contentItem"
+ }
+ }
+ }
+
+ function test_contentItemDeletionOrder() {
+ var control1 = createTemporaryObject(contentItemDeletionOrder1, testCase)
+ verify(control1)
+ var control2 = createTemporaryObject(contentItemDeletionOrder2, testCase)
+ verify(control2)
+ }
+
+ Component {
+ id: backgroundDeletionOrder1
+
+ Item {
+ objectName: "parentItem"
+
+ Item {
+ id: item
+ objectName: "backgroundItem"
+ }
+ Container {
+ objectName: "control"
+ background: item
+ }
+ }
+ }
+
+ Component {
+ id: backgroundDeletionOrder2
+
+ Item {
+ objectName: "parentItem"
+
+ Container {
+ objectName: "control"
+ background: item
+ }
+ Item {
+ id: item
+ objectName: "backgroundItem"
+ }
+ }
+ }
+
+ function test_backgroundDeletionOrder() {
+ var control1 = createTemporaryObject(backgroundDeletionOrder1, testCase)
+ verify(control1)
+ var control2 = createTemporaryObject(backgroundDeletionOrder2, testCase)
+ verify(control2)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_control.qml b/tests/auto/quickcontrols2/controls/data/tst_control.qml
new file mode 100644
index 0000000000..e12cbbf4ef
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_control.qml
@@ -0,0 +1,1499 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+import QtQuick.Templates as T
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Control"
+
+ Component {
+ id: component
+ Control { }
+ }
+
+ Component {
+ id: rectangle
+ Rectangle { }
+ }
+
+ Component {
+ id: button
+ T.Button { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_padding() {
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+
+ var paddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "paddingChanged"})
+ verify(paddingSpy.valid)
+
+ var topPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "topPaddingChanged"})
+ verify(topPaddingSpy.valid)
+
+ var leftPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "leftPaddingChanged"})
+ verify(leftPaddingSpy.valid)
+
+ var rightPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "rightPaddingChanged"})
+ verify(rightPaddingSpy.valid)
+
+ var bottomPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "bottomPaddingChanged"})
+ verify(bottomPaddingSpy.valid)
+
+ var horizontalPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "horizontalPaddingChanged"})
+ verify(horizontalPaddingSpy.valid)
+
+ var verticalPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "verticalPaddingChanged"})
+ verify(verticalPaddingSpy.valid)
+
+ var paddingChanges = 0
+ var topPaddingChanges = 0
+ var leftPaddingChanges = 0
+ var rightPaddingChanges = 0
+ var bottomPaddingChanges = 0
+ var horizontalPaddingChanges = 0
+ var verticalPaddingChanges = 0
+
+ compare(control.padding, 0)
+ compare(control.topPadding, 0)
+ compare(control.leftPadding, 0)
+ compare(control.rightPadding, 0)
+ compare(control.bottomPadding, 0)
+ compare(control.horizontalPadding, 0)
+ compare(control.verticalPadding, 0)
+ compare(control.availableWidth, 0)
+ compare(control.availableHeight, 0)
+
+ control.width = 100
+ control.height = 100
+
+ control.padding = 10
+ compare(control.padding, 10)
+ compare(control.topPadding, 10)
+ compare(control.leftPadding, 10)
+ compare(control.rightPadding, 10)
+ compare(control.bottomPadding, 10)
+ compare(control.horizontalPadding, 10)
+ compare(control.verticalPadding, 10)
+ compare(paddingSpy.count, ++paddingChanges)
+ compare(topPaddingSpy.count, ++topPaddingChanges)
+ compare(leftPaddingSpy.count, ++leftPaddingChanges)
+ compare(rightPaddingSpy.count, ++rightPaddingChanges)
+ compare(bottomPaddingSpy.count, ++bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, ++horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, ++verticalPaddingChanges)
+
+ control.topPadding = 20
+ compare(control.padding, 10)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 10)
+ compare(control.rightPadding, 10)
+ compare(control.bottomPadding, 10)
+ compare(control.horizontalPadding, 10)
+ compare(control.verticalPadding, 10)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, ++topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.leftPadding = 30
+ compare(control.padding, 10)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 10)
+ compare(control.bottomPadding, 10)
+ compare(control.horizontalPadding, 10)
+ compare(control.verticalPadding, 10)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, ++leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.rightPadding = 40
+ compare(control.padding, 10)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 10)
+ compare(control.horizontalPadding, 10)
+ compare(control.verticalPadding, 10)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, ++rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.bottomPadding = 50
+ compare(control.padding, 10)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 50)
+ compare(control.horizontalPadding, 10)
+ compare(control.verticalPadding, 10)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, ++bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.padding = 60
+ compare(control.padding, 60)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 50)
+ compare(control.horizontalPadding, 60)
+ compare(control.verticalPadding, 60)
+ compare(paddingSpy.count, ++paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, ++horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, ++verticalPaddingChanges)
+
+ control.horizontalPadding = 80
+ compare(control.padding, 60)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 50)
+ compare(control.horizontalPadding, 80)
+ compare(control.verticalPadding, 60)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, ++horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.verticalPadding = 90
+ compare(control.padding, 60)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 50)
+ compare(control.horizontalPadding, 80)
+ compare(control.verticalPadding, 90)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, ++verticalPaddingChanges)
+
+ control.leftPadding = undefined
+ compare(control.padding, 60)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 80)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 50)
+ compare(control.horizontalPadding, 80)
+ compare(control.verticalPadding, 90)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, ++leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.rightPadding = undefined
+ compare(control.padding, 60)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 80)
+ compare(control.rightPadding, 80)
+ compare(control.bottomPadding, 50)
+ compare(control.horizontalPadding, 80)
+ compare(control.verticalPadding, 90)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, ++rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.topPadding = undefined
+ compare(control.padding, 60)
+ compare(control.topPadding, 90)
+ compare(control.leftPadding, 80)
+ compare(control.rightPadding, 80)
+ compare(control.bottomPadding, 50)
+ compare(control.horizontalPadding, 80)
+ compare(control.verticalPadding, 90)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, ++topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.bottomPadding = undefined
+ compare(control.padding, 60)
+ compare(control.topPadding, 90)
+ compare(control.leftPadding, 80)
+ compare(control.rightPadding, 80)
+ compare(control.bottomPadding, 90)
+ compare(control.horizontalPadding, 80)
+ compare(control.verticalPadding, 90)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, ++bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.horizontalPadding = undefined
+ compare(control.padding, 60)
+ compare(control.topPadding, 90)
+ compare(control.leftPadding, 60)
+ compare(control.rightPadding, 60)
+ compare(control.bottomPadding, 90)
+ compare(control.horizontalPadding, 60)
+ compare(control.verticalPadding, 90)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, ++leftPaddingChanges)
+ compare(rightPaddingSpy.count, ++rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, ++horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, verticalPaddingChanges)
+
+ control.verticalPadding = undefined
+ compare(control.padding, 60)
+ compare(control.topPadding, 60)
+ compare(control.leftPadding, 60)
+ compare(control.rightPadding, 60)
+ compare(control.bottomPadding, 60)
+ compare(control.horizontalPadding, 60)
+ compare(control.verticalPadding, 60)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, ++topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, ++bottomPaddingChanges)
+ compare(horizontalPaddingSpy.count, horizontalPaddingChanges)
+ compare(verticalPaddingSpy.count, ++verticalPaddingChanges)
+ }
+
+ function test_availableSize() {
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+
+ var availableWidthSpy = signalSpy.createObject(control, {target: control, signalName: "availableWidthChanged"})
+ verify(availableWidthSpy.valid)
+
+ var availableHeightSpy = signalSpy.createObject(control, {target: control, signalName: "availableHeightChanged"})
+ verify(availableHeightSpy.valid)
+
+ var availableWidthChanges = 0
+ var availableHeightChanges = 0
+
+ control.width = 100
+ compare(control.availableWidth, 100)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.height = 100
+ compare(control.availableHeight, 100)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+
+ control.padding = 10
+ compare(control.availableWidth, 80)
+ compare(control.availableHeight, 80)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+
+ control.topPadding = 20
+ compare(control.availableWidth, 80)
+ compare(control.availableHeight, 70)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+
+ control.leftPadding = 30
+ compare(control.availableWidth, 60)
+ compare(control.availableHeight, 70)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.rightPadding = 40
+ compare(control.availableWidth, 30)
+ compare(control.availableHeight, 70)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.bottomPadding = 50
+ compare(control.availableWidth, 30)
+ compare(control.availableHeight, 30)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+
+ control.padding = 60
+ compare(control.availableWidth, 30)
+ compare(control.availableHeight, 30)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.width = 0
+ compare(control.availableWidth, 0)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.height = 0
+ compare(control.availableHeight, 0)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+ }
+
+ function test_mirrored() {
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+
+ var mirroredSpy = signalSpy.createObject(control, {target: control, signalName: "mirroredChanged"})
+ verify(mirroredSpy.valid)
+
+ control.locale = Qt.locale("en_US")
+ compare(control.locale.name, "en_US")
+ verify(!control.LayoutMirroring.enabled)
+ compare(control.mirrored, false)
+
+ control.locale = Qt.locale("ar_EG")
+ compare(control.mirrored, false)
+ compare(mirroredSpy.count, 0)
+
+ control.LayoutMirroring.enabled = true
+ compare(control.mirrored, true)
+ compare(mirroredSpy.count, 1)
+
+ control.locale = Qt.locale("en_US")
+ compare(control.mirrored, true)
+ compare(mirroredSpy.count, 1)
+
+ control.LayoutMirroring.enabled = false
+ compare(control.mirrored, false)
+ compare(mirroredSpy.count, 2)
+ }
+
+ function test_background() {
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+
+ control.background = component.createObject(control)
+
+ // background has no x or width set, so its width follows control's width
+ control.width = 320
+ compare(control.background.width, control.width)
+
+ // background has no y or height set, so its height follows control's height
+ compare(control.background.height, control.height)
+ control.height = 240
+
+ // change implicit size (QTBUG-66455)
+ control.background.implicitWidth = 160
+ control.background.implicitHeight = 120
+ compare(control.background.width, control.width)
+ compare(control.background.height, control.height)
+
+ // has width => width does not follow
+ control.background.width /= 2
+ control.width += 20
+ verify(control.background.width !== control.width)
+
+ // reset width => width follows again
+ control.background.width = undefined
+ control.width += 20
+ compare(control.background.width, control.width)
+
+ // has x => width does not follow
+ control.background.x = 10
+ control.width += 20
+ verify(control.background.width !== control.width)
+
+ // has height => height does not follow
+ control.background.height /= 2
+ control.height -= 20
+ verify(control.background.height !== control.height)
+
+ // reset height => height follows again
+ control.background.height = undefined
+ control.height -= 20
+ compare(control.background.height, control.height)
+
+ // has y => height does not follow
+ control.background.y = 10
+ control.height -= 20
+ verify(control.background.height !== control.height)
+ }
+
+ Component {
+ id: component2
+ T.Control {
+ id: item2
+ objectName: "item2"
+ property alias item2_2: _item2_2;
+ property alias item2_3: _item2_3;
+ property alias item2_4: _item2_4;
+ property alias item2_5: _item2_5;
+ property alias item2_6: _item2_6;
+ font.family: "Arial"
+ T.Control {
+ id: _item2_2
+ objectName: "_item2_2"
+ T.Control {
+ id: _item2_3
+ objectName: "_item2_3"
+ }
+ }
+ T.TextArea {
+ id: _item2_4
+ objectName: "_item2_4"
+ text: "Text Area"
+ }
+ T.TextField {
+ id: _item2_5
+ objectName: "_item2_5"
+ text: "Text Field"
+ }
+ T.Label {
+ id: _item2_6
+ objectName: "_item2_6"
+ text: "Label"
+ }
+ }
+ }
+
+ function test_font() {
+ var control2 = createTemporaryObject(component2, testCase)
+ verify(control2)
+ verify(control2.item2_2)
+ verify(control2.item2_3)
+ verify(control2.item2_4)
+ verify(control2.item2_5)
+ verify(control2.item2_6)
+
+ compare(control2.font.family, "Arial")
+ compare(control2.item2_2.font.family, control2.font.family)
+ compare(control2.item2_3.font.family, control2.font.family)
+ compare(control2.item2_4.font.family, control2.font.family)
+ compare(control2.item2_5.font.family, control2.font.family)
+ compare(control2.item2_6.font.family, control2.font.family)
+
+ control2.font.pointSize = 48
+ compare(control2.item2_2.font.pointSize, 48)
+ compare(control2.item2_3.font.pointSize, 48)
+ compare(control2.item2_4.font.pointSize, 48)
+ compare(control2.item2_5.font.pointSize, 48)
+
+ control2.font.bold = true
+ compare(control2.item2_2.font.weight, Font.Bold)
+ compare(control2.item2_3.font.weight, Font.Bold)
+ compare(control2.item2_4.font.weight, Font.Bold)
+ compare(control2.item2_5.font.weight, Font.Bold)
+
+ control2.item2_2.font.pointSize = 36
+ compare(control2.item2_2.font.pointSize, 36)
+ compare(control2.item2_3.font.pointSize, 36)
+
+ control2.item2_2.font.weight = Font.Light
+ compare(control2.item2_2.font.pointSize, 36)
+ compare(control2.item2_3.font.pointSize, 36)
+
+ compare(control2.item2_3.font.family, control2.item2_2.font.family)
+ compare(control2.item2_3.font.pointSize, control2.item2_2.font.pointSize)
+ compare(control2.item2_3.font.weight, control2.item2_2.font.weight)
+
+ control2.font.pointSize = 50
+ compare(control2.item2_2.font.pointSize, 36)
+ compare(control2.item2_3.font.pointSize, 36)
+ compare(control2.item2_4.font.pointSize, 50)
+ compare(control2.item2_5.font.pointSize, 50)
+ compare(control2.item2_6.font.pointSize, 50)
+
+ control2.item2_3.font.pointSize = 60
+ compare(control2.item2_3.font.pointSize, 60)
+
+ control2.item2_3.font.weight = Font.Normal
+ compare(control2.item2_3.font.weight, Font.Normal)
+
+ control2.item2_4.font.pointSize = 16
+ compare(control2.item2_4.font.pointSize, 16)
+
+ control2.item2_4.font.weight = Font.Normal
+ compare(control2.item2_4.font.weight, Font.Normal)
+
+ control2.item2_5.font.pointSize = 32
+ compare(control2.item2_5.font.pointSize, 32)
+
+ control2.item2_5.font.weight = Font.DemiBold
+ compare(control2.item2_5.font.weight, Font.DemiBold)
+
+ control2.item2_6.font.pointSize = 36
+ compare(control2.item2_6.font.pointSize, 36)
+
+ control2.item2_6.font.weight = Font.Black
+ compare(control2.item2_6.font.weight, Font.Black)
+
+ compare(control2.font.family, "Arial")
+ compare(control2.font.pointSize, 50)
+ compare(control2.font.weight, Font.Bold)
+
+ compare(control2.item2_2.font.family, "Arial")
+ compare(control2.item2_2.font.pointSize, 36)
+ compare(control2.item2_2.font.weight, Font.Light)
+
+ compare(control2.item2_3.font.family, "Arial")
+ compare(control2.item2_3.font.pointSize, 60)
+ compare(control2.item2_3.font.weight, Font.Normal)
+
+ compare(control2.item2_4.font.family, "Arial")
+ compare(control2.item2_4.font.pointSize, 16)
+ compare(control2.item2_4.font.weight, Font.Normal)
+
+ compare(control2.item2_5.font.family, "Arial")
+ compare(control2.item2_5.font.pointSize, 32)
+ compare(control2.item2_5.font.weight, Font.DemiBold)
+
+ compare(control2.item2_6.font.family, "Arial")
+ compare(control2.item2_6.font.pointSize, 36)
+ compare(control2.item2_6.font.weight, Font.Black)
+ }
+
+ Component {
+ id: component3
+ T.Control {
+ id: item3
+ objectName: "item3"
+ property alias item3_2: _item3_2;
+ property alias item3_3: _item3_3;
+ property alias item3_4: _item3_4;
+ property alias item3_5: _item3_5;
+ property alias item3_6: _item3_6;
+ property alias item3_7: _item3_7;
+ property alias item3_8: _item3_8;
+ font.family: "Arial"
+ Item {
+ id: _item3_2
+ objectName: "_item3_2"
+ T.Control {
+ id: _item3_3
+ objectName: "_item3_3"
+ Item {
+ id: _item3_6
+ objectName: "_item3_6"
+ T.Control {
+ id: _item3_7
+ objectName: "_item3_7"
+ }
+ }
+ }
+ T.TextArea {
+ id: _item3_4
+ objectName: "_item3_4"
+ text: "Text Area"
+ }
+ T.TextField {
+ id: _item3_5
+ objectName: "_item3_5"
+ text: "Text Field"
+ }
+ T.Label {
+ id: _item3_8
+ objectName: "_item3_8"
+ text: "Label"
+ }
+ }
+ }
+ }
+
+ function test_font_2() {
+ var control3 = createTemporaryObject(component3, testCase)
+ verify(control3)
+ verify(control3.item3_2)
+ verify(control3.item3_3)
+ verify(control3.item3_4)
+ verify(control3.item3_5)
+ verify(control3.item3_6)
+ verify(control3.item3_7)
+ verify(control3.item3_8)
+
+ compare(control3.font.family, "Arial")
+ compare(control3.item3_3.font.family, control3.font.family)
+ compare(control3.item3_4.font.family, control3.font.family)
+ compare(control3.item3_5.font.family, control3.font.family)
+ compare(control3.item3_7.font.family, control3.font.family)
+ compare(control3.item3_8.font.family, control3.font.family)
+
+ control3.font.pointSize = 48
+ compare(control3.item3_3.font.pointSize, 48)
+ compare(control3.item3_4.font.pointSize, 48)
+ compare(control3.item3_5.font.pointSize, 48)
+
+ control3.font.bold = true
+ compare(control3.item3_3.font.weight, Font.Bold)
+ compare(control3.item3_4.font.weight, Font.Bold)
+ compare(control3.item3_5.font.weight, Font.Bold)
+
+ compare(control3.item3_3.font.family, control3.font.family)
+ compare(control3.item3_3.font.pointSize, control3.font.pointSize)
+ compare(control3.item3_3.font.weight, control3.font.weight)
+ compare(control3.item3_7.font.family, control3.font.family)
+ compare(control3.item3_7.font.pointSize, control3.font.pointSize)
+ compare(control3.item3_7.font.weight, control3.font.weight)
+
+ control3.item3_3.font.pointSize = 60
+ compare(control3.item3_3.font.pointSize, 60)
+
+ control3.item3_3.font.weight = Font.Normal
+ compare(control3.item3_3.font.weight, Font.Normal)
+
+ control3.item3_4.font.pointSize = 16
+ compare(control3.item3_4.font.pointSize, 16)
+
+ control3.item3_4.font.weight = Font.Normal
+ compare(control3.item3_4.font.weight, Font.Normal)
+
+ control3.item3_5.font.pointSize = 32
+ compare(control3.item3_5.font.pointSize, 32)
+
+ control3.item3_5.font.weight = Font.DemiBold
+ compare(control3.item3_5.font.weight, Font.DemiBold)
+
+ control3.item3_8.font.pointSize = 36
+ compare(control3.item3_8.font.pointSize, 36)
+
+ control3.item3_8.font.weight = Font.Black
+ compare(control3.item3_8.font.weight, Font.Black)
+
+ control3.font.pointSize = 100
+ compare(control3.font.pointSize, 100)
+ compare(control3.item3_3.font.pointSize, 60)
+ compare(control3.item3_4.font.pointSize, 16)
+ compare(control3.item3_5.font.pointSize, 32)
+ compare(control3.item3_8.font.pointSize, 36)
+
+ compare(control3.font.family, "Arial")
+ compare(control3.font.pointSize, 100)
+ compare(control3.font.weight, Font.Bold)
+
+ compare(control3.item3_3.font.family, "Arial")
+ compare(control3.item3_3.font.pointSize, 60)
+ compare(control3.item3_3.font.weight, Font.Normal)
+ compare(control3.item3_7.font.family, control3.item3_3.font.family)
+ compare(control3.item3_7.font.pointSize, control3.item3_3.font.pointSize)
+ compare(control3.item3_7.font.weight, control3.item3_3.font.weight)
+
+ compare(control3.item3_4.font.family, "Arial")
+ compare(control3.item3_4.font.pointSize, 16)
+ compare(control3.item3_4.font.weight, Font.Normal)
+
+ compare(control3.item3_5.font.family, "Arial")
+ compare(control3.item3_5.font.pointSize, 32)
+ compare(control3.item3_5.font.weight, Font.DemiBold)
+
+ compare(control3.item3_8.font.family, "Arial")
+ compare(control3.item3_8.font.pointSize, 36)
+ compare(control3.item3_8.font.weight, Font.Black)
+ }
+
+ Component {
+ id: component4
+ T.Control {
+ id: item4
+ objectName: "item4"
+ property alias item4_2: _item4_2;
+ property alias item4_3: _item4_3;
+ property alias item4_4: _item4_4;
+ T.Control {
+ id: _item4_2
+ objectName: "_item4_2"
+ font.pixelSize: item4.font.pixelSize + 10
+ T.Control {
+ id: _item4_3
+ objectName: "_item4_3"
+ font.pixelSize: item4.font.pixelSize - 1
+ }
+ T.Control {
+ id: _item4_4
+ objectName: "_item4_4"
+ }
+ }
+ }
+ }
+
+ function test_font_3() {
+ var control4 = createTemporaryObject(component4, testCase)
+ verify(control4)
+ verify(control4.item4_2)
+ verify(control4.item4_3)
+ verify(control4.item4_4)
+
+ var family = control4.font.family
+ var ps = control4.font.pixelSize
+
+ compare(control4.item4_2.font.family, control4.font.family)
+ compare(control4.item4_3.font.family, control4.font.family)
+ compare(control4.item4_4.font.family, control4.font.family)
+
+ compare(control4.item4_2.font.pixelSize, control4.font.pixelSize + 10)
+ compare(control4.item4_3.font.pixelSize, control4.font.pixelSize - 1)
+ compare(control4.item4_4.font.pixelSize, control4.font.pixelSize + 10)
+
+ control4.item4_2.font.pixelSize = control4.font.pixelSize + 15
+ compare(control4.item4_2.font.pixelSize, control4.font.pixelSize + 15)
+ compare(control4.item4_3.font.pixelSize, control4.font.pixelSize - 1)
+ compare(control4.item4_4.font.pixelSize, control4.font.pixelSize + 15)
+ }
+
+ function test_font_explicit_attributes_data() {
+ return [
+ {tag: "bold", value: true},
+ {tag: "capitalization", value: Font.Capitalize},
+ {tag: "family", value: "Courier"},
+ {tag: "italic", value: true},
+ {tag: "strikeout", value: true},
+ {tag: "underline", value: true},
+ {tag: "weight", value: Font.Black},
+ {tag: "wordSpacing", value: 55}
+ ]
+ }
+
+ function test_font_explicit_attributes(data) {
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+
+ var child = component.createObject(control)
+ verify(child)
+
+ var controlSpy = signalSpy.createObject(control, {target: control, signalName: "fontChanged"})
+ verify(controlSpy.valid)
+
+ var childSpy = signalSpy.createObject(child, {target: child, signalName: "fontChanged"})
+ verify(childSpy.valid)
+
+ var defaultValue = control.font[data.tag]
+ child.font[data.tag] = defaultValue
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.font[data.tag] = data.value
+
+ compare(control.font[data.tag], data.value)
+ compare(controlSpy.count, 1)
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+ }
+
+ function test_locale() {
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+
+ control.locale = Qt.locale("en_US")
+ compare(control.locale.name, "en_US")
+
+ control.locale = Qt.locale("nb_NO")
+ compare(control.locale.name, "nb_NO")
+ }
+
+ Component {
+ id: component5
+ T.Control {
+ id: item2
+ objectName: "item2"
+ property alias localespy: _lspy;
+ property alias mirroredspy: _mspy;
+ property alias localespy_2: _lspy_2;
+ property alias mirroredspy_2: _mspy_2;
+ property alias localespy_3: _lspy_3;
+ property alias mirroredspy_3: _mspy_3;
+ property alias item2_2: _item2_2;
+ property alias item2_3: _item2_3;
+ T.Control {
+ id: _item2_2
+ objectName: "_item2_2"
+ T.Control {
+ id: _item2_3
+ objectName: "_item2_3"
+
+ SignalSpy {
+ id: _lspy_3
+ target: item2_3
+ signalName: "localeChanged"
+ }
+
+ SignalSpy {
+ id: _mspy_3
+ target: item2_3
+ signalName: "mirroredChanged"
+ }
+ }
+
+ SignalSpy {
+ id: _lspy_2
+ target: item2_2
+ signalName: "localeChanged"
+ }
+
+ SignalSpy {
+ id: _mspy_2
+ target: item2_2
+ signalName: "mirroredChanged"
+ }
+ }
+
+ SignalSpy {
+ id: _lspy
+ target: item2
+ signalName: "localeChanged"
+ }
+
+ SignalSpy {
+ id: _mspy
+ target: item2
+ signalName: "mirroredChanged"
+ }
+ }
+ }
+
+ function test_locale_2() {
+ var control = createTemporaryObject(component5, testCase)
+ verify(control)
+ verify(control.item2_2)
+ verify(control.item2_3)
+
+ var defaultLocale = Qt.locale()
+
+ compare(control.locale.name, defaultLocale.name)
+ compare(control.item2_2.locale.name, defaultLocale.name)
+ compare(control.item2_3.locale.name, defaultLocale.name)
+
+ control.locale = Qt.locale("nb_NO")
+ control.localespy.wait()
+ compare(control.localespy.count, 1)
+ compare(control.mirroredspy.count, 0)
+ compare(control.locale.name, "nb_NO")
+ compare(control.item2_2.locale.name, "nb_NO")
+ compare(control.item2_3.locale.name, "nb_NO")
+ compare(control.localespy_2.count, 1)
+ compare(control.mirroredspy_2.count, 0)
+ compare(control.localespy_3.count, 1)
+ compare(control.mirroredspy_3.count, 0)
+
+ control.locale = Qt.locale("ar_EG")
+ control.localespy.wait()
+ compare(control.localespy.count, 2)
+ compare(control.mirroredspy.count, 0)
+ compare(control.locale.name, "ar_EG")
+ compare(control.item2_2.locale.name, "ar_EG")
+ compare(control.item2_3.locale.name, "ar_EG")
+ compare(control.localespy_2.count, 2)
+ compare(control.mirroredspy_2.count, 0)
+ compare(control.localespy_3.count, 2)
+ compare(control.mirroredspy_3.count, 0)
+ }
+
+ Component {
+ id: component6
+ T.Control {
+ id: item6
+ objectName: "item6"
+ property alias localespy: _lspy;
+ property alias mirroredspy: _mspy;
+ property alias localespy_5: _lspy_5;
+ property alias mirroredspy_5: _mspy_5;
+ property alias item6_2: _item6_2;
+ property alias item6_3: _item6_3;
+ property alias item6_4: _item6_4;
+ property alias item6_5: _item6_5;
+ Item {
+ id: _item6_2
+ objectName: "_item6_2"
+ T.Control {
+ id: _item6_3
+ objectName: "_item6_3"
+ Item {
+ id: _item6_4
+ objectName: "_item6_4"
+ T.Control {
+ id: _item6_5
+ objectName: "_item6_5"
+
+ SignalSpy {
+ id: _lspy_5
+ target: _item6_5
+ signalName: "localeChanged"
+ }
+
+ SignalSpy {
+ id: _mspy_5
+ target: _item6_5
+ signalName: "mirroredChanged"
+ }
+ }
+ }
+ }
+ }
+
+ SignalSpy {
+ id: _lspy
+ target: item6
+ signalName: "localeChanged"
+ }
+
+ SignalSpy {
+ id: _mspy
+ target: item6
+ signalName: "mirroredChanged"
+ }
+ }
+ }
+
+ function test_locale_3() {
+ var control = createTemporaryObject(component6, testCase)
+ verify(control)
+ verify(control.item6_2)
+ verify(control.item6_3)
+ verify(control.item6_4)
+ verify(control.item6_5)
+
+ var defaultLocale = Qt.locale()
+
+ compare(control.locale.name, defaultLocale.name)
+ compare(control.item6_5.locale.name, defaultLocale.name)
+
+ control.locale = Qt.locale("nb_NO")
+ control.localespy.wait()
+ compare(control.localespy.count, 1)
+ compare(control.mirroredspy.count, 0)
+ compare(control.locale.name, "nb_NO")
+ compare(control.item6_5.locale.name, "nb_NO")
+ compare(control.localespy_5.count, 1)
+ compare(control.mirroredspy_5.count, 0)
+
+ control.locale = Qt.locale("ar_EG")
+ control.localespy.wait()
+ compare(control.localespy.count, 2)
+ compare(control.mirroredspy.count, 0)
+ compare(control.locale.name, "ar_EG")
+ compare(control.item6_5.locale.name, "ar_EG")
+ compare(control.localespy_5.count, 2)
+ compare(control.mirroredspy_5.count, 0)
+ }
+
+ function test_hover_data() {
+ return [
+ { tag: "normal", target: component, pressed: false },
+ { tag: "pressed", target: button, pressed: true }
+ ]
+ }
+
+ function test_hover(data) {
+ var control = createTemporaryObject(data.target, testCase, {width: 100, height: 100})
+ verify(control)
+
+ compare(control.hovered, false)
+ compare(control.hoverEnabled, Qt.styleHints.useHoverEffects)
+
+ control.hoverEnabled = false
+
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.hovered, false)
+
+ control.hoverEnabled = true
+
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.hovered, true)
+
+ if (data.pressed) {
+ mousePress(control, control.width / 2, control.height / 2)
+ compare(control.hovered, true)
+ }
+
+ mouseMove(control, -10, -10)
+ compare(control.hovered, false)
+
+ if (data.pressed) {
+ mouseRelease(control, -10, control.height / 2)
+ compare(control.hovered, false)
+ }
+
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.hovered, true)
+
+ control.visible = false
+ compare(control.hovered, false)
+ }
+
+ function test_hoverEnabled() {
+ var control = createTemporaryObject(component, testCase)
+ compare(control.hoverEnabled, Qt.styleHints.useHoverEffects)
+
+ var child = component.createObject(control)
+ var grandChild = component.createObject(child)
+
+ var childExplicitHoverEnabled = component.createObject(control, {hoverEnabled: true})
+ var grandChildExplicitHoverDisabled = component.createObject(childExplicitHoverEnabled, {hoverEnabled: false})
+
+ var childExplicitHoverDisabled = component.createObject(control, {hoverEnabled: false})
+ var grandChildExplicitHoverEnabled = component.createObject(childExplicitHoverDisabled, {hoverEnabled: true})
+
+ control.hoverEnabled = false
+ compare(control.hoverEnabled, false)
+ compare(grandChild.hoverEnabled, false)
+
+ compare(childExplicitHoverEnabled.hoverEnabled, true)
+ compare(grandChildExplicitHoverDisabled.hoverEnabled, false)
+
+ compare(childExplicitHoverDisabled.hoverEnabled, false)
+ compare(grandChildExplicitHoverEnabled.hoverEnabled, true)
+
+ control.hoverEnabled = true
+ compare(control.hoverEnabled, true)
+ compare(grandChild.hoverEnabled, true)
+
+ compare(childExplicitHoverEnabled.hoverEnabled, true)
+ compare(grandChildExplicitHoverDisabled.hoverEnabled, false)
+
+ compare(childExplicitHoverDisabled.hoverEnabled, false)
+ compare(grandChildExplicitHoverEnabled.hoverEnabled, true)
+ }
+
+ function test_implicitSize() {
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+
+ var implicitWidthSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitWidthChanged"})
+ verify(implicitWidthSpy.valid)
+
+ var implicitHeightSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitHeightChanged"})
+ verify(implicitHeightSpy.valid)
+
+ var implicitContentWidthSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitContentWidthChanged"})
+ verify(implicitContentWidthSpy.valid)
+
+ var implicitContentHeightSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitContentHeightChanged"})
+ verify(implicitContentHeightSpy.valid)
+
+ var implicitBackgroundWidthSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitBackgroundWidthChanged"})
+ verify(implicitBackgroundWidthSpy.valid)
+
+ var implicitBackgroundHeightSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitBackgroundHeightChanged"})
+ verify(implicitBackgroundHeightSpy.valid)
+
+ var implicitWidthChanges = 0
+ var implicitHeightChanges = 0
+ var implicitContentWidthChanges = 0
+ var implicitContentHeightChanges = 0
+ var implicitBackgroundWidthChanges = 0
+ var implicitBackgroundHeightChanges = 0
+
+ compare(control.implicitWidth, 0)
+ compare(control.implicitHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+
+ control.contentItem = rectangle.createObject(control, {implicitWidth: 10, implicitHeight: 20})
+ compare(control.implicitWidth, 10)
+ compare(control.implicitHeight, 20)
+ compare(control.implicitContentWidth, 10)
+ compare(control.implicitContentHeight, 20)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, ++implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, implicitBackgroundHeightChanges)
+ compare(implicitContentWidthSpy.count, ++implicitContentWidthChanges)
+ compare(implicitContentHeightSpy.count, ++implicitContentHeightChanges)
+
+ control.contentItem.implicitWidth += 1
+ control.contentItem.implicitHeight += 1
+ compare(control.implicitWidth, 11)
+ compare(control.implicitHeight, 21)
+ compare(control.implicitContentWidth, 11)
+ compare(control.implicitContentHeight, 21)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, ++implicitHeightChanges)
+ compare(implicitContentWidthSpy.count, ++implicitContentWidthChanges)
+ compare(implicitContentHeightSpy.count, ++implicitContentHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, implicitBackgroundHeightChanges)
+
+ control.background = rectangle.createObject(control, {implicitWidth: 20, implicitHeight: 30})
+ compare(control.implicitWidth, 20)
+ compare(control.implicitHeight, 30)
+ compare(control.implicitContentWidth,11)
+ compare(control.implicitContentHeight, 21)
+ compare(control.implicitBackgroundWidth, 20)
+ compare(control.implicitBackgroundHeight, 30)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, ++implicitHeightChanges)
+ compare(implicitContentWidthSpy.count, implicitContentWidthChanges)
+ compare(implicitContentHeightSpy.count, implicitContentHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, ++implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, ++implicitBackgroundHeightChanges)
+
+ control.background.implicitWidth += 1
+ control.background.implicitHeight += 1
+ compare(control.implicitWidth, 21)
+ compare(control.implicitHeight, 31)
+ compare(control.implicitContentWidth, 11)
+ compare(control.implicitContentHeight, 21)
+ compare(control.implicitBackgroundWidth, 21)
+ compare(control.implicitBackgroundHeight, 31)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, ++implicitHeightChanges)
+ compare(implicitContentWidthSpy.count, implicitContentWidthChanges)
+ compare(implicitContentHeightSpy.count, implicitContentHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, ++implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, ++implicitBackgroundHeightChanges)
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(component, testCase)
+ verify(control)
+
+ compare(control.baselineOffset, 0)
+
+ var baselineSpy = signalSpy.createObject(control, {target: control, signalName: "baselineOffsetChanged"})
+ verify(baselineSpy.valid)
+
+ control.contentItem = rectangle.createObject(control, {baselineOffset: 12})
+ compare(control.baselineOffset, 12)
+ compare(baselineSpy.count, 1)
+
+ control.padding = 6
+ compare(control.baselineOffset, 18)
+ compare(baselineSpy.count, 2)
+
+ control.baselineOffset = 3
+ compare(control.baselineOffset, 3)
+ compare(baselineSpy.count, 3)
+
+ control.padding = 9
+ compare(control.baselineOffset, 3)
+ compare(baselineSpy.count, 3)
+
+ control.baselineOffset = undefined
+ compare(control.baselineOffset, 21)
+ compare(baselineSpy.count, 4)
+
+ control.contentItem.baselineOffset = 3
+ compare(control.baselineOffset, 12)
+ compare(baselineSpy.count, 5)
+
+ control.contentItem = null
+ compare(control.baselineOffset, 0)
+ compare(baselineSpy.count, 6)
+ }
+
+ function test_inset() {
+ var control = createTemporaryObject(component, testCase, {background: rectangle.createObject(control)})
+ verify(control)
+
+ var topInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "topInsetChanged"})
+ verify(topInsetSpy.valid)
+
+ var leftInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "leftInsetChanged"})
+ verify(leftInsetSpy.valid)
+
+ var rightInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "rightInsetChanged"})
+ verify(rightInsetSpy.valid)
+
+ var bottomInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "bottomInsetChanged"})
+ verify(bottomInsetSpy.valid)
+
+ var topInsetChanges = 0
+ var leftInsetChanges = 0
+ var rightInsetChanges = 0
+ var bottomInsetChanges = 0
+
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+
+ control.width = 100
+ control.height = 100
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 100)
+
+ control.topInset = 10
+ compare(control.topInset, 10)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, ++topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 10)
+ compare(control.background.width, 100)
+ compare(control.background.height, 90)
+
+ control.leftInset = 20
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, ++leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 80)
+ compare(control.background.height, 90)
+
+ control.rightInset = 30
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, ++rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 50)
+ compare(control.background.height, 90)
+
+ control.bottomInset = 40
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, ++bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 50)
+ compare(control.background.height, 50)
+
+ control.topInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, ++topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 0)
+ compare(control.background.width, 50)
+ compare(control.background.height, 60)
+
+ control.leftInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, ++leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 70)
+ compare(control.background.height, 60)
+
+ control.rightInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, ++rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 60)
+
+ control.bottomInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, ++bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 100)
+ }
+
+ Component {
+ id: contentItemDeletionOrder1
+
+ Item {
+ objectName: "parentItem"
+
+ Item {
+ id: item
+ objectName: "contentItem"
+ }
+ Control {
+ objectName: "control"
+ contentItem: item
+ }
+ }
+ }
+
+ Component {
+ id: contentItemDeletionOrder2
+
+ Item {
+ objectName: "parentItem"
+
+ Control {
+ objectName: "control"
+ contentItem: item
+ }
+ Item {
+ id: item
+ objectName: "contentItem"
+ }
+ }
+ }
+
+ function test_contentItemDeletionOrder() {
+ var control1 = createTemporaryObject(contentItemDeletionOrder1, testCase)
+ verify(control1)
+ var control2 = createTemporaryObject(contentItemDeletionOrder2, testCase)
+ verify(control2)
+ }
+
+ Component {
+ id: backgroundDeletionOrder1
+
+ Item {
+ objectName: "parentItem"
+
+ Item {
+ id: item
+ objectName: "backgroundItem"
+ }
+ Control {
+ objectName: "control"
+ background: item
+ }
+ }
+ }
+
+ Component {
+ id: backgroundDeletionOrder2
+
+ Item {
+ objectName: "parentItem"
+
+ Control {
+ objectName: "control"
+ background: item
+ }
+ Item {
+ id: item
+ objectName: "backgroundItem"
+ }
+ }
+ }
+
+ function test_backgroundDeletionOrder() {
+ var control1 = createTemporaryObject(backgroundDeletionOrder1, testCase)
+ verify(control1)
+ var control2 = createTemporaryObject(backgroundDeletionOrder2, testCase)
+ verify(control2)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_delaybutton.qml b/tests/auto/quickcontrols2/controls/data/tst_delaybutton.qml
new file mode 100644
index 0000000000..731caf8675
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_delaybutton.qml
@@ -0,0 +1,332 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "DelayButton"
+
+ Component {
+ id: delayButton
+ DelayButton {
+ delay: 200
+ }
+ }
+
+ Component {
+ id: signalSequenceSpy
+ SignalSequenceSpy {
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "doubleClicked", "pressedChanged", "downChanged", "checkedChanged", "activated"]
+ }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(delayButton, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // click
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked"]
+ mouseClick(control)
+ verify(sequenceSpy.success)
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ "activated"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ tryVerify(function() { return sequenceSpy.success})
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ ["checkedChanged", { "checked": true }],
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ ["checkedChanged", { "checked": false }],
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // release outside
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }]]
+ mouseMove(control, control.width * 2, control.height * 2, 0)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["canceled", { "pressed": false }]]
+ mouseRelease(control, control.width * 2, control.height * 2, Qt.LeftButton)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // right button
+ sequenceSpy.expectedSequence = []
+ mousePress(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.pressed, false)
+
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // double click
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked",
+ ["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ "doubleClicked",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released"]
+ mouseDoubleClickSequence(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ verify(sequenceSpy.success)
+ }
+
+ function test_touch() {
+ var control = createTemporaryObject(delayButton, testCase)
+ verify(control)
+
+ var touch = touchEvent(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // click
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked"]
+ touch.press(0, control).commit()
+ touch.release(0, control).commit()
+ verify(sequenceSpy.success)
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ "activated"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ tryVerify(function() { return sequenceSpy.success})
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ ["checkedChanged", { "checked": true }],
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ ["checkedChanged", { "checked": false }],
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // release outside
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }]]
+ touch.move(0, control, control.width * 2, control.height * 2).commit()
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = [["canceled", { "pressed": false }]]
+ touch.release(0, control, control.width * 2, control.height * 2).commit()
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ }
+
+ function test_keys() {
+ var control = createTemporaryObject(delayButton, testCase)
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // click
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ verify(sequenceSpy.success)
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ "activated"]
+ keyPress(Qt.Key_Space)
+ tryVerify(function() { return sequenceSpy.success})
+
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ ["checkedChanged", { "checked": true }],
+ "released",
+ "clicked"]
+ keyRelease(Qt.Key_Space)
+ verify(sequenceSpy.success)
+
+ // uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }],
+ ["downChanged", { "down": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ ["downChanged", { "down": false }],
+ ["checkedChanged", { "checked": false }],
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ verify(sequenceSpy.success)
+
+ // no change
+ sequenceSpy.expectedSequence = []
+ var keys = [Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab]
+ for (var i = 0; i < keys.length; ++i) {
+ sequenceSpy.reset()
+ keyClick(keys[i])
+ verify(sequenceSpy.success)
+ }
+ }
+
+ function test_progress() {
+ var control = createTemporaryObject(delayButton, testCase)
+ verify(control)
+
+ var progressSpy = signalSpy.createObject(control, {target: control, signalName: "progressChanged"})
+ verify(progressSpy.valid)
+
+ compare(control.progress, 0.0)
+ mousePress(control)
+ tryCompare(control, "progress", 1.0)
+ verify(progressSpy.count > 0)
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(delayButton, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_dial.qml b/tests/auto/quickcontrols2/controls/data/tst_dial.qml
new file mode 100644
index 0000000000..2d0c702e70
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_dial.qml
@@ -0,0 +1,709 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 450
+ height: 450
+ visible: true
+ when: windowShown
+ name: "Dial"
+
+ Component {
+ id: dialComponent
+ Dial {
+ width: 100
+ height: 100
+ anchors.centerIn: parent
+ }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy {}
+ }
+
+ function test_instance() {
+ var dial = createTemporaryObject(dialComponent, testCase);
+ verify(dial);
+ compare(dial.value, 0.0);
+ compare(dial.from, 0.0);
+ compare(dial.to, 1.0);
+ compare(dial.stepSize, 0.0);
+ verify(dial.activeFocusOnTab);
+ verify(!dial.pressed);
+ }
+
+ function test_value() {
+ var dial = createTemporaryObject(dialComponent, testCase);
+ verify(dial);
+ compare(dial.value, 0.0);
+
+ dial.value = 0.5;
+ compare(dial.value, 0.5);
+
+ dial.value = 1.0;
+ compare(dial.value, 1.0);
+
+ dial.value = -1.0;
+ compare(dial.value, 0.0);
+
+ dial.value = 2.0;
+ compare(dial.value, 1.0);
+ }
+
+ function test_range() {
+ var dial = createTemporaryObject(dialComponent, testCase);
+ verify(dial);
+
+ dial.from = 0;
+ dial.to = 100;
+ dial.value = 50;
+ compare(dial.from, 0);
+ compare(dial.to, 100);
+ compare(dial.value, 50);
+ compare(dial.position, 0.5);
+
+ dial.value = 1000
+ compare(dial.value, 100);
+ compare(dial.position, 1);
+
+ dial.value = -1
+ compare(dial.value, 0);
+ compare(dial.position, 0);
+
+ dial.from = 25
+ compare(dial.from, 25);
+ compare(dial.value, 25);
+ compare(dial.position, 0);
+
+ dial.to = 75
+ compare(dial.to, 75);
+ compare(dial.value, 25);
+ compare(dial.position, 0);
+
+ dial.value = 50
+ compare(dial.value, 50);
+ compare(dial.position, 0.5);
+ }
+
+ function test_inverted() {
+ var dial = createTemporaryObject(dialComponent, testCase, { from: 1.0, to: -1.0 });
+ verify(dial);
+ compare(dial.from, 1.0);
+ compare(dial.to, -1.0);
+ compare(dial.value, 0.0);
+ compare(dial.position, 0.5);
+
+ dial.value = 2.0;
+ compare(dial.value, 1.0);
+ compare(dial.position, 0.0);
+
+ dial.value = -2.0;
+ compare(dial.value, -1.0);
+ compare(dial.position, 1.0);
+
+ dial.value = 0.0;
+ compare(dial.value, 0.0);
+ compare(dial.position, 0.5);
+ }
+
+ SignalSpy {
+ id: pressSpy
+ signalName: "pressedChanged"
+ }
+
+ function test_pressed() {
+ var dial = createTemporaryObject(dialComponent, testCase);
+ verify(dial);
+
+ pressSpy.target = dial;
+ verify(pressSpy.valid);
+ verify(!dial.pressed);
+
+ mousePress(dial, dial.width / 2, dial.height / 2);
+ verify(dial.pressed);
+ compare(pressSpy.count, 1);
+
+ mouseRelease(dial, dial.width / 2, dial.height / 2);
+ verify(!dial.pressed);
+ compare(pressSpy.count, 2);
+
+ var touch = touchEvent(dial);
+ touch.press(0).commit();
+ verify(dial.pressed);
+ compare(pressSpy.count, 3);
+
+ touch.release(0).commit();
+ verify(!dial.pressed);
+ compare(pressSpy.count, 4);
+ }
+
+ SignalSpy {
+ id: valueSpy
+ signalName: "valueChanged"
+ }
+
+ function test_dragging_data() {
+ return [
+ { tag: "default", from: 0, to: 1, leftValue: 0.20, topValue: 0.5, rightValue: 0.8, bottomValue: 1.0, live: false },
+ { tag: "scaled2", from: 0, to: 2, leftValue: 0.4, topValue: 1.0, rightValue: 1.6, bottomValue: 2.0, live: false },
+ { tag: "scaled1", from: -1, to: 0, leftValue: -0.8, topValue: -0.5, rightValue: -0.2, bottomValue: 0.0, live: false },
+ { tag: "live", from: 0, to: 1, leftValue: 0.20, topValue: 0.5, rightValue: 0.8, bottomValue: 1.0, live: true }
+ ]
+ }
+
+ function test_dragging(data) {
+ var dial = createTemporaryObject(dialComponent, testCase);
+ verify(dial);
+
+ dial.wrap = true;
+ verify(dial.wrap);
+ dial.from = data.from;
+ dial.to = data.to;
+ dial.live = data.live;
+
+ valueSpy.target = dial;
+ verify(valueSpy.valid);
+
+ var moveSpy = createTemporaryObject(signalSpy, testCase, {target: dial, signalName: "moved"});
+ verify(moveSpy.valid);
+
+ var minimumExpectedValueCount = data.live ? 2 : 1;
+
+ // drag to the left
+ // we always add or subtract 1 to ensure we start the drag from the opposite side
+ // of where we're dragging to, for more reliable tests
+ mouseDrag(dial, dial.width / 2 + 1, dial.height / 2, -dial.width / 2, 0, Qt.LeftButton);
+ fuzzyCompare(dial.value, data.leftValue, 0.1);
+ verify(valueSpy.count >= minimumExpectedValueCount, "expected valueChanged to be emitted at least "
+ + minimumExpectedValueCount + " time(s), but it was only emitted " + valueSpy.count + " time(s)");
+ valueSpy.clear();
+ verify(moveSpy.count > 0);
+ moveSpy.clear();
+
+ // drag to the top
+ mouseDrag(dial, dial.width / 2, dial.height / 2 + 1, 0, -dial.height / 2, Qt.LeftButton);
+ fuzzyCompare(dial.value, data.topValue, 0.1);
+ verify(valueSpy.count >= minimumExpectedValueCount, "expected valueChanged to be emitted at least "
+ + minimumExpectedValueCount + " time(s), but it was only emitted " + valueSpy.count + " time(s)");
+ valueSpy.clear();
+ verify(moveSpy.count > 0);
+ moveSpy.clear();
+
+ // drag to the right
+ mouseDrag(dial, dial.width / 2 - 1, dial.height / 2, dial.width / 2, 0, Qt.LeftButton);
+ fuzzyCompare(dial.value, data.rightValue, 0.1);
+ verify(valueSpy.count >= minimumExpectedValueCount, "expected valueChanged to be emitted at least "
+ + minimumExpectedValueCount + " time(s), but it was only emitted " + valueSpy.count + " time(s)");
+ valueSpy.clear();
+ verify(moveSpy.count > 0);
+ moveSpy.clear();
+
+ // drag to the bottom (* 0.6 to ensure we don't go over to the minimum position)
+ mouseDrag(dial, dial.width / 2, dial.height / 2 - 1, 10, dial.height / 2, Qt.LeftButton);
+ fuzzyCompare(dial.value, data.bottomValue, 0.1);
+ verify(valueSpy.count >= minimumExpectedValueCount, "expected valueChanged to be emitted at least "
+ + minimumExpectedValueCount + " time(s), but it was only emitted " + valueSpy.count + " time(s)");
+ valueSpy.clear();
+ verify(moveSpy.count > 0);
+ moveSpy.clear();
+ }
+
+ function test_nonWrapping() {
+ var dial = createTemporaryObject(dialComponent, testCase);
+ verify(dial);
+
+ compare(dial.wrap, false);
+ dial.value = 0;
+
+ // Ensure that dragging from bottom left to bottom right doesn't work.
+ var yPos = dial.height * 0.75;
+ mousePress(dial, dial.width * 0.25, yPos, Qt.LeftButton);
+ var positionAtPress = dial.position;
+ mouseMove(dial, dial.width * 0.5, yPos);
+ compare(dial.position, positionAtPress);
+ mouseMove(dial, dial.width * 0.75, yPos);
+ compare(dial.position, positionAtPress);
+ mouseRelease(dial, dial.width * 0.75, yPos, Qt.LeftButton);
+ compare(dial.position, positionAtPress);
+
+ // Try the same thing, but a bit higher.
+ yPos = dial.height * 0.6;
+ mousePress(dial, dial.width * 0.25, yPos, Qt.LeftButton);
+ positionAtPress = dial.position;
+ mouseMove(dial, dial.width * 0.5, yPos);
+ compare(dial.position, positionAtPress);
+ mouseMove(dial, dial.width * 0.75, yPos);
+ compare(dial.position, positionAtPress);
+ mouseRelease(dial, dial.width * 0.75, yPos, Qt.LeftButton);
+ compare(dial.position, positionAtPress);
+
+ // Going from below the center of the dial to above it should work (once it gets above the center).
+ mousePress(dial, dial.width * 0.25, dial.height * 0.75, Qt.LeftButton);
+ positionAtPress = dial.position;
+ mouseMove(dial, dial.width * 0.5, dial.height * 0.6);
+ compare(dial.position, positionAtPress);
+ mouseMove(dial, dial.width * 0.75, dial.height * 0.4);
+ verify(dial.position > positionAtPress);
+ mouseRelease(dial, dial.width * 0.75, dial.height * 0.3, Qt.LeftButton);
+ verify(dial.position > positionAtPress);
+ }
+
+ function test_touch() {
+ var dial = createTemporaryObject(dialComponent, testCase);
+ verify(dial);
+
+ var touch = touchEvent(dial);
+
+ // Ensure that dragging from bottom left to bottom right doesn't work.
+ var yPos = dial.height * 0.75;
+ touch.press(0, dial, dial.width * 0.25, yPos).commit();
+ var positionAtPress = dial.position;
+ touch.move(0, dial, dial.width * 0.5, yPos).commit();
+ compare(dial.position, positionAtPress);
+ touch.move(0, dial, dial.width * 0.75, yPos).commit();
+ compare(dial.position, positionAtPress);
+ touch.release(0, dial, dial.width * 0.75, yPos).commit();
+ compare(dial.position, positionAtPress);
+
+ // Try the same thing, but a bit higher.
+ yPos = dial.height * 0.6;
+ touch.press(0, dial, dial.width * 0.25, yPos).commit();
+ positionAtPress = dial.position;
+ touch.move(0, dial, dial.width * 0.5, yPos).commit();
+ compare(dial.position, positionAtPress);
+ touch.move(0, dial, dial.width * 0.75, yPos).commit();
+ compare(dial.position, positionAtPress);
+ touch.release(0, dial, dial.width * 0.75, yPos).commit();
+ compare(dial.position, positionAtPress);
+
+ // Going from below the center of the dial to above it should work (once it gets above the center).
+ touch.press(0, dial, dial.width * 0.25, dial.height * 0.75).commit();
+ positionAtPress = dial.position;
+ touch.move(0, dial, dial.width * 0.5, dial.height * 0.6).commit();
+ compare(dial.position, positionAtPress);
+ touch.move(0, dial, dial.width * 0.75, dial.height * 0.4).commit();
+ verify(dial.position > positionAtPress);
+ touch.release(0, dial, dial.width * 0.75, dial.height * 0.3).commit();
+ verify(dial.position > positionAtPress);
+ }
+
+ function test_multiTouch() {
+ var dial1 = createTemporaryObject(dialComponent, testCase);
+ verify(dial1);
+
+ var touch = touchEvent(dial1);
+ touch.press(0, dial1).commit().move(0, dial1, dial1.width / 4, dial1.height / 4).commit();
+ compare(dial1.pressed, true);
+ verify(dial1.position > 0.0);
+
+ var pos1Before = dial1.position;
+
+ // second touch point on the same control is ignored
+ touch.stationary(0).press(1, dial1, 0, 0).commit()
+ touch.stationary(0).move(1, dial1).commit()
+ touch.stationary(0).release(1).commit()
+ compare(dial1.pressed, true);
+ compare(dial1.position, pos1Before);
+
+ var dial2 = createTemporaryObject(dialComponent, testCase, {y: dial1.height});
+ verify(dial2);
+
+ // press the second dial
+ touch.stationary(0).press(2, dial2, 0, 0).commit();
+ compare(dial2.pressed, true);
+ compare(dial2.position, 0.0);
+
+ pos1Before = dial1.position;
+ var pos2Before = dial2.position;
+
+ // move both dials
+ touch.move(0, dial1).move(2, dial2, dial2.width / 4, dial2.height / 4).commit();
+ compare(dial1.pressed, true);
+ verify(dial1.position !== pos1Before);
+ compare(dial2.pressed, true);
+ verify(dial2.position !== pos2Before);
+
+ // release both dials
+ touch.release(0, dial1).release(2, dial2).commit();
+ compare(dial1.pressed, false);
+ compare(dial1.value, dial1.position);
+ compare(dial2.pressed, false);
+ compare(dial2.value, dial2.position);
+ }
+
+ property Component focusTest: Component {
+ FocusScope {
+ signal receivedKeyPress
+
+ Component.onCompleted: forceActiveFocus()
+ anchors.fill: parent
+ Keys.onPressed: receivedKeyPress()
+ }
+ }
+
+ SignalSpy {
+ id: parentEventSpy
+ }
+
+ function test_keyboardNavigation() {
+ var dial = createTemporaryObject(dialComponent, testCase);
+ verify(dial);
+
+ var focusScope = createTemporaryObject(focusTest, testCase);
+ verify(focusScope);
+
+ var moveCount = 0;
+
+ // Tests that we've accepted events that we're interested in.
+ parentEventSpy.target = focusScope;
+ parentEventSpy.signalName = "receivedKeyPress";
+
+ var moveSpy = createTemporaryObject(signalSpy, testCase, {target: dial, signalName: "moved"});
+ verify(moveSpy.valid);
+
+ dial.parent = focusScope;
+ compare(dial.activeFocusOnTab, true);
+ compare(dial.value, 0);
+
+ dial.focus = true;
+ compare(dial.activeFocus, true);
+ dial.stepSize = 0.1;
+
+ keyClick(Qt.Key_Left);
+ compare(parentEventSpy.count, 0);
+ compare(moveSpy.count, moveCount);
+ compare(dial.value, 0);
+
+ var oldValue = 0.0;
+ var keyPairs = [[Qt.Key_Left, Qt.Key_Right], [Qt.Key_Down, Qt.Key_Up]];
+ for (var keyPairIndex = 0; keyPairIndex < 2; ++keyPairIndex) {
+ for (var i = 1; i <= 10; ++i) {
+ oldValue = dial.value;
+ keyClick(keyPairs[keyPairIndex][1]);
+ compare(parentEventSpy.count, 0);
+ if (oldValue !== dial.value)
+ compare(moveSpy.count, ++moveCount);
+ compare(dial.value, dial.stepSize * i);
+ }
+
+ compare(dial.value, dial.to);
+
+ for (i = 10; i > 0; --i) {
+ oldValue = dial.value;
+ keyClick(keyPairs[keyPairIndex][0]);
+ compare(parentEventSpy.count, 0);
+ if (oldValue !== dial.value)
+ compare(moveSpy.count, ++moveCount);
+ compare(dial.value, dial.stepSize * (i - 1));
+ }
+ }
+
+ dial.value = 0.5;
+
+ keyClick(Qt.Key_Home);
+ compare(parentEventSpy.count, 0);
+ compare(moveSpy.count, ++moveCount);
+ compare(dial.value, dial.from);
+
+ keyClick(Qt.Key_Home);
+ compare(parentEventSpy.count, 0);
+ compare(moveSpy.count, moveCount);
+ compare(dial.value, dial.from);
+
+ keyClick(Qt.Key_End);
+ compare(parentEventSpy.count, 0);
+ compare(moveSpy.count, ++moveCount);
+ compare(dial.value, dial.to);
+
+ keyClick(Qt.Key_End);
+ compare(parentEventSpy.count, 0);
+ compare(moveSpy.count, moveCount);
+ compare(dial.value, dial.to);
+ }
+
+ function test_snapMode_data(immediate) {
+ return [
+ { tag: "NoSnap", snapMode: Dial.NoSnap, from: 0, to: 2, values: [0, 0, 1], positions: [0, 0.5, 0.5] },
+ { tag: "SnapAlways (0..2)", snapMode: Dial.SnapAlways, from: 0, to: 2, values: [0.0, 0.0, 1.0], positions: [0.0, 0.5, 0.5] },
+ { tag: "SnapAlways (1..3)", snapMode: Dial.SnapAlways, from: 1, to: 3, values: [1.0, 1.0, 2.0], positions: [0.0, 0.5, 0.5] },
+ { tag: "SnapAlways (-1..1)", snapMode: Dial.SnapAlways, from: -1, to: 1, values: [0.0, 0.0, 0.0], positions: [0.5, 0.5, 0.5] },
+ { tag: "SnapAlways (1..-1)", snapMode: Dial.SnapAlways, from: 1, to: -1, values: [1.0, 1.0, 0.0], positions: [0.0, 0.5, 0.5] },
+ { tag: "SnapOnRelease (0..2)", snapMode: Dial.SnapOnRelease, from: 0, to: 2, values: [0.0, 0.0, 1.0], positions: [0.0, 0.5, 0.5] },
+ { tag: "SnapOnRelease (1..3)", snapMode: Dial.SnapOnRelease, from: 1, to: 3, values: [1.0, 1.0, 2.0], positions: [0.0, 0.5, 0.5] },
+ { tag: "SnapOnRelease (-1..1)", snapMode: Dial.SnapOnRelease, from: -1, to: 1, values: [0.0, 0.0, 0.0], positions: [immediate ? 0.0 : 0.5, 0.5, 0.5] },
+ { tag: "SnapOnRelease (1..-1)", snapMode: Dial.SnapOnRelease, from: 1, to: -1, values: [1.0, 1.0, 0.0], positions: [0.0, 0.5, 0.5] }
+ ]
+ }
+
+ function test_snapMode_mouse_data() {
+ return test_snapMode_data(true)
+ }
+
+ function test_snapMode_mouse(data) {
+ var dial = createTemporaryObject(dialComponent, testCase, {live: false});
+ verify(dial);
+
+ dial.snapMode = data.snapMode;
+ dial.from = data.from;
+ dial.to = data.to;
+ dial.stepSize = 0.2;
+
+ var fuzz = 0.055;
+
+ mousePress(dial, dial.width * 0.25, dial.height * 0.75);
+ fuzzyCompare(dial.value, data.values[0], fuzz);
+ fuzzyCompare(dial.position, data.positions[0], fuzz);
+
+ mouseMove(dial, dial.width * 0.5, dial.height * 0.25);
+ fuzzyCompare(dial.value, data.values[1], fuzz);
+ fuzzyCompare(dial.position, data.positions[1], fuzz);
+
+ mouseRelease(dial, dial.width * 0.5, dial.height * 0.25);
+ fuzzyCompare(dial.value, data.values[2], fuzz);
+ fuzzyCompare(dial.position, data.positions[2], fuzz);
+ }
+
+ function test_snapMode_touch_data() {
+ return test_snapMode_data(false)
+ }
+
+ function test_snapMode_touch(data) {
+ var dial = createTemporaryObject(dialComponent, testCase, {live: false});
+ verify(dial);
+
+ dial.snapMode = data.snapMode;
+ dial.from = data.from;
+ dial.to = data.to;
+ dial.stepSize = 0.2;
+
+ var fuzz = 0.05;
+
+ var touch = touchEvent(dial);
+ touch.press(0, dial, dial.width * 0.25, dial.height * 0.75).commit()
+ compare(dial.value, data.values[0]);
+ compare(dial.position, data.positions[0]);
+
+ touch.move(0, dial, dial.width * 0.5, dial.height * 0.25).commit();
+ fuzzyCompare(dial.value, data.values[1], fuzz);
+ fuzzyCompare(dial.position, data.positions[1], fuzz);
+
+ touch.release(0, dial, dial.width * 0.5, dial.height * 0.25).commit();
+ fuzzyCompare(dial.value, data.values[2], fuzz);
+ fuzzyCompare(dial.position, data.positions[2], fuzz);
+ }
+
+ function test_wheel_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, dx: 120, dy: 0 },
+ { tag: "vertical", orientation: Qt.Vertical, dx: 0, dy: 120 }
+ ]
+ }
+
+ function test_wheel(data) {
+ var control = createTemporaryObject(dialComponent, testCase, {wheelEnabled: true, orientation: data.orientation})
+ verify(control)
+
+ compare(control.value, 0.0)
+
+ mouseWheel(control, control.width / 2, control.height / 2, data.dx, data.dy)
+ compare(control.value, 0.1)
+ compare(control.position, 0.1)
+
+ control.stepSize = 0.2
+
+ mouseWheel(control, control.width / 2, control.height / 2, data.dx, data.dy)
+ compare(control.value, 0.3)
+ compare(control.position, 0.3)
+
+ control.stepSize = 10.0
+
+ mouseWheel(control, control.width / 2, control.height / 2, -data.dx, -data.dy)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+
+ control.to = 10.0
+ control.stepSize = 5.0
+
+ mouseWheel(control, control.width / 2, control.height / 2, data.dx, data.dy)
+ compare(control.value, 5.0)
+ compare(control.position, 0.5)
+
+ mouseWheel(control, control.width / 2, control.height / 2, 0.5 * data.dx, 0.5 * data.dy)
+ compare(control.value, 7.5)
+ compare(control.position, 0.75)
+
+ mouseWheel(control, control.width / 2, control.height / 2, -data.dx, -data.dy)
+ compare(control.value, 2.5)
+ compare(control.position, 0.25)
+ }
+
+ function test_nullHandle() {
+ var control = createTemporaryObject(dialComponent, testCase)
+ verify(control)
+
+ control.handle = null
+
+ mousePress(control)
+ verify(control.pressed, true)
+
+ mouseRelease(control)
+ compare(control.pressed, false)
+ }
+
+ function move(inputEventType, control, x, y) {
+ if (inputEventType === "mouseInput") {
+ mouseMove(control, x, y);
+ } else {
+ var touch = touchEvent(control);
+ touch.move(0, control, x, y).commit();
+ }
+ }
+
+ function press(inputEventType, control, x, y) {
+ if (inputEventType === "mouseInput") {
+ mousePress(control, x, y);
+ } else {
+ var touch = touchEvent(control);
+ touch.press(0, control, x, y).commit();
+ }
+ }
+
+ function release(inputEventType, control, x, y) {
+ if (inputEventType === "mouseInput") {
+ mouseRelease(control, x, y);
+ } else {
+ var touch = touchEvent(control);
+ touch.release(0, control, x, y).commit();
+ }
+ }
+
+ function test_horizontalAndVertical_data() {
+ var data = [
+ { eventType: "mouseInput", inputMode: Dial.Vertical, moveToX: 0.5, moveToY: 0.25, expectedPosition: 0.125 },
+ // Horizontal movement should have no effect on a vertical dial.
+ { eventType: "mouseInput", inputMode: Dial.Vertical, moveToX: 2.0, moveToY: 0.25, expectedPosition: 0.125 },
+ { eventType: "mouseInput", inputMode: Dial.Vertical, moveToX: 0.5, moveToY: 0.0, expectedPosition: 0.25 },
+ { eventType: "mouseInput", inputMode: Dial.Vertical, moveToX: 0.5, moveToY: -1.5, expectedPosition: 1.0 },
+ // Going above the drag area shouldn't make the position higher than 1.0.
+ { eventType: "mouseInput", inputMode: Dial.Vertical, moveToX: 0.5, moveToY: -2.0, expectedPosition: 1.0 },
+ // Try to decrease the position by moving the mouse down.
+ // The dial's position is 0 before the press event, so nothing should happen.
+ { eventType: "mouseInput", inputMode: Dial.Vertical, moveToX: 0.5, moveToY: 1.25, expectedPosition: 0.0 },
+
+ { eventType: "mouseInput", inputMode: Dial.Horizontal, moveToX: 0.75, moveToY: 0.5, expectedPosition: 0.125 },
+ // Vertical movement should have no effect on a horizontal dial.
+ { eventType: "mouseInput", inputMode: Dial.Horizontal, moveToX: 0.75, moveToY: 2.0, expectedPosition: 0.125 },
+ { eventType: "mouseInput", inputMode: Dial.Horizontal, moveToX: 1.0, moveToY: 0.5, expectedPosition: 0.25 },
+ { eventType: "mouseInput", inputMode: Dial.Horizontal, moveToX: 1.5, moveToY: 0.5, expectedPosition: 0.5 },
+ { eventType: "mouseInput", inputMode: Dial.Horizontal, moveToX: 2.5, moveToY: 0.5, expectedPosition: 1.0 },
+ // Going above the drag area shouldn't make the position higher than 1.0.
+ { eventType: "mouseInput", inputMode: Dial.Horizontal, moveToX: 2.525, moveToY: 0.5, expectedPosition: 1.0 },
+ // Try to decrease the position by moving the mouse to the left.
+ // The dial's position is 0 before the press event, so nothing should happen.
+ { eventType: "mouseInput", inputMode: Dial.Vertical, moveToX: 0.25, moveToY: 0.5, expectedPosition: 0.0 }
+ ];
+
+ // Do the same tests for touch by copying the mouse tests and adding them to the end of the array.
+ var mouseTestCount = data.length;
+ for (var i = mouseTestCount; i < mouseTestCount * 2; ++i) {
+ // Shallow-copy the object.
+ data[i] = JSON.parse(JSON.stringify(data[i - mouseTestCount]));
+ data[i].eventType = "touchInput";
+ }
+
+ for (i = 0; i < data.length; ++i) {
+ var row = data[i];
+ row.tag = "eventType=" + row.eventType + ", "
+ + "inputMode=" + (row.inputMode === Dial.Vertical ? "Vertical" : "Horizontal") + ", "
+ + "moveToX=" + row.moveToX + ", moveToY=" + row.moveToY + ", "
+ + "expectedPosition=" + row.expectedPosition;
+ }
+
+ return data;
+ }
+
+ function test_horizontalAndVertical(data) {
+ var control = createTemporaryObject(dialComponent, testCase, { inputMode: data.inputMode });
+ verify(control);
+
+ press(data.eventType, control);
+ compare(control.pressed, true);
+ // The position shouldn't change until the mouse has actually moved.
+ compare(control.position, 0);
+
+ move(data.eventType, control, control.width * data.moveToX, control.width * data.moveToY);
+ compare(control.position, data.expectedPosition);
+
+ release(data.eventType, control, control.width * data.moveToX, control.width * data.moveToY);
+ compare(control.pressed, false);
+ compare(control.position, data.expectedPosition);
+ }
+
+ function test_integerStepping() {
+ var dial = createTemporaryObject(dialComponent, testCase)
+ verify(dial)
+
+ dial.from = 1
+ dial.to = 8
+ dial.stepSize = 1
+
+ for (let i = 1; i < 8; ++i) {
+ // compare as strings to avoid a fuzzy compare; we want an exact match
+ compare(""+dial.value, ""+1)
+ keyClick(Qt.Key_Right)
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_dialog.qml b/tests/auto/quickcontrols2/controls/data/tst_dialog.qml
new file mode 100644
index 0000000000..b227d82e1b
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_dialog.qml
@@ -0,0 +1,494 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtTest
+import QtQuick.Controls
+import QtQuick.Templates as T
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Dialog"
+
+ Component {
+ id: dialog
+ Dialog { }
+ }
+
+ Component {
+ id: qtbug71444
+ Dialog {
+ header: null
+ footer: null
+ }
+ }
+
+ Component {
+ id: buttonBox
+ DialogButtonBox { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function init() {
+ tryCompare(testCase.Window.window, "active", true)
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(dialog, testCase)
+ verify(control)
+ verify(control.header)
+ verify(control.footer)
+ compare(control.standardButtons, 0)
+ }
+
+ function test_accept() {
+ var control = createTemporaryObject(dialog, testCase)
+
+ var openedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ control.open()
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+ verify(control.visible)
+
+ var acceptedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "accepted"})
+ verify(acceptedSpy.valid)
+
+ var closedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "closed"})
+ verify(closedSpy.valid)
+
+ control.accept()
+ compare(acceptedSpy.count, 1)
+ compare(control.result, Dialog.Accepted)
+
+ tryCompare(control, "visible", false)
+ compare(acceptedSpy.count, 1)
+ compare(closedSpy.count, 1)
+ }
+
+ function test_reject() {
+ var control = createTemporaryObject(dialog, testCase)
+
+ var openedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ control.open()
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+ verify(control.visible)
+
+ var rejectedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "rejected"})
+ verify(rejectedSpy.valid)
+
+ var closedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "closed"})
+ verify(closedSpy.valid)
+
+ control.reject()
+ compare(rejectedSpy.count, 1)
+ compare(control.result, Dialog.Rejected)
+
+ tryCompare(control, "visible", false)
+ compare(rejectedSpy.count, 1)
+ compare(closedSpy.count, 1)
+
+ // Check that rejected() is emitted when CloseOnEscape is triggered.
+ control.x = 10
+ control.y = 10
+ control.width = 100
+ control.height = 100
+ control.closePolicy = Popup.CloseOnEscape
+ control.open()
+ verify(control.visible)
+
+ keyPress(Qt.Key_Escape)
+ compare(rejectedSpy.count, 2)
+ tryCompare(control, "visible", false)
+ compare(rejectedSpy.count, 2)
+ compare(closedSpy.count, 2)
+
+ keyRelease(Qt.Key_Escape)
+ compare(rejectedSpy.count, 2)
+ compare(closedSpy.count, 2)
+
+ // Check that rejected() is emitted when CloseOnPressOutside is triggered.
+ control.closePolicy = Popup.CloseOnPressOutside
+ control.open()
+ verify(control.visible)
+
+ mousePress(testCase, 1, 1)
+ compare(rejectedSpy.count, 3)
+ tryCompare(control, "visible", false)
+ compare(rejectedSpy.count, 3)
+ compare(closedSpy.count, 3)
+
+ mouseRelease(testCase, 1, 1)
+ compare(rejectedSpy.count, 3)
+ compare(closedSpy.count, 3)
+
+ // Check that rejected() is emitted when CloseOnReleaseOutside is triggered.
+ // For this, we need to make the dialog modal, because the overlay won't accept
+ // the press event because it doesn't want to block the press.
+ control.modal = true
+ control.closePolicy = Popup.CloseOnReleaseOutside
+ control.open()
+ verify(control.visible)
+
+ mousePress(testCase, 1, 1)
+ compare(rejectedSpy.count, 3)
+ verify(control.visible)
+
+ mouseRelease(testCase, 1, 1)
+ compare(rejectedSpy.count, 4)
+ tryCompare(control, "visible", false)
+ compare(rejectedSpy.count, 4)
+ compare(closedSpy.count, 4)
+ }
+
+ function test_buttonBox_data() {
+ return [
+ { tag: "default" },
+ { tag: "custom", custom: true }
+ ]
+ }
+
+ function test_buttonBox(data) {
+ var control = createTemporaryObject(dialog, testCase)
+
+ if (data.custom)
+ control.footer = buttonBox.createObject(testCase)
+ control.standardButtons = Dialog.Ok | Dialog.Cancel
+ var box = control.footer
+ verify(box)
+ compare(box.standardButtons, Dialog.Ok | Dialog.Cancel)
+
+ var acceptedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "accepted"})
+ verify(acceptedSpy.valid)
+ box.accepted()
+ compare(acceptedSpy.count, 1)
+
+ var rejectedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "rejected"})
+ verify(rejectedSpy.valid)
+ box.rejected()
+ compare(rejectedSpy.count, 1)
+ }
+
+ function test_qtbug71444() {
+ var control = createTemporaryObject(qtbug71444, testCase)
+ verify(control)
+ }
+
+ function test_standardButtons() {
+ var control = createTemporaryObject(dialog, testCase)
+
+ control.standardButtons = Dialog.Ok
+
+ var box = control.footer ? control.footer : control.header
+ verify(box)
+ compare(box.count, 1)
+ var okButton = box.itemAt(0)
+ verify(okButton)
+ compare(okButton.text.toUpperCase(), "OK")
+
+ control.standardButtons = Dialog.Cancel
+ compare(box.count, 1)
+ var cancelButton = control.footer.itemAt(0)
+ verify(cancelButton)
+ compare(cancelButton.text.toUpperCase(), "CANCEL")
+
+ control.standardButtons = Dialog.Ok | Dialog.Cancel
+ compare(box.count, 2)
+ if (box.itemAt(0).text.toUpperCase() === "OK") {
+ okButton = box.itemAt(0)
+ cancelButton = box.itemAt(1)
+ } else {
+ okButton = box.itemAt(1)
+ cancelButton = box.itemAt(0)
+ }
+ verify(okButton)
+ verify(cancelButton)
+ compare(okButton.text.toUpperCase(), "OK")
+ compare(cancelButton.text.toUpperCase(), "CANCEL")
+
+ control.standardButtons = 0
+ compare(box.count, 0)
+ }
+
+ function test_layout() {
+ var control = createTemporaryObject(dialog, testCase, {width: 100, height: 100})
+ verify(control)
+
+ var openedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ control.open()
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+ verify(control.visible)
+
+ compare(control.width, 100)
+ compare(control.height, 100)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight)
+
+ control.header = buttonBox.createObject(control.contentItem)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight - control.header.height)
+
+ control.footer = buttonBox.createObject(control.contentItem)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight - control.header.height - control.footer.height)
+
+ control.topPadding = 9
+ control.leftPadding = 2
+ control.rightPadding = 6
+ control.bottomPadding = 7
+
+ compare(control.header.x, 0)
+ compare(control.header.y, 0)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+
+ compare(control.footer.x, 0)
+ compare(control.footer.y, control.height - control.footer.height)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding + control.header.height)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight - control.header.height - control.footer.height)
+
+ control.header.visible = false
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight - control.footer.height)
+
+ control.footer.visible = false
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight)
+
+ control.contentItem.implicitWidth = 50
+ control.contentItem.implicitHeight = 60
+ compare(control.implicitWidth, control.contentItem.implicitWidth + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentItem.implicitHeight + control.topPadding + control.bottomPadding)
+
+ control.header.visible = true
+ compare(control.implicitHeight, control.contentItem.implicitHeight + control.topPadding + control.bottomPadding
+ + control.header.implicitHeight)
+
+ control.footer.visible = true
+ compare(control.implicitHeight, control.contentItem.implicitHeight + control.topPadding + control.bottomPadding
+ + control.header.implicitHeight + control.footer.implicitHeight)
+
+ control.header.implicitWidth = 150
+ compare(control.implicitWidth, control.header.implicitWidth)
+
+ control.footer.implicitWidth = 160
+ compare(control.implicitWidth, control.footer.implicitWidth)
+ }
+
+ function test_spacing_data() {
+ return [
+ { tag: "content", header: false, content: true, footer: false },
+ { tag: "header,content", header: true, content: true, footer: false },
+ { tag: "content,footer", header: false, content: true, footer: true },
+ { tag: "header,content,footer", header: true, content: true, footer: true },
+ { tag: "header,footer", header: true, content: false, footer: true },
+ { tag: "header", header: true, content: false, footer: false },
+ { tag: "footer", header: false, content: false, footer: true },
+ ]
+ }
+
+ function test_spacing(data) {
+ var control = createTemporaryObject(dialog, testCase, {spacing: 20, width: 100, height: 100})
+ verify(control)
+
+ var openedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ control.open()
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+ verify(control.visible)
+
+ control.contentItem.visible = data.content
+ control.header = buttonBox.createObject(control.contentItem, {visible: data.header})
+ control.footer = buttonBox.createObject(control.contentItem, {visible: data.footer})
+
+ compare(control.header.x, 0)
+ compare(control.header.y, 0)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+
+ compare(control.footer.x, 0)
+ compare(control.footer.y, control.height - control.footer.height)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding + (data.header ? control.header.height + control.spacing : 0))
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight
+ - (data.header ? control.header.height + control.spacing : 0)
+ - (data.footer ? control.footer.height + control.spacing : 0))
+ }
+
+ function test_signals_data() {
+ return [
+ { tag: "Ok", standardButton: Dialog.Ok, signalName: "accepted" },
+ { tag: "Open", standardButton: Dialog.Open, signalName: "accepted" },
+ { tag: "Save", standardButton: Dialog.Save, signalName: "accepted" },
+ { tag: "Cancel", standardButton: Dialog.Cancel, signalName: "rejected" },
+ { tag: "Close", standardButton: Dialog.Close, signalName: "rejected" },
+ { tag: "Discard", standardButton: Dialog.Discard, signalName: "discarded" },
+ { tag: "Apply", standardButton: Dialog.Apply, signalName: "applied" },
+ { tag: "Reset", standardButton: Dialog.Reset, signalName: "reset" },
+ { tag: "RestoreDefaults", standardButton: Dialog.RestoreDefaults, signalName: "reset" },
+ { tag: "Help", standardButton: Dialog.Help, signalName: "helpRequested" },
+ { tag: "SaveAll", standardButton: Dialog.SaveAll, signalName: "accepted" },
+ { tag: "Yes", standardButton: Dialog.Yes, signalName: "accepted" },
+ { tag: "YesToAll", standardButton: Dialog.YesToAll, signalName: "accepted" },
+ { tag: "No", standardButton: Dialog.No, signalName: "rejected" },
+ { tag: "NoToAll", standardButton: Dialog.NoToAll, signalName: "rejected" },
+ { tag: "Abort", standardButton: Dialog.Abort, signalName: "rejected" },
+ { tag: "Retry", standardButton: Dialog.Retry, signalName: "accepted" },
+ { tag: "Ignore", standardButton: Dialog.Ignore, signalName: "accepted" }
+ ]
+ }
+
+ function test_signals(data) {
+ var control = createTemporaryObject(dialog, testCase)
+ verify(control)
+
+ control.standardButtons = data.standardButton
+ var button = control.standardButton(data.standardButton)
+ verify(button)
+
+ var buttonSpy = signalSpy.createObject(control.contentItem, {target: control, signalName: data.signalName})
+ verify(buttonSpy.valid)
+
+ button.clicked()
+ compare(buttonSpy.count, 1)
+ }
+
+ Component {
+ id: qtbug85884
+ ApplicationWindow {
+ property alias focusItemActiveFocus: item.activeFocus
+ property alias focusDialogVisible: dialog.visible
+ function closeAndOpen() {
+ dialog.close()
+ dialog.open()
+ dialog.close()
+ }
+ visible: true
+ Item {
+ id: item
+ focus: true
+ }
+ Dialog {
+ id: dialog
+ focus: true
+ visible: false
+ onActiveFocusChanged: {
+ if (!activeFocus)
+ visible = false
+ }
+ enter: Transition {
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 10 }
+ }
+ exit: Transition {
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 10 }
+ }
+ }
+ }
+ }
+
+ function test_focusLeavingDialog(data) {
+ if (Qt.platform.pluginName === "offscreen")
+ skip("QTBUG-89909")
+
+ var window = createTemporaryObject(qtbug85884, testCase)
+ verify(window)
+ tryCompare(window, "focusItemActiveFocus", true)
+
+ window.focusDialogVisible = true
+ tryCompare(window, "focusDialogVisible", true)
+ tryCompare(window, "focusItemActiveFocus", false)
+
+ window.focusDialogVisible = false
+ tryCompare(window, "focusDialogVisible", false)
+ tryCompare(window, "focusItemActiveFocus", true)
+
+ window.focusDialogVisible = true
+ tryCompare(window, "focusDialogVisible", true)
+ tryCompare(window, "focusItemActiveFocus", false)
+ window.closeAndOpen()
+ tryCompare(window, "focusDialogVisible", false)
+ tryCompare(window, "focusItemActiveFocus", true)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_dialogbuttonbox.qml b/tests/auto/quickcontrols2/controls/data/tst_dialogbuttonbox.qml
new file mode 100644
index 0000000000..57216ed11c
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_dialogbuttonbox.qml
@@ -0,0 +1,613 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 600
+ height: 400
+ visible: true
+ when: windowShown
+ name: "DialogButtonBox"
+
+ Component {
+ id: buttonBox
+ DialogButtonBox { }
+ }
+
+ Component {
+ id: button
+ Button { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(buttonBox, testCase)
+ verify(control)
+ compare(control.count, 0)
+ verify(control.delegate)
+ compare(control.standardButtons, 0)
+ }
+
+ function test_standardButtons() {
+ var control = createTemporaryObject(buttonBox, testCase)
+ verify(control)
+ compare(control.count, 0)
+
+ control.standardButtons = DialogButtonBox.Ok
+ compare(control.count, 1)
+ var okButton = control.itemAt(0)
+ verify(okButton)
+ compare(okButton.text.toUpperCase(), "OK")
+
+ control.standardButtons = DialogButtonBox.Cancel
+ compare(control.count, 1)
+ var cancelButton = control.itemAt(0)
+ verify(cancelButton)
+ compare(cancelButton.text.toUpperCase(), "CANCEL")
+
+ control.standardButtons = DialogButtonBox.Ok | DialogButtonBox.Cancel
+ compare(control.count, 2)
+ if (control.itemAt(0).text.toUpperCase() === "OK") {
+ okButton = control.itemAt(0)
+ cancelButton = control.itemAt(1)
+ } else {
+ okButton = control.itemAt(1)
+ cancelButton = control.itemAt(0)
+ }
+ verify(okButton)
+ verify(cancelButton)
+ compare(okButton.text.toUpperCase(), "OK")
+ compare(cancelButton.text.toUpperCase(), "CANCEL")
+ compare(control.standardButton(DialogButtonBox.Ok), okButton)
+ compare(control.standardButton(DialogButtonBox.Cancel), cancelButton)
+
+ control.standardButtons = 0
+ compare(control.count, 0)
+
+ compare(control.standardButton(DialogButtonBox.Ok), null)
+ compare(control.standardButton(DialogButtonBox.Cancel), null)
+ }
+
+ function test_attached() {
+ var control = createTemporaryObject(buttonBox, testCase)
+ verify(control)
+
+ control.standardButtons = DialogButtonBox.Ok
+ var okButton = control.itemAt(0)
+ compare(okButton.DialogButtonBox.buttonBox, control)
+ compare(okButton.DialogButtonBox.buttonRole, DialogButtonBox.AcceptRole)
+
+ var saveButton = button.createObject(control, {text: "Save"})
+ compare(saveButton.DialogButtonBox.buttonBox, control)
+ compare(saveButton.DialogButtonBox.buttonRole, DialogButtonBox.InvalidRole)
+ saveButton.DialogButtonBox.buttonRole = DialogButtonBox.AcceptRole
+ compare(saveButton.DialogButtonBox.buttonRole, DialogButtonBox.AcceptRole)
+
+ var closeButton = createTemporaryObject(button, null, {text: "Save"})
+ compare(closeButton.DialogButtonBox.buttonBox, null)
+ compare(closeButton.DialogButtonBox.buttonRole, DialogButtonBox.InvalidRole)
+ closeButton.DialogButtonBox.buttonRole = DialogButtonBox.DestructiveRole
+ compare(closeButton.DialogButtonBox.buttonRole, DialogButtonBox.DestructiveRole)
+ control.addItem(closeButton)
+ compare(closeButton.DialogButtonBox.buttonBox, control)
+
+ control.contentModel.clear()
+ compare(okButton.DialogButtonBox.buttonBox, null)
+ compare(saveButton.DialogButtonBox.buttonBox, null)
+ compare(closeButton.DialogButtonBox.buttonBox, null)
+ }
+
+ function test_signals_data() {
+ return [
+ { tag: "Ok", standardButton: DialogButtonBox.Ok, buttonRole: DialogButtonBox.AcceptRole, signalName: "accepted" },
+ { tag: "Open", standardButton: DialogButtonBox.Open, buttonRole: DialogButtonBox.AcceptRole, signalName: "accepted" },
+ { tag: "Save", standardButton: DialogButtonBox.Save, buttonRole: DialogButtonBox.AcceptRole, signalName: "accepted" },
+ { tag: "Cancel", standardButton: DialogButtonBox.Cancel, buttonRole: DialogButtonBox.RejectRole, signalName: "rejected" },
+ { tag: "Close", standardButton: DialogButtonBox.Close, buttonRole: DialogButtonBox.RejectRole, signalName: "rejected" },
+ { tag: "Discard", standardButton: DialogButtonBox.Discard, buttonRole: DialogButtonBox.DestructiveRole, signalName: "discarded" },
+ { tag: "Apply", standardButton: DialogButtonBox.Apply, buttonRole: DialogButtonBox.ApplyRole, signalName: "applied" },
+ { tag: "Reset", standardButton: DialogButtonBox.Reset, buttonRole: DialogButtonBox.ResetRole, signalName: "reset" },
+ { tag: "RestoreDefaults", standardButton: DialogButtonBox.RestoreDefaults, buttonRole: DialogButtonBox.ResetRole, signalName: "reset" },
+ { tag: "Help", standardButton: DialogButtonBox.Help, buttonRole: DialogButtonBox.HelpRole, signalName: "helpRequested" },
+ { tag: "SaveAll", standardButton: DialogButtonBox.SaveAll, buttonRole: DialogButtonBox.AcceptRole, signalName: "accepted" },
+ { tag: "Yes", standardButton: DialogButtonBox.Yes, buttonRole: DialogButtonBox.YesRole, signalName: "accepted" },
+ { tag: "YesToAll", standardButton: DialogButtonBox.YesToAll, buttonRole: DialogButtonBox.YesRole, signalName: "accepted" },
+ { tag: "No", standardButton: DialogButtonBox.No, buttonRole: DialogButtonBox.NoRole, signalName: "rejected" },
+ { tag: "NoToAll", standardButton: DialogButtonBox.NoToAll, buttonRole: DialogButtonBox.NoRole, signalName: "rejected" },
+ { tag: "Abort", standardButton: DialogButtonBox.Abort, buttonRole: DialogButtonBox.RejectRole, signalName: "rejected" },
+ { tag: "Retry", standardButton: DialogButtonBox.Retry, buttonRole: DialogButtonBox.AcceptRole, signalName: "accepted" },
+ { tag: "Ignore", standardButton: DialogButtonBox.Ignore, buttonRole: DialogButtonBox.AcceptRole, signalName: "accepted" }
+ ]
+ }
+
+ function test_signals(data) {
+ var control = createTemporaryObject(buttonBox, testCase)
+ verify(control)
+
+ control.standardButtons = data.standardButton
+ compare(control.count, 1)
+ var button = control.itemAt(0)
+ verify(button)
+ compare(button.DialogButtonBox.buttonRole, data.buttonRole)
+
+ var clickedSpy = signalSpy.createObject(control, {target: control, signalName: "clicked"})
+ verify(clickedSpy.valid)
+ var roleSpy = signalSpy.createObject(control, {target: control, signalName: data.signalName})
+ verify(roleSpy.valid)
+
+ button.clicked()
+ compare(clickedSpy.count, 1)
+ compare(clickedSpy.signalArguments[0][0], button)
+ compare(roleSpy.count, 1)
+ }
+
+ function test_buttonLayout_data() {
+ return [
+ { tag: "WinLayout", buttonLayout: DialogButtonBox.WinLayout, button1Role: DialogButtonBox.AcceptRole, button2Role: DialogButtonBox.RejectRole },
+ { tag: "MacLayout", buttonLayout: DialogButtonBox.MacLayout, button1Role: DialogButtonBox.RejectRole, button2Role: DialogButtonBox.AcceptRole },
+ { tag: "KdeLayout", buttonLayout: DialogButtonBox.KdeLayout, button1Role: DialogButtonBox.AcceptRole, button2Role: DialogButtonBox.RejectRole },
+ { tag: "GnomeLayout", buttonLayout: DialogButtonBox.GnomeLayout, button1Role: DialogButtonBox.RejectRole, button2Role: DialogButtonBox.AcceptRole },
+ { tag: "AndroidLayout", buttonLayout: DialogButtonBox.AndroidLayout, button1Role: DialogButtonBox.RejectRole, button2Role: DialogButtonBox.AcceptRole }
+ ]
+ }
+
+ function test_buttonLayout(data) {
+ var control = createTemporaryObject(buttonBox, testCase, {buttonLayout: data.buttonLayout, standardButtons: DialogButtonBox.Ok|DialogButtonBox.Cancel})
+ verify(control)
+
+ compare(control.count, 2)
+
+ var button1 = control.itemAt(0)
+ verify(button1)
+ compare(button1.DialogButtonBox.buttonRole, data.button1Role)
+
+ var button2 = control.itemAt(1)
+ verify(button2)
+ compare(button2.DialogButtonBox.buttonRole, data.button2Role)
+ }
+
+ function test_implicitSize_data() {
+ return [
+ { tag: "Ok", standardButtons: DialogButtonBox.Ok },
+ { tag: "Yes|No", standardButtons: DialogButtonBox.Yes | DialogButtonBox.No }
+ ]
+ }
+
+ // QTBUG-59719
+ function test_implicitSize(data) {
+ var control = createTemporaryObject(buttonBox, testCase, {standardButtons: data.standardButtons})
+ verify(control)
+
+ var listView = control.contentItem
+ verify(listView && listView.hasOwnProperty("contentWidth"))
+ waitForRendering(listView)
+
+ var implicitContentWidth = control.leftPadding + control.rightPadding
+ for (var i = 0; i < listView.contentItem.children.length; ++i) {
+ var button = listView.contentItem.children[i]
+ if (!button.hasOwnProperty("text"))
+ continue
+ implicitContentWidth += button.implicitWidth
+ }
+
+ verify(implicitContentWidth > control.leftPadding + control.rightPadding)
+ verify(control.implicitWidth >= implicitContentWidth, qsTr("implicit width (%1) is less than content width (%2)").arg(control.implicitWidth).arg(implicitContentWidth))
+ }
+
+ Component {
+ id: okCancelBox
+ DialogButtonBox {
+ Button {
+ text: qsTr("OK")
+ }
+ Button {
+ text: qsTr("Cancel")
+ }
+ }
+ }
+
+ function test_buttonSize() {
+ var control = createTemporaryObject(okCancelBox, testCase)
+ verify(control)
+
+ var okButton = control.itemAt(0)
+ verify(okButton)
+ verify(okButton.width > 0)
+
+ var cancelButton = control.itemAt(1)
+ verify(cancelButton)
+ verify(cancelButton.width > 0)
+
+ compare(okButton.width + cancelButton.width, control.availableWidth - control.spacing)
+ }
+
+ function test_oneButtonInFixedWidthBox() {
+ var control = createTemporaryObject(buttonBox, testCase,
+ { width: 400, standardButtons: Dialog.Close })
+ verify(control)
+
+ var listView = control.contentItem
+ waitForRendering(listView)
+
+ var button = control.itemAt(0)
+ verify(button)
+
+ // The button should never go outside of the box.
+ tryVerify(function() { return button.mapToItem(control, 0, 0).x >= 0 },
+ 1000, "Expected left edge of button to be within left edge of DialogButtonBox (i.e. greater than or equal to 0)" +
+ ", but it's " + button.mapToItem(control, 0, 0).x)
+ tryVerify(function() { return button.mapToItem(control, 0, 0).x + button.width <= control.width },
+ 1000, "Expected right edge of button to be within right edge of DialogButtonBox (i.e. less than or equal to " +
+ control.width + "), but it's " + (button.mapToItem(control, 0, 0).x + button.width))
+ }
+
+ Component {
+ id: dialogComponent
+ // Based on the Basic style, where a single button fills
+ // half the dialog's width and is aligned to the right.
+ Dialog {
+ id: control
+ standardButtons: Dialog.Ok
+ visible: true
+
+ footer: DialogButtonBox {
+ id: box
+ visible: count > 0
+ alignment: count === 1 ? Qt.AlignRight : undefined
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ (count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+ contentWidth: contentItem.contentWidth
+
+ delegate: Button {
+ width: box.count === 1 ? box.availableWidth / 2 : undefined
+ }
+ }
+ }
+ }
+
+ // QTBUG-73860
+ function test_oneButtonAlignedRightInImplicitWidthBox() {
+ var dialog = createTemporaryObject(dialogComponent, testCase)
+ verify(dialog)
+
+ var box = dialog.footer
+ var listView = box.contentItem
+ waitForRendering(listView)
+
+ var button = box.itemAt(0)
+ verify(button)
+
+ // The button should never go outside of the box.
+ tryVerify(function() { return button.mapToItem(box, 0, 0).x >= 0 },
+ 1000, "Expected left edge of button to be within left edge of DialogButtonBox (i.e. greater than or equal to 0)" +
+ ", but it's " + button.mapToItem(box, 0, 0).x)
+ tryVerify(function() { return button.mapToItem(box, 0, 0).x + button.width <= box.width },
+ 1000, "Expected right edge of button to be within right edge of DialogButtonBox (i.e. less than or equal to " +
+ box.width + "), but it's " + (button.mapToItem(box, 0, 0).x + button.width))
+ compare(box.width, dialog.width)
+ // There's a single button and we align it to the right.
+ compare(box.contentItem.width, button.width)
+ compare(box.contentItem.x, box.width - box.rightPadding - box.contentItem.width)
+ }
+
+ Component {
+ id: customButtonBox
+
+ DialogButtonBox {
+ objectName: "customButtonBox"
+ alignment: Qt.AlignRight
+
+ property alias okButton: okButton
+
+ Button {
+ id: okButton
+ text: "OK"
+
+ DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
+ }
+ }
+ }
+
+ Component {
+ id: customButtonBoxTwoButtons
+
+ DialogButtonBox {
+ objectName: "customButtonBoxTwoButtons"
+ alignment: Qt.AlignRight
+
+ property alias okButton: okButton
+
+ Button {
+ id: okButton
+ text: "OK"
+
+ DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
+ }
+ Button {
+ text: "Cancel"
+
+ DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
+ }
+ }
+ }
+
+ function test_changeCustomButtonText_data() {
+ return [
+ { tag: "oneButton", component: customButtonBox },
+ { tag: "twoButtons", component: customButtonBoxTwoButtons },
+ ]
+ }
+
+ // QTBUG-72886
+ function test_changeCustomButtonText(data) {
+ var control = createTemporaryObject(data.component, testCase, {})
+ verify(control)
+
+ var listView = control.contentItem
+ waitForRendering(listView)
+
+ var button = control.okButton
+ verify(button)
+ button.text = "some longer text";
+
+ // The button should never go outside of the box.
+ tryVerify(function() { return button.mapToItem(control, 0, 0).x >= 0 },
+ 1000, "Expected left edge of button to be within left edge of DialogButtonBox (i.e. greater than or equal to 0)" +
+ ", but it's " + button.mapToItem(control, 0, 0).x)
+ tryVerify(function() { return button.mapToItem(control, 0, 0).x + button.width <= control.width },
+ 1000, "Expected right edge of button to be within right edge of DialogButtonBox (i.e. less than or equal to " +
+ control.width + "), but it's " + (button.mapToItem(control, 0, 0).x + button.width))
+ }
+
+ Component {
+ id: customButtonBoxInDialog
+
+ Dialog {
+ width: 300
+ visible: true
+
+ footer: DialogButtonBox {
+ objectName: "customButtonBoxInDialog"
+ alignment: Qt.AlignRight
+
+ property alias okButton: okButton
+
+ Button {
+ id: okButton
+ text: "OK"
+
+ DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
+ }
+ }
+ }
+ }
+
+ Component {
+ id: customButtonBoxTwoButtonsInDialog
+
+ Dialog {
+ width: 300
+ visible: true
+
+ footer: DialogButtonBox {
+ objectName: "customButtonBoxTwoButtonsInDialog"
+ alignment: Qt.AlignRight
+
+ property alias okButton: okButton
+
+ Button {
+ id: okButton
+ text: "OK"
+
+ DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
+ }
+ Button {
+ text: "Cancel"
+
+ DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
+ }
+ }
+ }
+ }
+
+ function test_changeCustomButtonImplicitWidth_data() {
+ return [
+ { tag: "oneButton", component: customButtonBoxInDialog },
+ { tag: "twoButtons", component: customButtonBoxTwoButtonsInDialog },
+ ]
+ }
+
+ // QTBUG-102558
+ function test_changeCustomButtonImplicitWidth(data) {
+ let dialog = createTemporaryObject(data.component, testCase, {})
+ verify(dialog)
+
+ let control = dialog.footer
+ verify(control)
+
+ let listView = control.contentItem
+ waitForRendering(listView)
+
+ let button = control.okButton
+ verify(button)
+ button.implicitWidth *= 1.5
+
+ // The button should never go outside of the box.
+ tryVerify(function() { return button.mapToItem(control, 0, 0).x >= 0 },
+ 1000, "Expected left edge of button to be within left edge of DialogButtonBox (i.e. greater than or equal to 0)" +
+ ", but it's " + button.mapToItem(control, 0, 0).x)
+ tryVerify(function() { return button.mapToItem(control, 0, 0).x + button.width <= control.width },
+ 1000, "Expected right edge of button to be within right edge of DialogButtonBox (i.e. less than or equal to " +
+ control.width + "), but it's " + (button.mapToItem(control, 0, 0).x + button.width))
+ }
+
+ Component {
+ id: noRolesDialog
+
+ Dialog {
+ footer: DialogButtonBox {
+ Button { text: "A" }
+ Button { text: "B" }
+ Button { text: "C" }
+ }
+ }
+ }
+
+ function test_orderWithNoRoles() {
+ for (let i = 0; i < 10; ++i) {
+ let control = createTemporaryObject(noRolesDialog, testCase)
+ verify(control)
+
+ control.open()
+ tryCompare(control, "opened", true)
+ let footer = control.footer
+ verify(footer)
+ waitForItemPolished(footer.contentItem)
+ compare(footer.itemAt(0).text, "A")
+ compare(footer.itemAt(1).text, "B")
+ compare(footer.itemAt(2).text, "C")
+
+ control.destroy()
+ }
+ }
+
+ Component {
+ id: contentItemDeletionOrder1
+
+ Item {
+ objectName: "parentItem"
+
+ Item {
+ id: item
+ objectName: "contentItem"
+ }
+ DialogButtonBox {
+ objectName: "control"
+ contentItem: item
+ }
+ }
+ }
+
+ Component {
+ id: contentItemDeletionOrder2
+
+ Item {
+ objectName: "parentItem"
+
+ DialogButtonBox {
+ objectName: "control"
+ contentItem: item
+ }
+ Item {
+ id: item
+ objectName: "contentItem"
+ }
+ }
+ }
+
+ function test_contentItemDeletionOrder() {
+ var control1 = createTemporaryObject(contentItemDeletionOrder1, testCase)
+ verify(control1)
+ var control2 = createTemporaryObject(contentItemDeletionOrder2, testCase)
+ verify(control2)
+ }
+
+ Component {
+ id: backgroundDeletionOrder1
+
+ Item {
+ objectName: "parentItem"
+
+ Item {
+ id: item
+ objectName: "backgroundItem"
+ }
+ DialogButtonBox {
+ objectName: "control"
+ background: item
+ }
+ }
+ }
+
+ Component {
+ id: backgroundDeletionOrder2
+
+ Item {
+ objectName: "parentItem"
+
+ DialogButtonBox {
+ objectName: "control"
+ background: item
+ }
+ Item {
+ id: item
+ objectName: "backgroundItem"
+ }
+ }
+ }
+
+ function test_backgroundDeletionOrder() {
+ var control1 = createTemporaryObject(backgroundDeletionOrder1, testCase)
+ verify(control1)
+ var control2 = createTemporaryObject(backgroundDeletionOrder2, testCase)
+ verify(control2)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_frame.qml b/tests/auto/quickcontrols2/controls/data/tst_frame.qml
new file mode 100644
index 0000000000..95c691441f
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_frame.qml
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Frame"
+
+ Component {
+ id: frame
+ Frame { }
+ }
+
+ Component {
+ id: oneChildFrame
+ Frame {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ Component {
+ id: twoChildrenFrame
+ Frame {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ Item {
+ implicitWidth: 200
+ implicitHeight: 60
+ }
+ }
+ }
+
+ Component {
+ id: contentFrame
+ Frame {
+ contentItem: Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ function test_empty() {
+ var control = createTemporaryObject(frame, testCase)
+ verify(control)
+
+ verify(control.contentItem)
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ }
+
+ function test_oneChild() {
+ var control = createTemporaryObject(oneChildFrame, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ verify(control.implicitWidth > 100)
+ verify(control.implicitHeight > 30)
+ }
+
+ function test_twoChildren() {
+ var control = createTemporaryObject(twoChildrenFrame, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ verify(control.implicitWidth > 0)
+ verify(control.implicitHeight > 0)
+ }
+
+ function test_contentItem() {
+ var control = createTemporaryObject(contentFrame, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ verify(control.implicitWidth > 100)
+ verify(control.implicitHeight > 30)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_groupbox.qml b/tests/auto/quickcontrols2/controls/data/tst_groupbox.qml
new file mode 100644
index 0000000000..ed7148978a
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_groupbox.qml
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "GroupBox"
+
+ Component {
+ id: groupBox
+ GroupBox { }
+ }
+
+ Component {
+ id: oneChildBox
+ GroupBox {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ Component {
+ id: twoChildrenBox
+ GroupBox {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ Item {
+ implicitWidth: 200
+ implicitHeight: 60
+ }
+ }
+ }
+
+ Component {
+ id: contentBox
+ GroupBox {
+ contentItem: Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ function test_empty() {
+ var control = createTemporaryObject(groupBox, testCase)
+ verify(control)
+
+ verify(control.contentItem)
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ }
+
+ function test_oneChild() {
+ var control = createTemporaryObject(oneChildBox, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ verify(control.implicitWidth > 100)
+ verify(control.implicitHeight > 30)
+ }
+
+ function test_twoChildren() {
+ var control = createTemporaryObject(twoChildrenBox, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ verify(control.implicitWidth > 0)
+ verify(control.implicitHeight > 0)
+ }
+
+ function test_contentItem() {
+ var control = createTemporaryObject(contentBox, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ verify(control.implicitWidth > 100)
+ verify(control.implicitHeight > 30)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_itemdelegate.qml b/tests/auto/quickcontrols2/controls/data/tst_itemdelegate.qml
new file mode 100644
index 0000000000..7fa4e9e493
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_itemdelegate.qml
@@ -0,0 +1,162 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "ItemDelegate"
+
+ Component {
+ id: itemDelegate
+ ItemDelegate { }
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(itemDelegate, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ function test_highlighted() {
+ var control = createTemporaryObject(itemDelegate, testCase)
+ verify(control)
+ verify(!control.highlighted)
+
+ control.highlighted = true
+ verify(control.highlighted)
+ }
+
+ function test_spacing() {
+ var control = createTemporaryObject(itemDelegate, testCase, { text: "Some long, long, long text" })
+ verify(control)
+ verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
+
+ var textLabel = findChild(control.contentItem, "label")
+ verify(textLabel)
+
+ // The implicitWidth of the IconLabel that all buttons use as their contentItem
+ // should be equal to the implicitWidth of the Text while no icon is set.
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // That means that spacing shouldn't affect it.
+ control.spacing += 100
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // The implicitWidth of the ItemDelegate itself should, therefore, also never include spacing while no icon is set.
+ compare(control.implicitWidth, textLabel.implicitWidth + control.leftPadding + control.rightPadding)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: ItemDelegate.IconOnly },
+ { "tag": "TextOnly", display: ItemDelegate.TextOnly },
+ { "tag": "TextUnderIcon", display: ItemDelegate.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: ItemDelegate.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: ItemDelegate.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: ItemDelegate.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: ItemDelegate.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: ItemDelegate.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(itemDelegate, testCase, {
+ text: "ItemDelegate",
+ display: data.display,
+ width: 400,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ switch (control.display) {
+ case ItemDelegate.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case ItemDelegate.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, control.mirrored ? control.availableWidth - textLabel.width : 0)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case ItemDelegate.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case ItemDelegate.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_label.qml b/tests/auto/quickcontrols2/controls/data/tst_label.qml
new file mode 100644
index 0000000000..d6efb1373a
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_label.qml
@@ -0,0 +1,294 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Label"
+
+ Component {
+ id: label
+ Label { }
+ }
+
+ Component {
+ id: backgroundLabel
+ Label {
+ background: Rectangle { }
+ }
+ }
+
+ Component {
+ id: rectangle
+ Rectangle { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_creation() {
+ var control = createTemporaryObject(label, testCase)
+ verify(control)
+ }
+
+ function test_font_explicit_attributes_data() {
+ return [
+ {tag: "bold", value: true},
+ {tag: "capitalization", value: Font.Capitalize},
+ {tag: "family", value: "Courier"},
+ {tag: "italic", value: true},
+ {tag: "strikeout", value: true},
+ {tag: "underline", value: true},
+ {tag: "weight", value: Font.Black},
+ {tag: "wordSpacing", value: 55}
+ ]
+ }
+
+ function test_font_explicit_attributes(data) {
+ var control = createTemporaryObject(label, testCase)
+ verify(control)
+
+ var child = label.createObject(control)
+ verify(child)
+
+ var controlSpy = signalSpy.createObject(control, {target: control, signalName: "fontChanged"})
+ verify(controlSpy.valid)
+
+ var childSpy = signalSpy.createObject(child, {target: child, signalName: "fontChanged"})
+ verify(childSpy.valid)
+
+ var defaultValue = control.font[data.tag]
+ child.font[data.tag] = defaultValue
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.font[data.tag] = data.value
+
+ compare(control.font[data.tag], data.value)
+ compare(controlSpy.count, 1)
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+ }
+
+ function test_background() {
+ var control = createTemporaryObject(backgroundLabel, testCase, {text: "Label"})
+ verify(control)
+
+ compare(control.background.width, control.width)
+ compare(control.background.height, control.height)
+
+ control.background = rectangle.createObject(control)
+ compare(control.background.width, control.width)
+ compare(control.background.height, control.height)
+
+ // change implicit size (QTBUG-66455)
+ control.background.implicitWidth = 160
+ control.background.implicitHeight = 120
+ compare(control.background.width, control.width)
+ compare(control.background.height, control.height)
+ }
+
+ function test_inset() {
+ var control = createTemporaryObject(label, testCase, {background: rectangle.createObject(control)})
+ verify(control)
+
+ var topInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "topInsetChanged"})
+ verify(topInsetSpy.valid)
+
+ var leftInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "leftInsetChanged"})
+ verify(leftInsetSpy.valid)
+
+ var rightInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "rightInsetChanged"})
+ verify(rightInsetSpy.valid)
+
+ var bottomInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "bottomInsetChanged"})
+ verify(bottomInsetSpy.valid)
+
+ var topInsetChanges = 0
+ var leftInsetChanges = 0
+ var rightInsetChanges = 0
+ var bottomInsetChanges = 0
+
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+
+ control.width = 100
+ control.height = 100
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 100)
+
+ control.topInset = 10
+ compare(control.topInset, 10)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, ++topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 10)
+ compare(control.background.width, 100)
+ compare(control.background.height, 90)
+
+ control.leftInset = 20
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, ++leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 80)
+ compare(control.background.height, 90)
+
+ control.rightInset = 30
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, ++rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 50)
+ compare(control.background.height, 90)
+
+ control.bottomInset = 40
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, ++bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 50)
+ compare(control.background.height, 50)
+
+ control.topInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, ++topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 0)
+ compare(control.background.width, 50)
+ compare(control.background.height, 60)
+
+ control.leftInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, ++leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 70)
+ compare(control.background.height, 60)
+
+ control.rightInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, ++rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 60)
+
+ control.bottomInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, ++bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 100)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_menuitem.qml b/tests/auto/quickcontrols2/controls/data/tst_menuitem.qml
new file mode 100644
index 0000000000..713c030efd
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_menuitem.qml
@@ -0,0 +1,193 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "MenuItem"
+
+ Component {
+ id: menuItem
+ MenuItem { }
+ }
+
+ Component {
+ id: menu
+ Menu { }
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(menuItem, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ function test_checkable() {
+ var control = createTemporaryObject(menuItem, testCase)
+ verify(control)
+ verify(control.hasOwnProperty("checkable"))
+ verify(!control.checkable)
+
+ mouseClick(control)
+ verify(!control.checked)
+
+ control.checkable = true
+ mouseClick(control)
+ verify(control.checked)
+
+ mouseClick(control)
+ verify(!control.checked)
+ }
+
+ function test_highlighted() {
+ var control = createTemporaryObject(menuItem, testCase)
+ verify(control)
+ verify(!control.highlighted)
+
+ control.highlighted = true
+ verify(control.highlighted)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: MenuItem.IconOnly },
+ { "tag": "TextOnly", display: MenuItem.TextOnly },
+ { "tag": "TextUnderIcon", display: MenuItem.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: MenuItem.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: MenuItem.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: MenuItem.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: MenuItem.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: MenuItem.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(menuItem, testCase, {
+ text: "MenuItem",
+ display: data.display,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var padding = data.mirrored ? control.contentItem.rightPadding : control.contentItem.leftPadding
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ switch (control.display) {
+ case MenuItem.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, control.mirrored ? control.availableWidth - iconImage.width - padding : padding)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case MenuItem.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, control.mirrored ? control.availableWidth - textLabel.width - padding : padding)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case MenuItem.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, control.mirrored ? control.availableWidth - iconImage.width - (textLabel.width - iconImage.width) / 2 - padding : (textLabel.width - iconImage.width) / 2 + padding)
+ compare(textLabel.x, control.mirrored ? control.availableWidth - textLabel.width - padding : padding)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case MenuItem.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+
+ function test_menu() {
+ var control = createTemporaryObject(menu, testCase)
+ verify(control)
+
+ var item1 = createTemporaryObject(menuItem, testCase)
+ verify(item1)
+ compare(item1.menu, null)
+
+ var item2 = createTemporaryObject(menuItem, testCase)
+ verify(item2)
+ compare(item2.menu, null)
+
+ control.addItem(item1)
+ compare(item1.menu, control)
+ compare(item2.menu, null)
+
+ control.insertItem(1, item2)
+ compare(item1.menu, control)
+ compare(item2.menu, control)
+
+ control.removeItem(control.itemAt(1))
+ compare(item1.menu, control)
+ compare(item2.menu, null)
+
+ control.removeItem(control.itemAt(0))
+ compare(item1.menu, null)
+ compare(item2.menu, null)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_page.qml b/tests/auto/quickcontrols2/controls/data/tst_page.qml
new file mode 100644
index 0000000000..ae78a12563
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_page.qml
@@ -0,0 +1,315 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Page"
+
+ Component {
+ id: page
+ Page { }
+ }
+
+ Component {
+ id: oneChildPage
+ Page {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ Component {
+ id: twoChildrenPage
+ Page {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ Item {
+ implicitWidth: 200
+ implicitHeight: 60
+ }
+ }
+ }
+
+ Component {
+ id: contentPage
+ Page {
+ contentItem: Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ Component {
+ id: headerFooterPage
+ Page {
+ header: ToolBar { }
+ footer: ToolBar { }
+ contentItem: Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ Component {
+ id: toolBar
+ ToolBar { }
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(page, testCase)
+ verify(control)
+
+ verify(control.contentItem)
+ compare(control.header, null)
+ compare(control.footer, null)
+ }
+
+ function test_empty() {
+ var control = createTemporaryObject(page, testCase)
+ verify(control)
+
+ verify(control.contentItem)
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ }
+
+ function test_oneChild() {
+ var control = createTemporaryObject(oneChildPage, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ compare(control.implicitWidth, 100 + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, 30 + control.topPadding + control.bottomPadding)
+ }
+
+ function test_twoChildren() {
+ var control = createTemporaryObject(twoChildrenPage, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ compare(control.implicitWidth, Math.max(control.leftPadding + control.rightPadding,
+ control.background ? control.background.implicitWidth : 0))
+ compare(control.implicitHeight, Math.max(control.topPadding + control.bottomPadding,
+ control.background ? control.background.implicitHeight : 0))
+ }
+
+ function test_contentItem() {
+ var control = createTemporaryObject(contentPage, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ compare(control.implicitWidth, 100 + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, 30 + control.topPadding + control.bottomPadding)
+ }
+
+ function test_layout() {
+ var control = createTemporaryObject(page, testCase, {width: 100, height: 100})
+ verify(control)
+
+ compare(control.width, 100)
+ compare(control.height, 100)
+ compare(control.contentItem.width, control.width)
+ compare(control.contentItem.height, control.height)
+
+ control.header = toolBar.createObject(control)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+ compare(control.contentItem.width, control.width)
+ compare(control.contentItem.height, control.height - control.header.height)
+
+ control.footer = toolBar.createObject(control)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+ compare(control.contentItem.width, control.width)
+ compare(control.contentItem.height, control.height - control.header.height - control.footer.height)
+
+ control.topPadding = 9
+ control.leftPadding = 2
+ control.rightPadding = 6
+ control.bottomPadding = 7
+
+ compare(control.header.x, 0)
+ compare(control.header.y, 0)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+
+ compare(control.footer.x, 0)
+ compare(control.footer.y, control.height - control.footer.height)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding + control.header.height)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight - control.header.height - control.footer.height)
+
+ control.header.visible = false
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight - control.footer.height)
+
+ control.footer.visible = false
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight)
+
+ control.contentItem.implicitWidth = 50
+ control.contentItem.implicitHeight = 60
+ compare(control.implicitWidth, control.contentItem.implicitWidth + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentItem.implicitHeight + control.topPadding + control.bottomPadding)
+
+ control.header.visible = true
+ compare(control.implicitHeight, control.contentItem.implicitHeight + control.topPadding + control.bottomPadding
+ + control.header.implicitHeight + control.spacing)
+
+ control.footer.visible = true
+ compare(control.implicitHeight, control.contentItem.implicitHeight + control.topPadding + control.bottomPadding
+ + control.header.implicitHeight + control.footer.implicitHeight + 2 * control.spacing)
+
+ control.header.implicitWidth = 150
+ compare(control.implicitWidth, control.header.implicitWidth)
+
+ control.footer.implicitWidth = 160
+ compare(control.implicitWidth, control.footer.implicitWidth)
+
+ control.contentItem.implicitWidth = 170
+ compare(control.implicitWidth, control.contentItem.implicitWidth + control.leftPadding + control.rightPadding)
+ }
+
+ function test_spacing_data() {
+ return [
+ { tag: "content", header: false, content: true, footer: false },
+ { tag: "header,content", header: true, content: true, footer: false },
+ { tag: "content,footer", header: false, content: true, footer: true },
+ { tag: "header,content,footer", header: true, content: true, footer: true },
+ { tag: "header,footer", header: true, content: false, footer: true },
+ { tag: "header", header: true, content: false, footer: false },
+ { tag: "footer", header: false, content: false, footer: true },
+ ]
+ }
+
+ function test_spacing(data) {
+ var control = createTemporaryObject(page, testCase, {spacing: 20, width: 100, height: 100})
+ verify(control)
+
+ control.contentItem.visible = data.content
+ control.header = toolBar.createObject(control.contentItem, {visible: data.header})
+ control.footer = toolBar.createObject(control.contentItem, {visible: data.footer})
+
+ compare(control.header.x, 0)
+ compare(control.header.y, 0)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+
+ compare(control.footer.x, 0)
+ compare(control.footer.y, control.height - control.footer.height)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding + (data.header ? control.header.height + control.spacing : 0))
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight
+ - (data.header ? control.header.height + control.spacing : 0)
+ - (data.footer ? control.footer.height + control.spacing : 0))
+ }
+
+ function test_headerFooter() {
+ var control = createTemporaryObject(headerFooterPage, testCase, {width: 100, height: 100})
+ verify(control)
+
+ compare(control.width, 100)
+ compare(control.height, 100)
+
+ verify(control.header)
+ compare(control.header.x, 0)
+ compare(control.header.y, 0)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+
+ verify(control.footer)
+ compare(control.footer.x, 0)
+ compare(control.footer.y, control.height - control.footer.height)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+
+ compare(control.contentItem.x, 0)
+ compare(control.contentItem.y, control.header.height)
+ compare(control.contentItem.width, control.width)
+ compare(control.contentItem.height, control.height - control.header.height - control.footer.height)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_pageindicator.qml b/tests/auto/quickcontrols2/controls/data/tst_pageindicator.qml
new file mode 100644
index 0000000000..765c52a77a
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_pageindicator.qml
@@ -0,0 +1,183 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "PageIndicator"
+
+ Component {
+ id: pageIndicator
+ PageIndicator { }
+ }
+
+ Component {
+ id: mouseArea
+ MouseArea { }
+ }
+
+ function test_count() {
+ var control = createTemporaryObject(pageIndicator, testCase)
+ verify(control)
+
+ compare(control.count, 0)
+ control.count = 3
+ compare(control.count, 3)
+ }
+
+ function test_currentIndex() {
+ var control = createTemporaryObject(pageIndicator, testCase)
+ verify(control)
+
+ compare(control.currentIndex, 0)
+ control.currentIndex = 5
+ compare(control.currentIndex, 5)
+ }
+
+ function test_interactive_data() {
+ return [
+ { tag: "mouse", touch: false },
+ { tag: "touch", touch: true }
+ ]
+ }
+
+ function test_interactive(data) {
+ var control = createTemporaryObject(pageIndicator, testCase, {count: 5, spacing: 10, topPadding: 10, leftPadding: 10, rightPadding: 10, bottomPadding: 10})
+ verify(control)
+
+ verify(!control.interactive)
+ compare(control.currentIndex, 0)
+
+ var touch = touchEvent(control)
+
+ if (data.touch)
+ touch.press(0, control).commit().release(0, control).commit()
+ else
+ mouseClick(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.currentIndex, 0)
+
+ control.interactive = true
+ verify(control.interactive)
+
+ if (data.touch)
+ touch.press(0, control).commit().release(0, control).commit()
+ else
+ mouseClick(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.currentIndex, 2)
+
+ // test also clicking outside delegates => the nearest should be selected
+ for (var i = 0; i < control.count; ++i) {
+ var child = control.contentItem.children[i]
+
+ var points = [
+ Qt.point(child.width / 2, -2), // top
+ Qt.point(-2, child.height / 2), // left
+ Qt.point(child.width + 2, child.height / 2), // right
+ Qt.point(child.width / 2, child.height + 2), // bottom
+
+ Qt.point(-2, -2), // top-left
+ Qt.point(child.width + 2, -2), // top-right
+ Qt.point(-2, child.height + 2), // bottom-left
+ Qt.point(child.width + 2, child.height + 2), // bottom-right
+ ]
+
+ for (var j = 0; j < points.length; ++j) {
+ control.currentIndex = -1
+ compare(control.currentIndex, -1)
+
+ var point = points[j]
+ var pos = control.mapFromItem(child, x, y)
+ if (data.touch)
+ touch.press(0, control, pos.x, pos.y).commit().release(0, control, pos.x, pos.y).commit()
+ else
+ mouseClick(control, pos.x, pos.y, Qt.LeftButton)
+ compare(control.currentIndex, i)
+ }
+ }
+ }
+
+ function test_mouseArea_data() {
+ return [
+ { tag: "interactive", interactive: true },
+ { tag: "non-interactive", interactive: false }
+ ]
+ }
+
+ // QTBUG-61785
+ function test_mouseArea(data) {
+ var ma = createTemporaryObject(mouseArea, testCase, {width: testCase.width, height: testCase.height})
+ verify(ma)
+
+ var control = pageIndicator.createObject(ma, {count: 5, interactive: data.interactive, width: testCase.width, height: testCase.height})
+ verify(control)
+
+ compare(control.interactive, data.interactive)
+
+ mousePress(control)
+ compare(ma.pressed, !data.interactive)
+
+ mouseRelease(control)
+ verify(!ma.pressed)
+
+ var touch = touchEvent(control)
+ touch.press(0, control).commit()
+ compare(ma.pressed, !data.interactive)
+
+ touch.release(0, control).commit()
+ verify(!ma.pressed)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_pane.qml b/tests/auto/quickcontrols2/controls/data/tst_pane.qml
new file mode 100644
index 0000000000..d44d7424a6
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_pane.qml
@@ -0,0 +1,195 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Pane"
+
+ Component {
+ id: pane
+ Pane { }
+ }
+
+ Component {
+ id: oneChildPane
+ Pane {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ Component {
+ id: twoChildrenPane
+ Pane {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ Item {
+ implicitWidth: 200
+ implicitHeight: 60
+ }
+ }
+ }
+
+ Component {
+ id: contentPane
+ Pane {
+ contentItem: Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ Component {
+ id: pressPane
+ MouseArea {
+ width: 200
+ height: 200
+ property int pressCount
+ onPressed: ++pressCount
+ Pane {
+ anchors.fill: parent
+ }
+ }
+ }
+
+ function test_empty() {
+ var control = createTemporaryObject(pane, testCase)
+ verify(control)
+
+ verify(control.contentItem)
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ }
+
+ function test_oneChild() {
+ var control = createTemporaryObject(oneChildPane, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ verify(control.implicitWidth > 100)
+ verify(control.implicitHeight > 30)
+
+ compare(control.contentChildren.length, 1)
+ control.contentChildren[0].implicitWidth = 200
+ control.contentChildren[0].implicitHeight = 40
+
+ compare(control.contentWidth, 200)
+ compare(control.contentHeight, 40)
+ compare(control.implicitContentWidth, 200)
+ compare(control.implicitContentHeight, 40)
+ verify(control.implicitWidth > 200)
+ verify(control.implicitHeight > 40)
+ }
+
+ function test_twoChildren() {
+ var control = createTemporaryObject(twoChildrenPane, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ verify(control.implicitWidth > 0)
+ verify(control.implicitHeight > 0)
+ }
+
+ function test_contentItem() {
+ var control = createTemporaryObject(contentPane, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ verify(control.implicitWidth > 100)
+ verify(control.implicitHeight > 30)
+ }
+
+ function test_implicitContentItem() {
+ var control = createTemporaryObject(pane, testCase, {width: 100, height: 100})
+ verify(control)
+
+ compare(control.width, 100)
+ compare(control.height, 100)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight)
+ }
+
+ function test_press() {
+ var control = createTemporaryObject(pressPane, testCase)
+ verify(control)
+
+ compare(control.pressCount, 0)
+ mouseClick(control)
+ compare(control.pressCount, 0)
+
+ control.children[0].enabled = false
+ mouseClick(control)
+ compare(control.pressCount, 1)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_popup.qml b/tests/auto/quickcontrols2/controls/data/tst_popup.qml
new file mode 100644
index 0000000000..acb550fdd4
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_popup.qml
@@ -0,0 +1,1486 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+import QtQuick.Templates as T
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Popup"
+
+ ApplicationWindow {
+ id: applicationWindow
+ width: 480
+ height: 360
+ }
+
+ Component {
+ id: popupTemplate
+ T.Popup { }
+ }
+
+ Component {
+ id: popupControl
+ Popup { }
+ }
+
+ Component {
+ id: rect
+ Rectangle { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_padding() {
+ var control = createTemporaryObject(popupTemplate, testCase)
+ verify(control)
+
+ var paddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "paddingChanged"})
+ verify(paddingSpy.valid)
+
+ var topPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "topPaddingChanged"})
+ verify(topPaddingSpy.valid)
+
+ var leftPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "leftPaddingChanged"})
+ verify(leftPaddingSpy.valid)
+
+ var rightPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "rightPaddingChanged"})
+ verify(rightPaddingSpy.valid)
+
+ var bottomPaddingSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "bottomPaddingChanged"})
+ verify(bottomPaddingSpy.valid)
+
+ var paddingChanges = 0
+ var topPaddingChanges = 0
+ var leftPaddingChanges = 0
+ var rightPaddingChanges = 0
+ var bottomPaddingChanges = 0
+
+ compare(control.padding, 0)
+ compare(control.topPadding, 0)
+ compare(control.leftPadding, 0)
+ compare(control.rightPadding, 0)
+ compare(control.bottomPadding, 0)
+ compare(control.availableWidth, 0)
+ compare(control.availableHeight, 0)
+
+ control.width = 100
+ control.height = 100
+
+ control.padding = 10
+ compare(control.padding, 10)
+ compare(control.topPadding, 10)
+ compare(control.leftPadding, 10)
+ compare(control.rightPadding, 10)
+ compare(control.bottomPadding, 10)
+ compare(paddingSpy.count, ++paddingChanges)
+ compare(topPaddingSpy.count, ++topPaddingChanges)
+ compare(leftPaddingSpy.count, ++leftPaddingChanges)
+ compare(rightPaddingSpy.count, ++rightPaddingChanges)
+ compare(bottomPaddingSpy.count, ++bottomPaddingChanges)
+
+ control.topPadding = 20
+ compare(control.padding, 10)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 10)
+ compare(control.rightPadding, 10)
+ compare(control.bottomPadding, 10)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, ++topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+
+ control.leftPadding = 30
+ compare(control.padding, 10)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 10)
+ compare(control.bottomPadding, 10)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, ++leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+
+ control.rightPadding = 40
+ compare(control.padding, 10)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 10)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, ++rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+
+ control.bottomPadding = 50
+ compare(control.padding, 10)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 50)
+ compare(paddingSpy.count, paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, ++bottomPaddingChanges)
+
+ control.padding = 60
+ compare(control.padding, 60)
+ compare(control.topPadding, 20)
+ compare(control.leftPadding, 30)
+ compare(control.rightPadding, 40)
+ compare(control.bottomPadding, 50)
+ compare(paddingSpy.count, ++paddingChanges)
+ compare(topPaddingSpy.count, topPaddingChanges)
+ compare(leftPaddingSpy.count, leftPaddingChanges)
+ compare(rightPaddingSpy.count, rightPaddingChanges)
+ compare(bottomPaddingSpy.count, bottomPaddingChanges)
+ }
+
+ function test_availableSize() {
+ var control = createTemporaryObject(popupTemplate, testCase)
+ verify(control)
+
+ var availableWidthSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "availableWidthChanged"})
+ verify(availableWidthSpy.valid)
+
+ var availableHeightSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "availableHeightChanged"})
+ verify(availableHeightSpy.valid)
+
+ var availableWidthChanges = 0
+ var availableHeightChanges = 0
+
+ control.width = 100
+ compare(control.availableWidth, 100)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.height = 100
+ compare(control.availableHeight, 100)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+
+ control.padding = 10
+ compare(control.availableWidth, 80)
+ compare(control.availableHeight, 80)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+
+ control.topPadding = 20
+ compare(control.availableWidth, 80)
+ compare(control.availableHeight, 70)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+
+ control.leftPadding = 30
+ compare(control.availableWidth, 60)
+ compare(control.availableHeight, 70)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.rightPadding = 40
+ compare(control.availableWidth, 30)
+ compare(control.availableHeight, 70)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.bottomPadding = 50
+ compare(control.availableWidth, 30)
+ compare(control.availableHeight, 30)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+
+ control.padding = 60
+ compare(control.availableWidth, 30)
+ compare(control.availableHeight, 30)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.width = 0
+ compare(control.availableWidth, 0)
+ compare(availableWidthSpy.count, ++availableWidthChanges)
+ compare(availableHeightSpy.count, availableHeightChanges)
+
+ control.height = 0
+ compare(control.availableHeight, 0)
+ compare(availableWidthSpy.count, availableWidthChanges)
+ compare(availableHeightSpy.count, ++availableHeightChanges)
+ }
+
+ function test_position() {
+ var control = createTemporaryObject(popupControl, testCase, {visible: true, leftMargin: 10, topMargin: 20, width: 100, height: 100})
+ verify(control)
+ verify(control.visible)
+
+ var xSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "xChanged"})
+ verify(xSpy.valid)
+
+ var ySpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "yChanged"})
+ verify(ySpy.valid)
+
+ // moving outside margins does not trigger change notifiers
+ control.x = -100
+ compare(control.x, 10)
+ compare(control.y, 20)
+ compare(xSpy.count, 0)
+ compare(ySpy.count, 0)
+
+ control.y = -200
+ compare(control.x, 10)
+ compare(control.y, 20)
+ compare(xSpy.count, 0)
+ compare(ySpy.count, 0)
+
+ // moving within margins triggers change notifiers
+ control.x = 30
+ compare(control.x, 30)
+ compare(control.y, 20)
+ compare(xSpy.count, 1)
+ compare(ySpy.count, 0)
+
+ control.y = 40
+ compare(control.x, 30)
+ compare(control.y, 40)
+ compare(xSpy.count, 1)
+ compare(ySpy.count, 1)
+
+ // re-parent and reset the position
+ control.parent = createTemporaryObject(rect, testCase, {color: "red", width: 100, height: 100})
+ control.x = 0
+ control.y = 0
+ compare(xSpy.count, 2)
+ compare(ySpy.count, 2)
+
+ // moving parent outside margins triggers change notifiers
+ control.parent.x = -50
+ compare(control.x, 50 + control.leftMargin)
+ compare(xSpy.count, 3)
+ compare(ySpy.count, 2)
+
+ control.parent.y = -60
+ compare(control.y, 60 + control.topMargin)
+ compare(xSpy.count, 3)
+ compare(ySpy.count, 3)
+ }
+
+ function test_resetSize() {
+ var control = createTemporaryObject(popupControl, testCase, {visible: true, margins: 0})
+ verify(control)
+
+ control.scale = 1.0
+ control.width = control.implicitWidth = testCase.width + 10
+ control.height = control.implicitHeight = testCase.height + 10
+
+ compare(control.width, testCase.width + 10)
+ compare(control.height, testCase.height + 10)
+
+ control.width = undefined
+ control.height = undefined
+ compare(control.width, testCase.width)
+ compare(control.height, testCase.height)
+ }
+
+ function test_negativeMargins() {
+ var control = createTemporaryObject(popupControl, testCase, {implicitWidth: testCase.width, implicitHeight: testCase.height})
+ verify(control)
+
+ control.open()
+ verify(control.visible)
+
+ compare(control.x, 0)
+ compare(control.y, 0)
+
+ compare(control.margins, -1)
+ compare(control.topMargin, -1)
+ compare(control.leftMargin, -1)
+ compare(control.rightMargin, -1)
+ compare(control.bottomMargin, -1)
+
+ control.x = -10
+ control.y = -10
+ compare(control.x, 0)
+ compare(control.y, 0)
+ }
+
+ function test_margins() {
+ var control = createTemporaryObject(popupTemplate, testCase, {width: 100, height: 100})
+ verify(control)
+
+ control.open()
+ verify(control.visible)
+
+ control.margins = 10
+ compare(control.margins, 10)
+ compare(control.topMargin, 10)
+ compare(control.leftMargin, 10)
+ compare(control.rightMargin, 10)
+ compare(control.bottomMargin, 10)
+ compare(control.contentItem.parent.x, 10)
+ compare(control.contentItem.parent.y, 10)
+
+ control.topMargin = 20
+ compare(control.margins, 10)
+ compare(control.topMargin, 20)
+ compare(control.leftMargin, 10)
+ compare(control.rightMargin, 10)
+ compare(control.bottomMargin, 10)
+ compare(control.contentItem.parent.x, 10)
+ compare(control.contentItem.parent.y, 20)
+
+ control.leftMargin = 20
+ compare(control.margins, 10)
+ compare(control.topMargin, 20)
+ compare(control.leftMargin, 20)
+ compare(control.rightMargin, 10)
+ compare(control.bottomMargin, 10)
+ compare(control.contentItem.parent.x, 20)
+ compare(control.contentItem.parent.y, 20)
+
+ control.x = testCase.width
+ control.y = testCase.height
+ compare(control.contentItem.parent.x, testCase.width - control.width - 10)
+ compare(control.contentItem.parent.y, testCase.height - control.height - 10)
+
+ control.rightMargin = 20
+ compare(control.margins, 10)
+ compare(control.topMargin, 20)
+ compare(control.leftMargin, 20)
+ compare(control.rightMargin, 20)
+ compare(control.bottomMargin, 10)
+ compare(control.contentItem.parent.x, testCase.width - control.width - 20)
+ compare(control.contentItem.parent.y, testCase.height - control.height - 10)
+
+ control.bottomMargin = 20
+ compare(control.margins, 10)
+ compare(control.topMargin, 20)
+ compare(control.leftMargin, 20)
+ compare(control.rightMargin, 20)
+ compare(control.bottomMargin, 20)
+ compare(control.contentItem.parent.x, testCase.width - control.width - 20)
+ compare(control.contentItem.parent.y, testCase.height - control.height - 20)
+
+ control.margins = undefined
+ compare(control.margins, -1)
+
+ control.bottomMargin = undefined
+ compare(control.bottomMargin, -1)
+ compare(control.contentItem.parent.x, testCase.width - control.width - 20)
+ compare(control.contentItem.parent.y, testCase.height)
+
+ control.rightMargin = undefined
+ compare(control.rightMargin, -1)
+ compare(control.contentItem.parent.x, testCase.width)
+ compare(control.contentItem.parent.y, testCase.height)
+
+ control.x = -testCase.width
+ control.y = -testCase.height
+ compare(control.contentItem.parent.x, 20)
+ compare(control.contentItem.parent.y, 20)
+
+ control.topMargin = undefined
+ compare(control.topMargin, -1)
+ compare(control.contentItem.parent.x, 20)
+ compare(control.contentItem.parent.y, -testCase.height)
+
+ control.leftMargin = undefined
+ compare(control.leftMargin, -1)
+ compare(control.contentItem.parent.x, -testCase.width)
+ compare(control.contentItem.parent.y, -testCase.height)
+ }
+
+ function test_background() {
+ var control = createTemporaryObject(popupTemplate, testCase)
+ verify(control)
+
+ control.background = rect.createObject(testCase)
+
+ // background has no x or width set, so its width follows control's width
+ control.width = 320
+ compare(control.background.width, control.width)
+
+ // background has no y or height set, so its height follows control's height
+ compare(control.background.height, control.height)
+ control.height = 240
+
+ // has width => width does not follow
+ control.background.width /= 2
+ control.width += 20
+ verify(control.background.width !== control.width)
+
+ // reset width => width follows again
+ control.background.width = undefined
+ control.width += 20
+ compare(control.background.width, control.width)
+
+ // has x => width does not follow
+ control.background.x = 10
+ control.width += 20
+ verify(control.background.width !== control.width)
+
+ // has height => height does not follow
+ control.background.height /= 2
+ control.height -= 20
+ verify(control.background.height !== control.height)
+
+ // reset height => height follows again
+ control.background.height = undefined
+ control.height -= 20
+ compare(control.background.height, control.height)
+
+ // has y => height does not follow
+ control.background.y = 10
+ control.height -= 20
+ verify(control.background.height !== control.height)
+ }
+
+ function getChild(control, objname, idx) {
+ var index = idx
+ for (var i = index+1; i < control.children.length; i++)
+ {
+ if (control.children[i].objectName === objname) {
+ index = i
+ break
+ }
+ }
+ return index
+ }
+
+ Component {
+ id: component
+ ApplicationWindow {
+ id: _window
+ width: 400
+ height: 400
+ visible: true
+ font.pixelSize: 40
+ property alias pane: _pane
+ property alias popup: _popup
+ property SignalSpy fontspy: SignalSpy { target: _window; signalName: "fontChanged" }
+ Pane {
+ id: _pane
+ property alias button: _button
+ font.pixelSize: 30
+ property SignalSpy fontspy: SignalSpy { target: _pane; signalName: "fontChanged" }
+ Column {
+ Button {
+ id: _button
+ text: "Button"
+ font.pixelSize: 20
+ property SignalSpy fontspy: SignalSpy { target: _button; signalName: "fontChanged" }
+ Popup {
+ id: _popup
+ property alias button: _button2
+ property alias listview: _listview
+ y: _button.height
+ implicitHeight: Math.min(396, _listview.contentHeight)
+ property SignalSpy fontspy: SignalSpy { target: _popup; signalName: "fontChanged" }
+ contentItem: Column {
+ Button {
+ id: _button2
+ text: "Button"
+ property SignalSpy fontspy: SignalSpy { target: _button2; signalName: "fontChanged" }
+ }
+ ListView {
+ id: _listview
+ height: _button.height * 20
+ model: 2
+ delegate: Button {
+ id: _button3
+ objectName: "delegate"
+ width: _button.width
+ height: _button.height
+ text: "N: " + index
+ checkable: true
+ autoExclusive: true
+ property SignalSpy fontspy: SignalSpy { target: _button3; signalName: "fontChanged" }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function test_font() { // QTBUG_50984, QTBUG-51696
+ var window = createTemporaryObject(component, testCase)
+ verify(window)
+
+ compare(window.font.pixelSize, 40)
+ compare(window.pane.font.pixelSize, 30)
+ compare(window.pane.button.font.pixelSize, 20)
+ compare(window.popup.font.pixelSize, 40)
+ compare(window.popup.button.font.pixelSize, 40)
+
+ var idx1 = getChild(window.popup.listview.contentItem, "delegate", -1)
+ compare(window.popup.listview.contentItem.children[idx1].font.pixelSize, 40)
+ var idx2 = getChild(window.popup.listview.contentItem, "delegate", idx1)
+ compare(window.popup.listview.contentItem.children[idx2].font.pixelSize, 40)
+
+ window.pane.button.font.pixelSize = 30
+ compare(window.font.pixelSize, 40)
+ compare(window.fontspy.count, 0)
+ compare(window.pane.font.pixelSize, 30)
+ compare(window.pane.fontspy.count, 0)
+ compare(window.pane.button.font.pixelSize, 30)
+ compare(window.pane.button.fontspy.count, 1)
+ compare(window.popup.font.pixelSize, 40)
+ compare(window.popup.fontspy.count, 0)
+ compare(window.popup.button.font.pixelSize, 40)
+ compare(window.popup.button.fontspy.count, 0)
+ compare(window.popup.listview.contentItem.children[idx1].font.pixelSize, 40)
+ compare(window.popup.listview.contentItem.children[idx1].fontspy.count, 0)
+ compare(window.popup.listview.contentItem.children[idx2].font.pixelSize, 40)
+ compare(window.popup.listview.contentItem.children[idx2].fontspy.count, 0)
+
+ window.font.pixelSize = 50
+ compare(window.font.pixelSize, 50)
+ compare(window.fontspy.count, 1)
+ compare(window.pane.font.pixelSize, 30)
+ compare(window.pane.fontspy.count, 0)
+ compare(window.pane.button.font.pixelSize, 30)
+ compare(window.pane.button.fontspy.count, 1)
+ compare(window.popup.font.pixelSize, 50)
+ compare(window.popup.fontspy.count, 1)
+ compare(window.popup.button.font.pixelSize, 50)
+ compare(window.popup.button.fontspy.count, 1)
+ compare(window.popup.listview.contentItem.children[idx1].font.pixelSize, 50)
+ compare(window.popup.listview.contentItem.children[idx1].fontspy.count, 1)
+ compare(window.popup.listview.contentItem.children[idx2].font.pixelSize, 50)
+ compare(window.popup.listview.contentItem.children[idx2].fontspy.count, 1)
+
+ window.popup.button.font.pixelSize = 10
+ compare(window.font.pixelSize, 50)
+ compare(window.fontspy.count, 1)
+ compare(window.pane.font.pixelSize, 30)
+ compare(window.pane.fontspy.count, 0)
+ compare(window.pane.button.font.pixelSize, 30)
+ compare(window.pane.button.fontspy.count, 1)
+ compare(window.popup.font.pixelSize, 50)
+ compare(window.popup.fontspy.count, 1)
+ compare(window.popup.button.font.pixelSize, 10)
+ compare(window.popup.button.fontspy.count, 2)
+ compare(window.popup.listview.contentItem.children[idx1].font.pixelSize, 50)
+ compare(window.popup.listview.contentItem.children[idx1].fontspy.count, 1)
+ compare(window.popup.listview.contentItem.children[idx2].font.pixelSize, 50)
+ compare(window.popup.listview.contentItem.children[idx2].fontspy.count, 1)
+
+ window.popup.font.pixelSize = 60
+ compare(window.font.pixelSize, 50)
+ compare(window.fontspy.count, 1)
+ compare(window.pane.font.pixelSize, 30)
+ compare(window.pane.fontspy.count, 0)
+ compare(window.pane.button.font.pixelSize, 30)
+ compare(window.pane.button.fontspy.count, 1)
+ compare(window.popup.font.pixelSize, 60)
+ compare(window.popup.fontspy.count, 2)
+ compare(window.popup.button.font.pixelSize, 10)
+ compare(window.popup.button.fontspy.count, 2)
+ compare(window.popup.listview.contentItem.children[idx1].font.pixelSize, 60)
+ compare(window.popup.listview.contentItem.children[idx1].fontspy.count, 2)
+ compare(window.popup.listview.contentItem.children[idx2].font.pixelSize, 60)
+ compare(window.popup.listview.contentItem.children[idx2].fontspy.count, 2)
+ }
+
+ Component {
+ id: localeComponent
+ Pane {
+ property alias button: _button
+ property alias popup: _popup
+ locale: Qt.locale("en_US")
+ Column {
+ Button {
+ id: _button
+ text: "Button"
+ locale: Qt.locale("nb_NO")
+ Popup {
+ id: _popup
+ property alias button1: _button1
+ property alias button2: _button2
+ y: _button.height
+ locale: Qt.locale("fi_FI")
+ implicitHeight: Math.min(396, _column.contentHeight)
+ contentItem: Column {
+ id: _column
+ Button {
+ id: _button1
+ text: "Button 1"
+ objectName: "1"
+ }
+ Button {
+ id: _button2
+ text: "Button 2"
+ locale: Qt.locale("nb_NO")
+ objectName: "2"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function test_locale() { // QTBUG_50984
+ // test looking up natural locale from ancestors
+ var control = createTemporaryObject(localeComponent, applicationWindow.contentItem)
+ verify(control)
+
+ compare(control.locale.name, "en_US")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.locale.name, "fi_FI")
+ compare(control.popup.button1.locale.name, "fi_FI")
+ compare(control.popup.button2.locale.name, "nb_NO")
+
+ control.ApplicationWindow.window.locale = undefined
+ }
+
+ Component {
+ id: localeChangeComponent
+ Pane {
+ id: _pane
+ property alias button: _button
+ property alias popup: _popup
+ property SignalSpy localespy: SignalSpy {
+ target: _pane
+ signalName: "localeChanged"
+ }
+ property SignalSpy mirrorspy: SignalSpy {
+ target: _pane
+ signalName: "mirroredChanged"
+ }
+ Column {
+ Button {
+ id: _button
+ text: "Button"
+ property SignalSpy localespy: SignalSpy {
+ target: _button
+ signalName: "localeChanged"
+ }
+ property SignalSpy mirrorspy: SignalSpy {
+ target: _button
+ signalName: "mirroredChanged"
+ }
+ Popup {
+ id: _popup
+ property alias button1: _button1
+ property alias button2: _button2
+ y: _button.height
+ implicitHeight: Math.min(396, _column.contentHeight)
+ property SignalSpy localespy: SignalSpy {
+ target: _popup
+ signalName: "localeChanged"
+ }
+ contentItem: Column {
+ id: _column
+ Button {
+ id: _button1
+ text: "Button 1"
+ property SignalSpy localespy: SignalSpy {
+ target: _button1
+ signalName: "localeChanged"
+ }
+ property SignalSpy mirrorspy: SignalSpy {
+ target: _button1
+ signalName: "mirroredChanged"
+ }
+ }
+ Button {
+ id: _button2
+ text: "Button 2"
+ property SignalSpy localespy: SignalSpy {
+ target: _button2
+ signalName: "localeChanged"
+ }
+ property SignalSpy mirrorspy: SignalSpy {
+ target: _button2
+ signalName: "mirroredChanged"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function test_locale_changes() { // QTBUG_50984
+ // test default locale and locale inheritance
+ var control = createTemporaryObject(localeChangeComponent, applicationWindow.contentItem)
+ verify(control)
+
+ var defaultLocale = Qt.locale()
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
+ compare(control.locale.name, defaultLocale.name)
+ compare(control.button.locale.name, defaultLocale.name)
+ compare(control.popup.locale.name, defaultLocale.name)
+ compare(control.popup.button1.locale.name, defaultLocale.name)
+ compare(control.popup.button2.locale.name, defaultLocale.name)
+
+ control.ApplicationWindow.window.locale = Qt.locale("nb_NO")
+ compare(control.ApplicationWindow.window.locale.name, "nb_NO")
+ compare(control.locale.name, "nb_NO")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.locale.name, "nb_NO")
+ compare(control.popup.button1.locale.name, "nb_NO")
+ compare(control.popup.button2.locale.name, "nb_NO")
+ compare(control.localespy.count, 1)
+ compare(control.button.localespy.count, 1)
+ compare(control.popup.localespy.count, 1)
+ compare(control.popup.button1.localespy.count, 1)
+ compare(control.popup.button2.localespy.count, 1)
+
+ control.ApplicationWindow.window.locale = undefined
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
+ compare(control.locale.name, defaultLocale.name)
+ compare(control.button.locale.name, defaultLocale.name)
+ compare(control.popup.locale.name, defaultLocale.name)
+ compare(control.popup.button1.locale.name, defaultLocale.name)
+ compare(control.popup.button2.locale.name, defaultLocale.name)
+ compare(control.localespy.count, 2)
+ compare(control.button.localespy.count, 2)
+ compare(control.popup.localespy.count, 2)
+ compare(control.popup.button1.localespy.count, 2)
+ compare(control.popup.button2.localespy.count, 2)
+
+ control.locale = Qt.locale("ar_EG")
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "ar_EG")
+ compare(control.popup.locale.name, defaultLocale.name)
+ compare(control.popup.button1.locale.name, defaultLocale.name)
+ compare(control.popup.button2.locale.name, defaultLocale.name)
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 0)
+ compare(control.button.localespy.count, 3)
+ compare(control.button.mirrorspy.count, 0)
+ compare(control.popup.localespy.count, 2)
+ compare(control.popup.button1.localespy.count, 2)
+ compare(control.popup.button2.localespy.count, 2)
+
+ control.ApplicationWindow.window.locale = Qt.locale("ar_EG")
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "ar_EG")
+ compare(control.popup.locale.name, "ar_EG")
+ compare(control.popup.button1.locale.name, "ar_EG")
+ compare(control.popup.button2.locale.name, "ar_EG")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 0)
+ compare(control.button.localespy.count, 3)
+ compare(control.button.mirrorspy.count, 0)
+ compare(control.popup.localespy.count, 3)
+ compare(control.popup.button1.localespy.count, 3)
+ compare(control.popup.button1.mirrorspy.count, 0)
+ compare(control.popup.button2.localespy.count, 3)
+ compare(control.popup.button2.mirrorspy.count, 0)
+
+ control.button.locale = Qt.locale("nb_NO")
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.locale.name, "ar_EG")
+ compare(control.popup.button1.locale.name, "ar_EG")
+ compare(control.popup.button2.locale.name, "ar_EG")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 0)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 0)
+ compare(control.popup.localespy.count, 3)
+ compare(control.popup.button1.localespy.count, 3)
+ compare(control.popup.button2.localespy.count, 3)
+
+ control.locale = undefined
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.locale.name, "ar_EG")
+ compare(control.popup.button1.locale.name, "ar_EG")
+ compare(control.popup.button2.locale.name, "ar_EG")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 0)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 0)
+ compare(control.popup.localespy.count, 3)
+ compare(control.popup.button1.localespy.count, 3)
+ compare(control.popup.button2.localespy.count, 3)
+
+ control.popup.button1.locale = Qt.locale("nb_NO")
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.locale.name, "ar_EG")
+ compare(control.popup.button1.locale.name, "nb_NO")
+ compare(control.popup.button2.locale.name, "ar_EG")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 0)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 0)
+ compare(control.popup.localespy.count, 3)
+ compare(control.popup.button1.localespy.count, 4)
+ compare(control.popup.button1.mirrorspy.count, 0)
+ compare(control.popup.button2.localespy.count, 3)
+ compare(control.popup.button2.mirrorspy.count, 0)
+
+ control.popup.locale = Qt.locale("fi_FI")
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.locale.name, "fi_FI")
+ compare(control.popup.button1.locale.name, "nb_NO")
+ compare(control.popup.button2.locale.name, "fi_FI")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 0)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 0)
+ compare(control.popup.localespy.count, 4)
+ compare(control.popup.button1.localespy.count, 4)
+ compare(control.popup.button1.mirrorspy.count, 0)
+ compare(control.popup.button2.localespy.count, 4)
+ compare(control.popup.button2.mirrorspy.count, 0)
+
+ control.ApplicationWindow.window.locale = undefined
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
+ compare(control.locale.name, defaultLocale.name)
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.locale.name, "fi_FI")
+ compare(control.popup.button1.locale.name, "nb_NO")
+ compare(control.popup.button2.locale.name, "fi_FI")
+ compare(control.localespy.count, 4)
+ compare(control.mirrorspy.count, 0)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 0)
+ compare(control.popup.localespy.count, 4)
+ compare(control.popup.button1.localespy.count, 4)
+ compare(control.popup.button1.mirrorspy.count, 0)
+ compare(control.popup.button2.localespy.count, 4)
+ compare(control.popup.button2.mirrorspy.count, 0)
+
+ control.popup.locale = undefined
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
+ compare(control.locale.name, defaultLocale.name)
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.locale.name, defaultLocale.name)
+ compare(control.popup.button1.locale.name, "nb_NO")
+ compare(control.popup.button2.locale.name, defaultLocale.name)
+ compare(control.localespy.count, 4)
+ compare(control.mirrorspy.count, 0)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 0)
+ compare(control.popup.localespy.count, 5)
+ compare(control.popup.button1.localespy.count, 4)
+ compare(control.popup.button1.mirrorspy.count, 0)
+ compare(control.popup.button2.localespy.count, 5)
+ compare(control.popup.button2.mirrorspy.count, 0)
+ }
+
+ function test_size() {
+ var control = createTemporaryObject(popupControl, testCase)
+ verify(control)
+
+ var openedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "opened"})
+ verify(openedSpy.valid)
+
+ control.open()
+ openedSpy.wait()
+ compare(openedSpy.count, 1)
+ verify(control.visible)
+
+ // remove the background so that it won't affect the implicit size of the popup,
+ // so the implicit sizes tested below are entirely based on the content size
+ control.background = null
+
+ // implicit size of the content
+ control.contentItem.implicitWidth = 10
+ compare(control.implicitWidth, 10 + control.leftPadding + control.rightPadding)
+ compare(control.width, control.implicitWidth)
+ compare(control.contentItem.width, control.availableWidth)
+
+ control.contentItem.implicitHeight = 20
+ compare(control.implicitHeight, 20 + control.topPadding + control.bottomPadding)
+ compare(control.height, control.implicitHeight)
+ compare(control.contentItem.height, control.availableHeight)
+
+ // implicit size of the popup
+ control.implicitWidth = 30
+ compare(control.implicitWidth, 30)
+ compare(control.width, 30)
+ compare(control.contentItem.width, control.availableWidth)
+
+ control.implicitHeight = 40
+ compare(control.implicitHeight, 40)
+ compare(control.height, 40)
+ compare(control.contentItem.height, control.availableHeight)
+
+ // set explicit size
+ control.width = 50
+ compare(control.implicitWidth, 30)
+ compare(control.width, 50)
+ compare(control.contentItem.width, control.availableWidth)
+
+ control.height = 60
+ compare(control.implicitHeight, 40)
+ compare(control.height, 60)
+ compare(control.contentItem.height, control.availableHeight)
+
+ // reset explicit size
+ control.width = undefined
+ compare(control.implicitWidth, 30)
+ compare(control.width, 30)
+ compare(control.contentItem.width, control.availableWidth)
+
+ control.height = undefined
+ compare(control.implicitHeight, 40)
+ compare(control.height, 40)
+ compare(control.contentItem.height, control.availableHeight)
+ }
+
+ function test_visible() {
+ var control = createTemporaryObject(popupTemplate, testCase, {visible: true})
+ verify(control)
+
+ // QTBUG-51989
+ tryCompare(control, "visible", true)
+
+ // QTBUG-55347
+ control.parent = null
+ verify(!control.visible)
+ }
+
+ Component {
+ id: overlayTest
+ ApplicationWindow {
+ property alias firstDrawer: firstDrawer
+ property alias secondDrawer: secondDrawer
+ property alias modalPopup: modalPopup
+ property alias modelessPopup: modelessPopup
+ property alias plainPopup: plainPopup
+ property alias modalPopupWithoutDim: modalPopupWithoutDim
+ visible: true
+ Drawer {
+ z: 0
+ id: firstDrawer
+ }
+ Drawer {
+ z: 1
+ id: secondDrawer
+ }
+ Popup {
+ id: modalPopup
+ z: 2
+ modal: true
+ exit: Transition { PauseAnimation { duration: 200 } }
+ }
+ Popup {
+ id: modelessPopup
+ z: 3
+ dim: true
+ exit: Transition { PauseAnimation { duration: 200 } }
+ }
+ Popup {
+ id: plainPopup
+ z: 4
+ enter: Transition { PauseAnimation { duration: 200 } }
+ exit: Transition { PauseAnimation { duration: 200 } }
+ }
+ Popup {
+ id: modalPopupWithoutDim
+ z: 5
+ dim: false
+ modal: true
+ exit: Transition { PauseAnimation { duration: 200 } }
+ }
+ }
+ }
+
+ function indexOf(array, item) {
+ for (var idx = 0; idx < array.length; ++idx) {
+ if (item === array[idx])
+ return idx;
+ }
+ return -1
+ }
+
+ function findOverlay(window, popup) {
+ var item = popup.contentItem.parent
+ var idx = indexOf(window.Overlay.overlay.children, item)
+ return window.Overlay.overlay.children[idx - 1]
+ }
+
+ function test_overlay() {
+ var window = createTemporaryObject(overlayTest, testCase)
+ verify(window)
+
+ window.requestActivate()
+ tryCompare(window, "active", true)
+
+ compare(window.Overlay.overlay.children.length, 0)
+
+ var firstOverlay = findOverlay(window, window.firstDrawer)
+ verify(!firstOverlay)
+ window.firstDrawer.open()
+ compare(window.Overlay.overlay.children.length, 2) // 1 drawer + 1 overlay
+ firstOverlay = findOverlay(window, window.firstDrawer)
+ verify(firstOverlay)
+ compare(firstOverlay.z, window.firstDrawer.z)
+ compare(indexOf(window.Overlay.overlay.children, firstOverlay),
+ indexOf(window.Overlay.overlay.children, window.firstDrawer.contentItem.parent) - 1)
+ tryCompare(firstOverlay, "opacity", 1.0)
+
+ var secondOverlay = findOverlay(window, window.secondDrawer)
+ verify(!secondOverlay)
+ window.secondDrawer.open()
+ compare(window.Overlay.overlay.children.length, 4) // 2 drawers + 2 overlays
+ secondOverlay = findOverlay(window, window.secondDrawer)
+ verify(secondOverlay)
+ compare(secondOverlay.z, window.secondDrawer.z)
+ compare(indexOf(window.Overlay.overlay.children, secondOverlay),
+ indexOf(window.Overlay.overlay.children, window.secondDrawer.contentItem.parent) - 1)
+ tryCompare(secondOverlay, "opacity", 1.0)
+
+ window.firstDrawer.close()
+ tryCompare(window.firstDrawer, "visible", false)
+ firstOverlay = findOverlay(window, window.firstDrawer)
+ verify(!firstOverlay)
+ compare(window.Overlay.overlay.children.length, 2) // 1 drawer + 1 overlay
+
+ window.secondDrawer.close()
+ tryCompare(window.secondDrawer, "visible", false)
+ secondOverlay = findOverlay(window, window.secondDrawer)
+ verify(!secondOverlay)
+ compare(window.Overlay.overlay.children.length, 0)
+
+ var modalOverlay = findOverlay(window, window.modalPopup)
+ verify(!modalOverlay)
+ window.modalPopup.open()
+ modalOverlay = findOverlay(window, window.modalPopup)
+ verify(modalOverlay)
+ compare(modalOverlay.z, window.modalPopup.z)
+ compare(window.modalPopup.visible, true)
+ tryCompare(modalOverlay, "opacity", 1.0)
+ compare(window.Overlay.overlay.children.length, 2) // 1 popup + 1 overlay
+
+ var modelessOverlay = findOverlay(window, window.modelessPopup)
+ verify(!modelessOverlay)
+ window.modelessPopup.open()
+ modelessOverlay = findOverlay(window, window.modelessPopup)
+ verify(modelessOverlay)
+ compare(modelessOverlay.z, window.modelessPopup.z)
+ compare(window.modelessPopup.visible, true)
+ tryCompare(modelessOverlay, "opacity", 1.0)
+ compare(window.Overlay.overlay.children.length, 4) // 2 popups + 2 overlays
+
+ window.modelessPopup.close()
+ tryCompare(window.modelessPopup, "visible", false)
+ modelessOverlay = findOverlay(window, window.modelessPopup)
+ verify(!modelessOverlay)
+ compare(window.Overlay.overlay.children.length, 2) // 1 popup + 1 overlay
+
+ compare(window.modalPopup.visible, true)
+ compare(modalOverlay.opacity, 1.0)
+
+ window.modalPopup.close()
+ tryCompare(window.modalPopup, "visible", false)
+ modalOverlay = findOverlay(window, window.modalPopup)
+ verify(!modalOverlay)
+ compare(window.Overlay.overlay.children.length, 0)
+
+ window.plainPopup.open()
+ tryCompare(window.plainPopup, "visible", true)
+ compare(window.Overlay.overlay.children.length, 1) // only popup added, no overlays involved
+
+ window.plainPopup.modal = true
+ compare(window.Overlay.overlay.children.length, 2) // overlay added
+
+ window.plainPopup.close()
+ tryCompare(window.plainPopup, "visible", false)
+ compare(window.Overlay.overlay.children.length, 0) // popup + overlay removed
+
+ window.modalPopupWithoutDim.open()
+ tryCompare(window.modalPopupWithoutDim, "visible", true)
+ compare(window.Overlay.overlay.children.length, 1) // only popup added, no overlays involved
+
+ window.modalPopupWithoutDim.dim = true
+ compare(window.Overlay.overlay.children.length, 2) // overlay added
+
+ window.modalPopupWithoutDim.close()
+ tryCompare(window.modalPopupWithoutDim, "visible", false)
+ compare(window.Overlay.overlay.children.length, 0) // popup + overlay removed
+ }
+
+ function test_attached_applicationwindow() {
+ var control = createTemporaryObject(popupControl, applicationWindow.contentItem)
+ verify(control)
+
+ var child = rect.createObject(control.contentItem)
+
+ compare(control.ApplicationWindow.window, applicationWindow)
+ compare(control.contentItem.ApplicationWindow.window, applicationWindow)
+ compare(child.ApplicationWindow.window, applicationWindow)
+
+ control.parent = null
+ compare(control.ApplicationWindow.window, null)
+ compare(control.contentItem.ApplicationWindow.window, null)
+ compare(child.ApplicationWindow.window, null)
+ }
+
+ Component {
+ id: pausePopup
+ Popup {
+ enter: Transition { PauseAnimation { duration: 200 } }
+ exit: Transition { PauseAnimation { duration: 200 } }
+ }
+ }
+
+ function test_openedClosed() {
+ var control = createTemporaryObject(pausePopup, testCase)
+ verify(control)
+
+ var openedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "opened"})
+ verify(openedSpy.valid)
+ var closedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "closed"})
+ verify(closedSpy.valid)
+ var openedChangeSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "openedChanged"})
+ verify(openedChangeSpy.valid)
+
+ control.open()
+ compare(control.visible, true)
+ compare(control.opened, false)
+ compare(openedChangeSpy.count, 0)
+ compare(openedSpy.count, 0)
+ tryCompare(openedSpy, "count", 1)
+ compare(control.opened, true)
+ compare(openedChangeSpy.count, 1)
+ compare(closedSpy.count, 0)
+
+ control.close()
+ compare(control.visible, true)
+ compare(control.opened, false)
+ compare(openedChangeSpy.count, 2)
+ compare(openedSpy.count, 1)
+ compare(closedSpy.count, 0)
+ tryCompare(closedSpy, "count", 1)
+ compare(control.opened, false)
+ compare(openedChangeSpy.count, 2)
+ compare(control.visible, false)
+ }
+
+ Component {
+ id: xyBindingLoop
+ ApplicationWindow {
+ id: window
+ width: 360
+ height: 360
+ visible: true
+ property alias popup: popup
+
+ Popup {
+ id: popup
+ visible: true
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ Label {
+ text: "Content"
+ anchors.fill: parent
+ }
+ }
+ }
+ }
+
+ function test_xyBindingLoop() {
+ var window = createTemporaryObject(xyBindingLoop, testCase)
+ var control = window.popup
+ waitForRendering(control.contentItem)
+ compare(control.x, (control.parent.width - control.width) / 2)
+ compare(control.y, (control.parent.height - control.height) / 2)
+ }
+
+ function test_windowParent() {
+ var control = createTemporaryObject(popupControl, applicationWindow, {width: 100, height: 100})
+ verify(control)
+
+ control.open()
+ verify(control.visible)
+ }
+
+ function test_deferredBackgroundSize() {
+ var control = createTemporaryObject(popupControl, testCase, {width: 200, height: 100})
+ verify(control)
+
+ compare(control.background.width, 200 + (control.background.leftInset || 0) + (control.background.rightInset || 0))
+ compare(control.background.height, 100 + (control.background.topInset || 0) + (control.background.bottomInset || 0))
+ }
+
+ function test_anchors() {
+ var control = createTemporaryObject(popupControl, applicationWindow.contentItem.Overlay.overlay,
+ { visible: true, width: 100, height: 100 })
+ verify(control)
+ verify(control.visible)
+ // If there is a transition then make sure it is finished
+ if (control.enter !== null)
+ tryCompare(control.enter, "running", false)
+ compare(control.parent, control.Overlay.overlay)
+ compare(control.x, 0)
+ compare(control.y, 0)
+
+ var overlay = control.Overlay.overlay
+ verify(overlay)
+
+ var centerInSpy = createTemporaryObject(signalSpy, testCase, { target: control.anchors, signalName: "centerInChanged" })
+ verify(centerInSpy.valid)
+
+ applicationWindow.visible = true
+ verify(waitForRendering(applicationWindow.contentItem))
+ verify(overlay.width > 0)
+ verify(overlay.height > 0)
+
+ // Center the popup in the window via the overlay.
+ control.anchors.centerIn = Qt.binding(function() { return control.parent; })
+ compare(centerInSpy.count, 1)
+ compare(control.x, (overlay.width - (control.width * control.scale)) / 2)
+ compare(control.y, (overlay.height - (control.width * control.scale)) / 2)
+
+ // Ensure that it warns when trying to set it to an item that's not its parent.
+ var anotherItem = createTemporaryObject(rect, applicationWindow.contentItem, { x: 100, y: 100, width: 50, height: 50 })
+ verify(anotherItem)
+
+ ignoreWarning(Qt.resolvedUrl("tst_popup.qml") + ":77:9: QML Popup: Popup can only be centered within its immediate parent or Overlay.overlay")
+ control.anchors.centerIn = anotherItem
+ // The property will change, because we can't be sure that the parent
+ // in QQuickPopupAnchors::setCenterIn() is the final parent, as some reparenting can happen.
+ // We still expect the warning from QQuickPopupPositioner::reposition() though.
+ compare(centerInSpy.count, 2)
+ compare(control.anchors.centerIn, anotherItem)
+
+ // The binding to the popup's parent was broken above, so restore it.
+ control.anchors.centerIn = Qt.binding(function() { return control.parent; })
+ compare(centerInSpy.count, 3)
+
+ // Change the popup's parent and ensure that it's anchored accordingly.
+ control.parent = Qt.binding(function() { return anotherItem; })
+ compare(control.parent, anotherItem)
+ compare(control.anchors.centerIn, anotherItem)
+ compare(centerInSpy.count, 4)
+ compare(control.x, (anotherItem.width - (control.width * control.scale)) / 2)
+ compare(control.y, (anotherItem.height - (control.height * control.scale)) / 2)
+
+ // Check that anchors.centerIn beats x and y coordinates as it does in QQuickItem.
+ control.x = 33;
+ control.y = 44;
+ compare(control.x, (anotherItem.width - (control.width * control.scale)) / 2)
+ compare(control.y, (anotherItem.height - (control.height * control.scale)) / 2)
+
+ // Check that the popup's x and y coordinates are restored when it's no longer centered.
+ control.anchors.centerIn = undefined
+ compare(centerInSpy.count, 5)
+ compare(control.x, 33)
+ compare(control.y, 44)
+
+ // Test centering in the overlay while having a different parent (anotherItem).
+ control.anchors.centerIn = overlay
+ compare(centerInSpy.count, 6)
+ compare(control.x, (overlay.width - (control.width * control.scale)) / 2)
+ compare(control.y, (overlay.height - (control.height * control.scale)) / 2)
+
+ // TODO: do this properly by creating a component or something
+ applicationWindow.visible = false
+ }
+
+ Component {
+ id: shortcutWindowComponent
+ ApplicationWindow {
+ id: window
+ width: 360
+ height: 360
+ visible: true
+
+ property alias popup: popup
+ property alias shortcut: shortcut
+
+ Popup {
+ id: popup
+
+ Shortcut {
+ id: shortcut
+ sequence: "A"
+ onActivated: popup.visible = !popup.visible
+ }
+ }
+ }
+ }
+
+ function test_shortcut() {
+ // Tests that a Shortcut with Qt.WindowShortcut context
+ // that is declared within a Popup is activated.
+ var window = createTemporaryObject(shortcutWindowComponent, testCase)
+ var control = window.popup
+
+ window.requestActivate()
+ tryCompare(window, "active", true)
+
+ var shortcutActivatedSpy = createTemporaryObject(signalSpy, testCase,
+ { target: window.shortcut, signalName: "activated"} )
+ verify(shortcutActivatedSpy.valid)
+
+ waitForRendering(window.contentItem)
+ keyClick(Qt.Key_A)
+ compare(shortcutActivatedSpy.count, 1)
+ tryCompare(control, "visible", true)
+
+ keyClick(Qt.Key_A)
+ compare(shortcutActivatedSpy.count, 2)
+ tryCompare(control, "visible", false)
+ }
+
+ Component {
+ id: mousePropagationComponent
+ ApplicationWindow {
+ id: window
+ width: 360
+ height: 360
+ visible: true
+
+ property alias popup: popup
+ property alias popupTitle: popupTitle
+ property alias popupContent: popupContent
+ property bool gotMouseEvent: false
+
+ MouseArea {
+ id: windowMouseArea
+ enabled: true
+ anchors.fill: parent
+ onPressed: gotMouseEvent = true
+ }
+
+
+ Popup {
+ id: popup
+ width: 200
+ height: 200
+
+ background: Rectangle {
+ id: popupContent
+ color: "#505050"
+ Rectangle {
+ id: popupTitle
+ width: parent.width
+ height: 30
+ color: "blue"
+
+ property point pressedPosition: Qt.point(0, 0)
+
+ MouseArea {
+ enabled: true
+ propagateComposedEvents: true
+ anchors.fill: parent
+ onPressed: (mouse) => {
+ popupTitle.pressedPosition = Qt.point(mouse.x, mouse.y)
+ }
+ onPositionChanged: (mouse) => {
+ popup.x += mouse.x - popupTitle.pressedPosition.x
+ popup.y += mouse.y - popupTitle.pressedPosition.y
+ }
+ onReleased: (mouse) => {
+ popupTitle.pressedPosition = Qt.point(0, 0)
+ }
+ }
+ }
+ }
+
+ Component.onCompleted: {
+ x = parent.width / 2 - width / 2
+ y = parent.height / 2 - height / 2
+ }
+ }
+ }
+ }
+
+ function test_mousePropagation() {
+ // Tests that Popup ignores mouse events that it doesn't handle itself
+ // so that they propagate correctly.
+ let window = createTemporaryObject(mousePropagationComponent, testCase)
+ window.requestActivate()
+ tryCompare(window, "active", true)
+
+ let popup = window.popup
+ popup.open()
+
+ // mouse clicks into the popup must not propagate to the parent
+ mouseClick(window)
+ compare(window.gotMouseEvent, false)
+
+ let title = window.popupTitle
+ verify(title)
+
+ let pressPoint = Qt.point(title.width / 2, title.height / 2)
+ let oldPos = Qt.point(popup.x, popup.y)
+ mousePress(title, pressPoint.x, pressPoint.y)
+ fuzzyCompare(title.pressedPosition.x, pressPoint.x, 1)
+ fuzzyCompare(title.pressedPosition.y, pressPoint.y, 1)
+ mouseMove(title, pressPoint.x + 5, pressPoint.y + 5)
+ fuzzyCompare(popup.x, oldPos.x + 5, 1)
+ fuzzyCompare(popup.y, oldPos.y + 5, 1)
+ mouseRelease(title, pressPoint.x, pressPoint.y)
+ compare(title.pressedPosition, Qt.point(0, 0))
+
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_progressbar.qml b/tests/auto/quickcontrols2/controls/data/tst_progressbar.qml
new file mode 100644
index 0000000000..2d26440927
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_progressbar.qml
@@ -0,0 +1,196 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "ProgressBar"
+
+ Component {
+ id: progressBar
+ ProgressBar { }
+ }
+
+ function test_value() {
+ var control = createTemporaryObject(progressBar, testCase)
+ verify(control)
+
+ compare(control.value, 0.0)
+ control.value = 0.5
+ compare(control.value, 0.5)
+ control.value = 1.0
+ compare(control.value, 1.0)
+ control.value = -1.0
+ compare(control.value, 0.0)
+ control.value = 2.0
+ compare(control.value, 1.0)
+ }
+
+ function test_range() {
+ var control = createTemporaryObject(progressBar, testCase, {from: 0, to: 100, value: 50})
+ verify(control)
+
+ compare(control.from, 0)
+ compare(control.to, 100)
+ compare(control.value, 50)
+ compare(control.position, 0.5)
+
+ control.value = 1000
+ compare(control.value, 100)
+ compare(control.position, 1)
+
+ control.value = -1
+ compare(control.value, 0)
+ compare(control.position, 0)
+
+ control.from = 25
+ compare(control.from, 25)
+ compare(control.value, 25)
+ compare(control.position, 0)
+
+ control.to = 75
+ compare(control.to, 75)
+ compare(control.value, 25)
+ compare(control.position, 0)
+
+ control.value = 50
+ compare(control.value, 50)
+ compare(control.position, 0.5)
+ }
+
+ function test_inverted() {
+ var control = createTemporaryObject(progressBar, testCase, {from: 1.0, to: -1.0})
+ verify(control)
+
+ compare(control.from, 1.0)
+ compare(control.to, -1.0)
+ compare(control.value, 0.0)
+ compare(control.position, 0.5)
+
+ control.value = 2.0
+ compare(control.value, 1.0)
+ compare(control.position, 0.0)
+
+ control.value = -2.0
+ compare(control.value, -1.0)
+ compare(control.position, 1.0)
+
+ control.value = 0.0
+ compare(control.value, 0.0)
+ compare(control.position, 0.5)
+ }
+
+ function test_position() {
+ var control = createTemporaryObject(progressBar, testCase)
+ verify(control)
+
+ compare(control.value, 0)
+ compare(control.position, 0)
+
+ control.value = 0.25
+ compare(control.value, 0.25)
+ compare(control.position, 0.25)
+
+ control.value = 0.75
+ compare(control.value, 0.75)
+ compare(control.position, 0.75)
+ }
+
+ function test_visualPosition() {
+ var control = createTemporaryObject(progressBar, testCase)
+ verify(control)
+
+ compare(control.value, 0)
+ compare(control.visualPosition, 0)
+
+ control.value = 0.25
+ compare(control.value, 0.25)
+ compare(control.visualPosition, 0.25)
+
+ // RTL locale
+ control.locale = Qt.locale("ar_EG")
+ compare(control.visualPosition, 0.25)
+
+ // RTL locale + LayoutMirroring
+ control.LayoutMirroring.enabled = true
+ compare(control.visualPosition, 0.75)
+
+ // LTR locale + LayoutMirroring
+ control.locale = Qt.locale("en_US")
+ compare(control.visualPosition, 0.75)
+
+ // LTR locale
+ control.LayoutMirroring.enabled = false
+ compare(control.visualPosition, 0.25)
+
+ // LayoutMirroring
+ control.LayoutMirroring.enabled = true
+ compare(control.visualPosition, 0.75)
+ }
+
+ function test_indeterminate() {
+ var control = createTemporaryObject(progressBar, testCase)
+ verify(control)
+ compare(control.indeterminate, false)
+
+ wait(100)
+ control.indeterminate = true
+ wait(100)
+ // Shouldn't crash...
+ control.indeterminate = false
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_radiobutton.qml b/tests/auto/quickcontrols2/controls/data/tst_radiobutton.qml
new file mode 100644
index 0000000000..42ef9a1547
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_radiobutton.qml
@@ -0,0 +1,377 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "RadioButton"
+
+ Component {
+ id: radioButton
+ RadioButton { }
+ }
+
+ Component {
+ id: signalSequenceSpy
+ SignalSequenceSpy {
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"]
+ }
+ }
+
+ function test_text() {
+ var control = createTemporaryObject(radioButton, testCase)
+ verify(control)
+
+ compare(control.text, "")
+ control.text = "RadioButton"
+ compare(control.text, "RadioButton")
+ control.text = ""
+ compare(control.text, "")
+ }
+
+ function test_checked() {
+ var control = createTemporaryObject(radioButton, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ sequenceSpy.expectedSequence = [] // No change expected
+ compare(control.checked, false)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.expectedSequence = ["checkedChanged"]
+ control.checked = true
+ compare(control.checked, true)
+ verify(sequenceSpy.success)
+
+ sequenceSpy.reset()
+ control.checked = false
+ compare(control.checked, false)
+ verify(sequenceSpy.success)
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(radioButton, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // attempt uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // release outside
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }]]
+ mouseMove(control, control.width * 2, control.height * 2, 0)
+ compare(control.pressed, false)
+ sequenceSpy.expectedSequence = [["canceled", { "pressed": false, "checked": true }]]
+ mouseRelease(control, control.width * 2, control.height * 2, Qt.LeftButton)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // right button
+ sequenceSpy.expectedSequence = []
+ mousePress(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ }
+
+ function test_touch() {
+ var control = createTemporaryObject(radioButton, testCase)
+ verify(control)
+
+ var touch = touchEvent(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // attempt uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+
+ // release outside
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(sequenceSpy.success)
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }]]
+ touch.move(0, control, control.width * 2, control.height * 2).commit()
+ compare(control.pressed, false)
+ sequenceSpy.expectedSequence = [["canceled", { "pressed": false, "checked": true }]]
+ touch.release(0, control, control.width * 2, control.height * 2).commit()
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(sequenceSpy.success)
+ }
+
+ function test_keys() {
+ var control = createTemporaryObject(radioButton, testCase)
+ verify(control)
+
+ var sequenceSpy = signalSequenceSpy.createObject(control, {target: control})
+
+ sequenceSpy.expectedSequence = []
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+ verify(sequenceSpy.success)
+
+ // check
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, true)
+ verify(sequenceSpy.success)
+
+ // attempt uncheck
+ sequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": true }],
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, true)
+ verify(sequenceSpy.success)
+
+ // no change
+ sequenceSpy.expectedSequence = []
+ var keys = [Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab]
+ for (var i = 0; i < keys.length; ++i) {
+ sequenceSpy.reset()
+ keyClick(keys[i])
+ compare(control.checked, true)
+ verify(sequenceSpy.success)
+ }
+ }
+
+ Component {
+ id: twoRadioButtons
+ Item {
+ property RadioButton rb1: RadioButton { id: rb1 }
+ property RadioButton rb2: RadioButton { id: rb2; checked: rb1.checked; enabled: false }
+ }
+ }
+
+ function test_binding() {
+ var container = createTemporaryObject(twoRadioButtons, testCase)
+ verify(container)
+
+ compare(container.rb1.checked, false)
+ compare(container.rb2.checked, false)
+
+ container.rb1.checked = true
+ compare(container.rb1.checked, true)
+ compare(container.rb2.checked, true)
+
+ container.rb1.checked = false
+ compare(container.rb1.checked, false)
+ compare(container.rb2.checked, false)
+ }
+
+ Component {
+ id: radioButtonGroup
+ Column {
+ // auto-exclusive buttons behave as if they were in their own exclusive group
+ RadioButton { }
+ RadioButton { }
+
+ // explicitly grouped buttons are only exclusive with each other, not with
+ // auto-exclusive buttons, and the autoExclusive property is ignored
+ ButtonGroup { id: eg }
+ RadioButton { ButtonGroup.group: eg }
+ RadioButton { ButtonGroup.group: eg; autoExclusive: false }
+
+ ButtonGroup { id: eg2 }
+ RadioButton { id: rb1; Component.onCompleted: eg2.addButton(rb1) }
+ RadioButton { id: rb2; Component.onCompleted: eg2.addButton(rb2) }
+
+ // non-exclusive buttons don't affect the others
+ RadioButton { autoExclusive: false }
+ RadioButton { autoExclusive: false }
+ }
+ }
+
+ function test_autoExclusive() {
+ var container = createTemporaryObject(radioButtonGroup, testCase)
+ compare(container.children.length, 8)
+
+ var checkStates = [false, false, false, false, false, false, false, false]
+ for (var i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[0].checked = true
+ checkStates[0] = true
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[1].checked = true
+ checkStates[0] = false
+ checkStates[1] = true
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[2].checked = true
+ checkStates[2] = true
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[3].checked = true
+ checkStates[2] = false
+ checkStates[3] = true
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[4].checked = true
+ checkStates[4] = true
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[5].checked = true
+ checkStates[4] = false
+ checkStates[5] = true
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[6].checked = true
+ checkStates[6] = true
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[7].checked = true
+ checkStates[7] = true
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+
+ container.children[0].checked = true
+ checkStates[0] = true
+ checkStates[1] = false
+ for (i = 0; i < 8; ++i)
+ compare(container.children[i].checked, checkStates[i])
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(radioButton, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_radiodelegate.qml b/tests/auto/quickcontrols2/controls/data/tst_radiodelegate.qml
new file mode 100644
index 0000000000..87984b2c15
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_radiodelegate.qml
@@ -0,0 +1,173 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "RadioDelegate"
+
+ Component {
+ id: radioDelegate
+ RadioDelegate {}
+ }
+
+ // TODO: data-fy tst_radiobutton (rename to tst_radio?) so we don't duplicate its tests here?
+
+ function test_defaults() {
+ var control = createTemporaryObject(radioDelegate, testCase);
+ verify(control);
+ verify(!control.checked);
+ }
+
+ function test_checked() {
+ var control = createTemporaryObject(radioDelegate, testCase);
+ verify(control);
+
+ mouseClick(control);
+ verify(control.checked);
+
+ mouseClick(control);
+ verify(control.checked);
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(radioDelegate, testCase);
+ verify(control);
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset);
+ }
+
+ function test_spacing() {
+ var control = createTemporaryObject(radioDelegate, testCase, { text: "Some long, long, long text" })
+ verify(control)
+ verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
+
+ var textLabel = findChild(control.contentItem, "label")
+ verify(textLabel)
+
+ // The implicitWidth of the IconLabel that all buttons use as their contentItem should be
+ // equal to the implicitWidth of the Text and the radio indicator + spacing while no icon is set.
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing)
+
+ control.spacing += 100
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing)
+
+ compare(control.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing + control.leftPadding + control.rightPadding)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: RadioDelegate.IconOnly },
+ { "tag": "TextOnly", display: RadioDelegate.TextOnly },
+ { "tag": "TextUnderIcon", display: RadioDelegate.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: RadioDelegate.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: RadioDelegate.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: RadioDelegate.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: RadioDelegate.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: RadioDelegate.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(radioDelegate, testCase, {
+ text: "RadioDelegate",
+ display: data.display,
+ width: 400,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ var availableWidth = control.availableWidth - control.indicator.width - control.spacing
+ var indicatorOffset = control.mirrored ? control.indicator.width + control.spacing : 0
+
+ switch (control.display) {
+ case RadioDelegate.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, indicatorOffset + (availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case RadioDelegate.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, control.mirrored ? control.availableWidth - textLabel.width : 0)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case RadioDelegate.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, indicatorOffset + (availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, indicatorOffset + (availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case RadioDelegate.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_rangeslider.qml b/tests/auto/quickcontrols2/controls/data/tst_rangeslider.qml
new file mode 100644
index 0000000000..011e190e5a
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_rangeslider.qml
@@ -0,0 +1,1129 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "RangeSlider"
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component {
+ id: sliderComponent
+ RangeSlider {
+ id: slider
+
+ Component.onCompleted: {
+ first.handle.objectName = "firstHandle"
+ second.handle.objectName = "secondHandle"
+ }
+
+ Text {
+ text: "1"
+ parent: slider.first.handle
+ anchors.centerIn: parent
+ }
+
+ Text {
+ text: "2"
+ parent: slider.second.handle
+ anchors.centerIn: parent
+ }
+ }
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(sliderComponent, testCase)
+ verify(control)
+
+ compare(control.stepSize, 0)
+ compare(control.snapMode, RangeSlider.NoSnap)
+ compare(control.orientation, Qt.Horizontal)
+ compare(control.horizontal, true)
+ compare(control.vertical, false)
+ }
+
+ function test_values() {
+ var control = createTemporaryObject(sliderComponent, testCase)
+ verify(control)
+
+ compare(control.first.value, 0.0)
+ compare(control.second.value, 1.0)
+ control.first.value = 0.5
+ compare(control.first.value, 0.5)
+ control.first.value = 1.0
+ compare(control.first.value, 1.0)
+ control.first.value = -1.0
+ compare(control.first.value, 0.0)
+ control.first.value = 2.0
+ compare(control.first.value, 1.0)
+
+ control.first.value = 0
+ compare(control.first.value, 0.0)
+ control.second.value = 0.5
+ compare(control.second.value, 0.5)
+ control.first.value = 1
+ compare(control.first.value, 0.5)
+ control.second.value = 0
+ compare(control.second.value, 0.5)
+ }
+
+ function test_range() {
+ var control = createTemporaryObject(sliderComponent, testCase, { from: 0, to: 100, "first.value": 50, "second.value": 100 })
+ verify(control)
+
+ compare(control.from, 0)
+ compare(control.to, 100)
+ compare(control.first.value, 50)
+ compare(control.second.value, 100)
+ compare(control.first.position, 0.5)
+ compare(control.second.position, 1.0)
+
+ control.first.value = 1000
+ compare(control.first.value, 100)
+ compare(control.first.position, 1.0)
+
+ control.first.value = -1
+ compare(control.first.value, 0)
+ compare(control.first.position, 0)
+
+ control.from = 25
+ compare(control.from, 25)
+ compare(control.first.value, 25)
+ compare(control.first.position, 0)
+
+ control.to = 75
+ compare(control.to, 75)
+ compare(control.second.value, 75)
+ compare(control.second.position, 1.0)
+
+ control.first.value = 50
+ compare(control.first.value, 50)
+ compare(control.first.position, 0.5)
+ }
+
+ function test_setToFromUpdatesHandles() {
+ var control = createTemporaryObject(sliderComponent, testCase, { from: 0, to: 100, "first.value": 50, "second.value": 75 })
+ verify(control)
+
+ let firstPos = control.first.position
+ let secondPos = control.second.position
+
+ var firstPosChangesSpy = signalSpy.createObject(control, {target: control.first, signalName: "positionChanged"})
+ verify(firstPosChangesSpy.valid)
+
+ var secondPosChangesSpy = signalSpy.createObject(control, {target: control.second, signalName: "positionChanged"})
+ verify(secondPosChangesSpy.valid)
+
+ // Increasing the 'to' value, so the positions of the handles should be
+ // moved to the left (become smaller)
+ control.to = 200;
+ compare(firstPosChangesSpy.count, 1)
+ compare(secondPosChangesSpy.count, 1)
+ verify(control.first.position < firstPos)
+ verify(control.second.position < secondPos)
+
+ // resetting the values
+ control.to = 100
+ firstPosChangesSpy.clear()
+ secondPosChangesSpy.clear()
+ firstPos = control.first.position
+ secondPos = control.second.position
+
+ // Decreasing the 'from' value, so the positions of the handles should
+ // be moved to the right (become larger)
+ control.from = -100
+ compare(firstPosChangesSpy.count, 1)
+ compare(secondPosChangesSpy.count, 1)
+ verify(control.first.position > firstPos)
+ verify(control.second.position > secondPos)
+ }
+
+ function test_setValues() {
+ var control = createTemporaryObject(sliderComponent, testCase)
+ verify(control)
+
+ compare(control.from, 0)
+ compare(control.to, 1)
+ compare(control.first.value, 0)
+ compare(control.second.value, 1)
+ compare(control.first.position, 0.0)
+ compare(control.second.position, 1.0)
+
+ control.setValues(100, 200)
+ compare(control.first.value, 1)
+ compare(control.second.value, 1)
+ compare(control.first.position, 1.0)
+ compare(control.second.position, 1.0)
+
+ control.to = 300;
+ control.setValues(100, 200)
+ compare(control.first.value, 100)
+ compare(control.second.value, 200)
+ compare(control.first.position, 0.333333)
+ compare(control.second.position, 0.666666)
+ }
+
+ function test_inverted() {
+ var control = createTemporaryObject(sliderComponent, testCase, { from: 1.0, to: -1.0 })
+ verify(control)
+
+ compare(control.from, 1.0)
+ compare(control.to, -1.0)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.5)
+ compare(control.second.value, 0.0);
+ compare(control.second.position, 0.5);
+
+ control.first.value = 2.0
+ compare(control.first.value, 1.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.value, 0.0);
+ compare(control.second.position, 0.5);
+
+ control.first.value = -2.0
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.5)
+ compare(control.second.value, 0.0);
+ compare(control.second.position, 0.5);
+
+ control.first.value = 0.0
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.5)
+ compare(control.second.value, 0.0);
+ compare(control.second.position, 0.5);
+ }
+
+ function test_visualPosition() {
+ var control = createTemporaryObject(sliderComponent, testCase)
+ verify(control)
+
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.first.visualPosition, 0.0)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+ compare(control.second.visualPosition, 1.0)
+
+ control.first.value = 0.25
+ compare(control.first.value, 0.25)
+ compare(control.first.position, 0.25)
+ compare(control.first.visualPosition, 0.25)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+ compare(control.second.visualPosition, 1.0)
+
+ // RTL locale
+ control.locale = Qt.locale("ar_EG")
+ compare(control.first.visualPosition, 0.25)
+ compare(control.second.visualPosition, 1.0)
+
+ // RTL locale + LayoutMirroring
+ control.LayoutMirroring.enabled = true
+ compare(control.first.visualPosition, 0.75)
+ compare(control.second.visualPosition, 0.0)
+
+ // LTR locale + LayoutMirroring
+ control.locale = Qt.locale("en_US")
+ compare(control.first.visualPosition, 0.75)
+ compare(control.second.visualPosition, 0.0)
+
+ // LTR locale
+ control.LayoutMirroring.enabled = false
+ compare(control.first.visualPosition, 0.25)
+ compare(control.second.visualPosition, 1.0)
+
+ // LayoutMirroring
+ control.LayoutMirroring.enabled = true
+ compare(control.first.visualPosition, 0.75)
+ compare(control.second.visualPosition, 0.0)
+ }
+
+ function test_orientation() {
+ var control = createTemporaryObject(sliderComponent, testCase)
+ verify(control)
+
+ compare(control.orientation, Qt.Horizontal)
+ compare(control.horizontal, true)
+ compare(control.vertical, false)
+ verify(control.width > control.height)
+
+ control.orientation = Qt.Vertical
+ compare(control.orientation, Qt.Vertical)
+ compare(control.horizontal, false)
+ compare(control.vertical, true)
+ verify(control.width < control.height)
+ }
+
+ function test_mouse_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, live: false },
+ { tag: "vertical", orientation: Qt.Vertical, live: false },
+ { tag: "horizontal:live", orientation: Qt.Horizontal, live: true },
+ { tag: "vertical:live", orientation: Qt.Vertical, live: true }
+ ]
+ }
+
+ function test_mouse(data) {
+ var control = createTemporaryObject(sliderComponent, testCase, { orientation: data.orientation, live: data.live })
+ verify(control)
+
+ var firstPressedSpy = signalSpy.createObject(control, {target: control.first, signalName: "pressedChanged"})
+ verify(firstPressedSpy.valid)
+
+ var firstMovedSpy = signalSpy.createObject(control, {target: control.first, signalName: "moved"})
+ verify(firstMovedSpy.valid)
+
+ var secondPressedSpy = signalSpy.createObject(control, {target: control.second, signalName: "pressedChanged"})
+ verify(secondPressedSpy.valid)
+
+ var secondMovedSpy = signalSpy.createObject(control, {target: control.second, signalName: "moved"})
+ verify(secondMovedSpy.valid)
+
+ // Press and release the first handle without moving it.
+ mousePress(control, control.leftPadding, control.height - control.bottomPadding - 1, Qt.LeftButton)
+ compare(firstPressedSpy.count, 1)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 0)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ mouseRelease(control, control.leftPadding, control.height - control.bottomPadding - 1, Qt.LeftButton)
+ compare(firstPressedSpy.count, 2)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 0)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ // Press and release the second handle without moving it.
+ mousePress(control, control.width - control.rightPadding - 1, control.topPadding, Qt.LeftButton)
+ compare(firstPressedSpy.count, 2)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 1)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, true)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ mouseRelease(control, control.width - control.rightPadding - 1, control.topPadding, Qt.LeftButton)
+ compare(firstPressedSpy.count, 2)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 2)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ // Press and release on the bottom left corner of the control without moving the handle.
+ mousePress(control, 0, control.height - 1, Qt.LeftButton)
+ compare(firstPressedSpy.count, 3)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 2)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ mouseRelease(control, 0, control.height - 1, Qt.LeftButton)
+ compare(firstPressedSpy.count, 4)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 2)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ // Drag the first handle.
+ mousePress(control, control.leftPadding, control.height - control.bottomPadding - 1, Qt.LeftButton)
+ compare(firstPressedSpy.count, 5)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 2)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ var horizontal = control.orientation === Qt.Horizontal
+ var toX = horizontal ? control.width * 0.5 : control.first.handle.x
+ var toY = horizontal ? control.first.handle.y : control.height * 0.5
+ mouseMove(control, toX, toY)
+ compare(firstPressedSpy.count, 5)
+ compare(firstMovedSpy.count, 1)
+ compare(secondPressedSpy.count, 2)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, true)
+ compare(control.first.value, data.live ? 0.5 : 0.0)
+ compare(control.first.position, 0.5)
+ compare(control.first.visualPosition, 0.5)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+ compare(control.second.visualPosition, horizontal ? 1.0 : 0.0)
+
+ mouseRelease(control, toX, toY, Qt.LeftButton)
+ compare(firstPressedSpy.count, 6)
+ compare(firstMovedSpy.count, 1)
+ compare(secondPressedSpy.count, 2)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.5)
+ compare(control.first.position, 0.5)
+ compare(control.first.visualPosition, 0.5)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+ compare(control.second.visualPosition, horizontal ? 1.0 : 0.0)
+ }
+
+ function test_touch_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, live: false },
+ { tag: "vertical", orientation: Qt.Vertical, live: false },
+ { tag: "horizontal:live", orientation: Qt.Horizontal, live: true },
+ { tag: "vertical:live", orientation: Qt.Vertical, live: true }
+ ]
+ }
+
+ function test_touch(data) {
+ var control = createTemporaryObject(sliderComponent, testCase, { orientation: data.orientation, live: data.live })
+ verify(control)
+
+ var firstPressedSpy = signalSpy.createObject(control, {target: control.first, signalName: "pressedChanged"})
+ verify(firstPressedSpy.valid)
+
+ var firstMovedSpy = signalSpy.createObject(control, {target: control.first, signalName: "moved"})
+ verify(firstMovedSpy.valid)
+
+ var secondPressedSpy = signalSpy.createObject(control, {target: control.second, signalName: "pressedChanged"})
+ verify(secondPressedSpy.valid)
+
+ var secondMovedSpy = signalSpy.createObject(control, {target: control.second, signalName: "moved"})
+ verify(secondMovedSpy.valid)
+
+ // Press and release the first handle without moving it.
+ var touch = touchEvent(control)
+ touch.press(0, control, control.width * 0.25, control.height * 0.75).commit()
+ compare(firstPressedSpy.count, 1)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 0)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ touch.release(0, control, control.width * 0.25, control.height * 0.75).commit()
+ compare(firstPressedSpy.count, 2)
+ compare(firstMovedSpy.count, 0)
+ compare(secondPressedSpy.count, 0)
+ compare(secondMovedSpy.count, 0)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ // Press and release the second handle without moving it.
+ touch.press(0, control, control.width * 0.75, control.height * 0.25).commit()
+ compare(firstPressedSpy.count, 2)
+ compare(secondPressedSpy.count, 1)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, true)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ touch.release(0, control, control.width * 0.75, control.height * 0.25).commit()
+ compare(firstPressedSpy.count, 2)
+ compare(secondPressedSpy.count, 2)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ // Press and release on the bottom left corner of the control without moving the handle.
+ touch.press(0, control, 0, control.height - 1).commit()
+ compare(firstPressedSpy.count, 3)
+ compare(secondPressedSpy.count, 2)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ touch.release(0, control, 0, control.height - 1).commit()
+ compare(firstPressedSpy.count, 4)
+ compare(secondPressedSpy.count, 2)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ touch.press(0, control, control.first.handle.x, control.first.handle.y).commit()
+ compare(firstPressedSpy.count, 5)
+ compare(secondPressedSpy.count, 2)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+
+ // Drag the first handle.
+ var horizontal = control.orientation === Qt.Horizontal
+ var toX = horizontal ? control.width * 0.5 : control.first.handle.x
+ var toY = horizontal ? control.first.handle.y : control.height * 0.5
+ touch.move(0, control, toX, toY).commit()
+ compare(firstPressedSpy.count, 5)
+ compare(secondPressedSpy.count, 2)
+ compare(control.first.pressed, true)
+ compare(control.first.value, data.live ? 0.5 : 0.0)
+ compare(control.first.position, 0.5)
+ compare(control.first.visualPosition, 0.5)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+ compare(control.second.visualPosition, horizontal ? 1.0 : 0.0)
+
+ touch.release(0, control, toX, toY).commit()
+ compare(firstPressedSpy.count, 6)
+ compare(secondPressedSpy.count, 2)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.5)
+ compare(control.first.position, 0.5)
+ compare(control.first.visualPosition, 0.5)
+ compare(control.second.pressed, false)
+ compare(control.second.value, 1.0)
+ compare(control.second.position, 1.0)
+ compare(control.second.visualPosition, horizontal ? 1.0 : 0.0)
+ }
+
+ function test_multiTouch() {
+ var control1 = createTemporaryObject(sliderComponent, testCase)
+ verify(control1)
+
+ // press and move the first handle of the first slider
+ var touch = touchEvent(control1)
+ touch.press(0, control1, 0, 0).commit().move(0, control1, control1.width / 2, control1.height / 2).commit()
+ compare(control1.first.pressed, true)
+ compare(control1.first.position, 0.5)
+ compare(control1.second.pressed, false)
+ compare(control1.second.position, 1.0)
+
+ // press and move the second handle of the first slider
+ touch.stationary(0).press(1, control1, control1.width - 1, control1.height - 1).commit()
+ touch.stationary(0).move(1, control1, control1.width / 2, control1.height / 2).commit()
+ compare(control1.first.pressed, true)
+ compare(control1.first.position, 0.5)
+ compare(control1.second.pressed, true)
+ compare(control1.second.position, 0.5)
+
+ var control2 = createTemporaryObject(sliderComponent, testCase, {y: control1.height})
+ verify(control2)
+
+ // press and move the first handle of the second slider
+ touch.stationary(0).stationary(1).press(2, control2, 0, 0).commit()
+ touch.stationary(0).stationary(1).move(2, control2, control2.width / 2, control2.height / 2).commit()
+ compare(control1.first.pressed, true)
+ compare(control1.first.position, 0.5)
+ compare(control1.second.pressed, true)
+ compare(control1.second.position, 0.5)
+ compare(control2.first.pressed, true)
+ compare(control2.first.position, 0.5)
+ compare(control2.second.pressed, false)
+ compare(control2.second.position, 1.0)
+
+ // press and move the second handle of the second slider
+ touch.stationary(0).stationary(1).stationary(2).press(3, control2, control2.width - 1, control2.height - 1).commit()
+ touch.stationary(0).stationary(1).stationary(2).move(3, control2, control2.width / 2, control2.height / 2).commit()
+ compare(control1.first.pressed, true)
+ compare(control1.first.position, 0.5)
+ compare(control1.second.pressed, true)
+ compare(control1.second.position, 0.5)
+ compare(control2.first.pressed, true)
+ compare(control2.first.position, 0.5)
+ compare(control2.second.pressed, true)
+ compare(control2.second.position, 0.5)
+
+ // release the both handles of the both sliders
+ touch.release(0, control1).release(1, control1).release(2, control2).release(3, control2).commit()
+ compare(control1.first.pressed, false)
+ compare(control1.first.position, 0.5)
+ compare(control1.second.pressed, false)
+ compare(control1.second.position, 0.5)
+ compare(control2.first.pressed, false)
+ compare(control2.first.position, 0.5)
+ compare(control2.second.pressed, false)
+ compare(control2.second.position, 0.5)
+ }
+
+ function test_overlappingHandles() {
+ var control = createTemporaryObject(sliderComponent, testCase)
+ verify(control)
+
+ // By default, we force the second handle to be after the first in
+ // terms of stacking order *and* z value.
+ compare(control.second.handle.z, 1)
+ compare(control.first.handle.z, 0)
+ control.first.value = 0
+ control.second.value = 0
+
+ // When both handles overlap, only the handle with the higher Z value
+ // should be hovered.
+ mouseMove(control, control.second.handle.x, control.second.handle.y)
+ compare(control.second.hovered, true)
+ compare(control.first.hovered, false)
+
+ // Both are at the same position, so it doesn't matter whose coordinates we use.
+ mousePress(control, control.first.handle.x, control.first.handle.y, Qt.LeftButton)
+ verify(control.second.pressed)
+ compare(control.second.handle.z, 1)
+ compare(control.first.handle.z, 0)
+
+ // Move the second handle out of the way.
+ mouseMove(control, control.width, control.first.handle.y)
+ mouseRelease(control, control.width, control.first.handle.y, Qt.LeftButton)
+ verify(!control.second.pressed)
+ compare(control.second.value, 1.0)
+ compare(control.second.handle.z, 1)
+ compare(control.first.handle.z, 0)
+
+ // The first handle should not be hovered.
+ compare(control.first.hovered, false)
+
+ // Move the first handle on top of the second.
+ mousePress(control, control.first.handle.x, control.first.handle.y, Qt.LeftButton)
+ verify(control.first.pressed)
+ compare(control.first.handle.z, 1)
+ compare(control.second.handle.z, 0)
+
+ mouseMove(control, control.width, control.first.handle.y)
+ mouseRelease(control, control.width, control.first.handle.y, Qt.LeftButton)
+ verify(!control.first.pressed)
+ compare(control.first.handle.z, 1)
+ compare(control.second.handle.z, 0)
+
+ // The most recently pressed handle (the first) should have the higher z value.
+ mousePress(control, control.first.handle.x, control.first.handle.y, Qt.LeftButton)
+ verify(control.first.pressed)
+ compare(control.first.handle.z, 1)
+ compare(control.second.handle.z, 0)
+
+ mouseRelease(control, control.first.handle.x, control.first.handle.y, Qt.LeftButton)
+ verify(!control.first.pressed)
+ compare(control.first.handle.z, 1)
+ compare(control.second.handle.z, 0)
+ }
+
+ function test_keys_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, decrease: Qt.Key_Left, increase: Qt.Key_Right },
+ { tag: "vertical", orientation: Qt.Vertical, decrease: Qt.Key_Down, increase: Qt.Key_Up }
+ ]
+ }
+
+ function test_keys(data) {
+ var control = createTemporaryObject(sliderComponent, testCase, { orientation: data.orientation })
+ verify(control)
+
+ var pressedCount = 0
+
+ var firstPressedSpy = signalSpy.createObject(control, {target: control.first, signalName: "pressedChanged"})
+ verify(firstPressedSpy.valid)
+
+ control.first.handle.forceActiveFocus()
+ verify(control.first.handle.activeFocus)
+
+ control.first.value = 0.5
+
+ for (var d1 = 1; d1 <= 10; ++d1) {
+ keyPress(data.decrease)
+ compare(control.first.pressed, true)
+ compare(firstPressedSpy.count, ++pressedCount)
+
+ compare(control.first.value, Math.max(0.0, 0.5 - d1 * 0.1))
+ compare(control.first.value, control.first.position)
+
+ keyRelease(data.decrease)
+ compare(control.first.pressed, false)
+ compare(firstPressedSpy.count, ++pressedCount)
+ }
+
+ for (var i1 = 1; i1 <= 20; ++i1) {
+ keyPress(data.increase)
+ compare(control.first.pressed, true)
+ compare(firstPressedSpy.count, ++pressedCount)
+
+ compare(control.first.value, Math.min(1.0, 0.0 + i1 * 0.1))
+ compare(control.first.value, control.first.position)
+
+ keyRelease(data.increase)
+ compare(control.first.pressed, false)
+ compare(firstPressedSpy.count, ++pressedCount)
+ }
+
+ control.first.value = 0;
+ control.stepSize = 0.25
+
+ pressedCount = 0;
+ var secondPressedSpy = signalSpy.createObject(control, {target: control.second, signalName: "pressedChanged"})
+ verify(secondPressedSpy.valid)
+
+ control.second.handle.forceActiveFocus()
+ verify(control.second.handle.activeFocus)
+
+ for (var d2 = 1; d2 <= 10; ++d2) {
+ keyPress(data.decrease)
+ compare(control.second.pressed, true)
+ compare(secondPressedSpy.count, ++pressedCount)
+
+ compare(control.second.value, Math.max(0.0, 1.0 - d2 * 0.25))
+ compare(control.second.value, control.second.position)
+
+ keyRelease(data.decrease)
+ compare(control.second.pressed, false)
+ compare(secondPressedSpy.count, ++pressedCount)
+ }
+
+ for (var i2 = 1; i2 <= 10; ++i2) {
+ keyPress(data.increase)
+ compare(control.second.pressed, true)
+ compare(secondPressedSpy.count, ++pressedCount)
+
+ compare(control.second.value, Math.min(1.0, 0.0 + i2 * 0.25))
+ compare(control.second.value, control.second.position)
+
+ keyRelease(data.increase)
+ compare(control.second.pressed, false)
+ compare(secondPressedSpy.count, ++pressedCount)
+ }
+ }
+
+ function test_padding() {
+ // test with "unbalanced" paddings (left padding != right padding) to ensure
+ // that the slider position calculation is done taking padding into account
+ // ==> the position is _not_ 0.5 in the middle of the control
+ var control = createTemporaryObject(sliderComponent, testCase, { leftPadding: 10, rightPadding: 20, live: false })
+ verify(control)
+
+ var firstPressedSpy = signalSpy.createObject(control, {target: control.first, signalName: "pressedChanged"})
+ verify(firstPressedSpy.valid)
+
+ mousePress(control, control.first.handle.x, control.first.handle.y, Qt.LeftButton)
+ compare(firstPressedSpy.count, 1)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.first.visualPosition, 0.0)
+
+ mouseMove(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, 0)
+ compare(firstPressedSpy.count, 1)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.5)
+ compare(control.first.visualPosition, 0.5)
+
+ mouseMove(control, control.width * 0.5, control.height * 0.5, 0)
+ compare(firstPressedSpy.count, 1)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ verify(control.first.position > 0.5)
+ verify(control.first.visualPosition > 0.5)
+
+ mouseRelease(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, Qt.LeftButton)
+ compare(firstPressedSpy.count, 2)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.5)
+ compare(control.first.position, 0.5)
+ compare(control.first.visualPosition, 0.5)
+
+ // RTL
+ control.first.value = 0
+ control.locale = Qt.locale("ar_EG")
+
+ mousePress(control, control.first.handle.x, control.first.handle.y, Qt.LeftButton)
+ compare(firstPressedSpy.count, 3)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.0)
+ compare(control.first.visualPosition, 0.0)
+
+ mouseMove(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, 0)
+ compare(firstPressedSpy.count, 3)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ compare(control.first.position, 0.5)
+ compare(control.first.visualPosition, 0.5)
+
+ mouseMove(control, control.width * 0.5, control.height * 0.5, 0)
+ compare(firstPressedSpy.count, 3)
+ compare(control.first.pressed, true)
+ compare(control.first.value, 0.0)
+ verify(control.first.position > 0.5)
+ verify(control.first.visualPosition > 0.5)
+
+ mouseRelease(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, Qt.LeftButton)
+ compare(firstPressedSpy.count, 4)
+ compare(control.first.pressed, false)
+ compare(control.first.value, 0.5)
+ compare(control.first.position, 0.5)
+ compare(control.first.visualPosition, 0.5)
+ }
+
+ function test_snapMode_data(immediate) {
+ return [
+ { tag: "NoSnap", snapMode: RangeSlider.NoSnap, from: 0, to: 2, values: [0, 0, 0.25], positions: [0, 0.1, 0.1] },
+ { tag: "SnapAlways (0..2)", snapMode: RangeSlider.SnapAlways, from: 0, to: 2, values: [0.0, 0.0, 0.2], positions: [0.0, 0.1, 0.1] },
+ { tag: "SnapAlways (1..3)", snapMode: RangeSlider.SnapAlways, from: 1, to: 3, values: [1.0, 1.0, 1.2], positions: [0.0, 0.1, 0.1] },
+ { tag: "SnapAlways (-1..1)", snapMode: RangeSlider.SnapAlways, from: -1, to: 1, values: [0.0, 0.0, -0.8], positions: [immediate ? 0.0 : 0.5, 0.1, 0.1] },
+ { tag: "SnapAlways (1..-1)", snapMode: RangeSlider.SnapAlways, from: 1, to: -1, values: [0.0, 0.0, 0.8], positions: [immediate ? 0.0 : 0.5, 0.1, 0.1] },
+ { tag: "SnapOnRelease (0..2)", snapMode: RangeSlider.SnapOnRelease, from: 0, to: 2, values: [0.0, 0.0, 0.2], positions: [0.0, 0.1, 0.1] },
+ { tag: "SnapOnRelease (1..3)", snapMode: RangeSlider.SnapOnRelease, from: 1, to: 3, values: [1.0, 1.0, 1.2], positions: [0.0, 0.1, 0.1] },
+ { tag: "SnapOnRelease (-1..1)", snapMode: RangeSlider.SnapOnRelease, from: -1, to: 1, values: [0.0, 0.0, -0.8], positions: [immediate ? 0.0 : 0.5, 0.1, 0.1] },
+ { tag: "SnapOnRelease (1..-1)", snapMode: RangeSlider.SnapOnRelease, from: 1, to: -1, values: [0.0, 0.0, 0.8], positions: [immediate ? 0.0 : 0.5, 0.1, 0.1] }
+ ]
+ }
+
+ function test_snapMode_mouse_data() {
+ return test_snapMode_data(true)
+ }
+
+ function test_snapMode_mouse(data) {
+ var control = createTemporaryObject(sliderComponent, testCase, {snapMode: data.snapMode, from: data.from, to: data.to, stepSize: 0.2, live: false})
+ verify(control)
+
+ control.first.value = 0
+ control.second.value = data.to
+
+ var fuzz = 0.05
+
+ mousePress(control, control.leftPadding)
+ compare(control.first.pressed, true)
+ compare(control.first.value, data.values[0])
+ compare(control.first.position, data.positions[0])
+
+ mouseMove(control, control.leftPadding + 0.15 * (control.availableWidth + control.first.handle.width / 2))
+ compare(control.first.pressed, true)
+ fuzzyCompare(control.first.value, data.values[1], fuzz)
+ fuzzyCompare(control.first.position, data.positions[1], fuzz)
+
+ mouseRelease(control, control.leftPadding + 0.15 * (control.availableWidth + control.first.handle.width / 2))
+ compare(control.first.pressed, false)
+ fuzzyCompare(control.first.value, data.values[2], fuzz)
+ fuzzyCompare(control.first.position, data.positions[2], fuzz)
+ }
+
+ function test_snapMode_touch_data() {
+ return test_snapMode_data(false)
+ }
+
+ function test_snapMode_touch(data) {
+ var control = createTemporaryObject(sliderComponent, testCase, {snapMode: data.snapMode, from: data.from, to: data.to, stepSize: 0.2, live: false})
+ verify(control)
+
+ control.first.value = 0
+ control.second.value = data.to
+
+ var fuzz = 0.05
+
+ var touch = touchEvent(control)
+ touch.press(0, control, control.first.handle.x, control.first.handle.y).commit()
+ compare(control.first.pressed, true)
+ compare(control.first.value, data.values[0])
+ compare(control.first.position, data.positions[0])
+
+ touch.move(0, control, control.leftPadding + 0.15 * (control.availableWidth + control.first.handle.width / 2)).commit()
+ compare(control.first.pressed, true)
+ fuzzyCompare(control.first.value, data.values[1], fuzz)
+ fuzzyCompare(control.first.position, data.positions[1], fuzz)
+
+ touch.release(0, control, control.leftPadding + 0.15 * (control.availableWidth + control.first.handle.width / 2)).commit()
+ compare(control.first.pressed, false)
+ fuzzyCompare(control.first.value, data.values[2], fuzz)
+ fuzzyCompare(control.first.position, data.positions[2], fuzz)
+ }
+
+ function test_focus() {
+ var control = createTemporaryObject(sliderComponent, testCase)
+ verify(control)
+
+ compare(control.activeFocus, false)
+
+ // focus is forwarded to the first handle
+ control.forceActiveFocus()
+ compare(control.activeFocus, true)
+ compare(control.first.handle.activeFocus, true)
+ compare(control.second.handle.activeFocus, false)
+
+ // move focus to the second handle
+ control.second.handle.forceActiveFocus()
+ compare(control.activeFocus, true)
+ compare(control.first.handle.activeFocus, false)
+ compare(control.second.handle.activeFocus, true)
+
+ // clear focus
+ control.focus = false
+ compare(control.activeFocus, false)
+ compare(control.first.handle.activeFocus, false)
+ compare(control.second.handle.activeFocus, false)
+
+ // focus is forwarded to the second handle (where it previously was in the focus scope)
+ control.forceActiveFocus()
+ compare(control.activeFocus, true)
+ compare(control.first.handle.activeFocus, false)
+ compare(control.second.handle.activeFocus, true)
+ }
+
+ function test_hover_data() {
+ return [
+ { tag: "first:true", node: "first", hoverEnabled: true },
+ { tag: "first:false", node: "first", hoverEnabled: false },
+ { tag: "second:true", node: "second", hoverEnabled: true },
+ { tag: "second:false", node: "second", hoverEnabled: false }
+ ]
+ }
+
+ function test_hover(data) {
+ var control = createTemporaryObject(sliderComponent, testCase, {hoverEnabled: data.hoverEnabled})
+ verify(control)
+
+ var node = control[data.node]
+ compare(control.hovered, false)
+ compare(node.hovered, false)
+
+ mouseMove(control, node.handle.x + node.handle.width / 2, node.handle.y + node.handle.height / 2)
+ compare(control.hovered, data.hoverEnabled)
+ compare(node.hovered, data.hoverEnabled && node.handle.enabled)
+
+ mouseMove(control, node.handle.x - 1, node.handle.y - 1)
+ compare(node.hovered, false)
+ }
+
+ function test_nullHandles() {
+ var control = createTemporaryObject(sliderComponent, testCase, {"second.value": 1})
+ verify(control)
+
+ verify(control.first.handle)
+ verify(control.second.handle)
+
+ control.first.handle = null
+ control.second.handle = null
+
+ mousePress(control, control.leftPadding, control.height / 2)
+ verify(control.first.pressed, true)
+ compare(control.second.pressed, false)
+
+ mouseRelease(control, control.leftPadding, control.height / 2)
+ compare(control.first.pressed, false)
+ compare(control.second.pressed, false)
+
+ mousePress(control, control.width - control.rightPadding - 1, control.height / 2)
+ compare(control.first.pressed, false)
+ compare(control.second.pressed, true)
+
+ mouseRelease(control, control.width - control.rightPadding - 1, control.height / 2)
+ compare(control.first.pressed, false)
+ compare(control.second.pressed, false)
+ }
+
+ function test_touchDragThreshold_data() {
+ var d1 = 3; var d2 = 7;
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, dx1: d1, dy1: 0, dx2: d2, dy2: 0 },
+ { tag: "vertical", orientation: Qt.Vertical, dx1: 0, dy1: -d1, dx2: 0, dy2: -d2 },
+ { tag: "horizontal2", orientation: Qt.Horizontal, dx1: -d1, dy1: 0, dx2: -d2, dy2: 0 },
+ { tag: "vertical2", orientation: Qt.Vertical, dx1: 0, dy1: d1, dx2: 0, dy2: d2 },
+ ]
+ }
+
+ function test_touchDragThreshold(data) {
+ var control = createTemporaryObject(sliderComponent, testCase, {touchDragThreshold: 10, live: true, orientation: data.orientation, "first.value": 0, "second.value": 1})
+ verify(control)
+ compare(control.touchDragThreshold, 10)
+
+ var valueChangedCount = 0
+ var valueChangedSpy = signalSpy.createObject(control, {target: control, signalName: "touchDragThresholdChanged"})
+ verify(valueChangedSpy.valid)
+
+ control.touchDragThreshold = undefined
+ compare(control.touchDragThreshold, -1) // reset to -1
+ compare(valueChangedSpy.count, ++valueChangedCount)
+
+ var t = 5
+ control.touchDragThreshold = t
+ compare(control.touchDragThreshold, t)
+ compare(valueChangedSpy.count, ++valueChangedCount)
+
+ control.touchDragThreshold = t
+ compare(control.touchDragThreshold, t)
+ compare(valueChangedSpy.count, valueChangedCount)
+
+ var pressedCount = 0
+ var pressedCount2 = 0
+ var visualPositionCount = 0
+ var visualPositionCount2 = 0
+
+ var pressedSpy = signalSpy.createObject(control, {target: control.first, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+ var pressedSpy2 = signalSpy.createObject(control, {target: control.second, signalName: "pressedChanged"})
+ verify(pressedSpy2.valid)
+
+ var visualPositionSpy = signalSpy.createObject(control, {target: control.first, signalName: "visualPositionChanged"})
+ verify(visualPositionSpy.valid)
+ var visualPositionSpy2 = signalSpy.createObject(control, {target: control.second, signalName: "visualPositionChanged"})
+ verify(visualPositionSpy2.valid)
+
+ var touch = touchEvent(control)
+ control.first.value = 0.4
+ control.second.value = 1
+ var x0 = control.first.handle.x + control.first.handle.width * 0.5
+ var y0 = control.first.handle.y + control.first.handle.height * 0.5
+ touch.press(0, control, x0, y0).commit()
+ compare(pressedSpy.count, ++pressedCount)
+ compare(control.first.pressed, true)
+ compare(visualPositionSpy.count, ++visualPositionCount)
+
+ touch.move(0, control, x0 + data.dx1, y0 + data.dy1).commit()
+ compare(pressedSpy.count, pressedCount)
+ compare(control.first.pressed, true)
+ compare(visualPositionSpy.count, visualPositionCount)
+
+ touch.move(0, control, x0 + data.dx2, y0 + data.dy2).commit()
+ compare(pressedSpy.count, pressedCount)
+ compare(control.first.pressed, true)
+ compare(visualPositionSpy.count, ++visualPositionCount)
+
+ touch.release(0, control, x0 + data.dx2, y0 + data.dy2).commit()
+
+ control.first.value = 0
+ control.second.value = 0.6
+ x0 = control.second.handle.x + control.second.handle.width * 0.5
+ y0 = control.second.handle.y + control.second.handle.height * 0.5
+ touch.press(0, control, x0, y0).commit()
+ compare(pressedSpy2.count, ++pressedCount2)
+ compare(control.second.pressed, true)
+ compare(visualPositionSpy2.count, ++visualPositionCount2)
+
+ touch.move(0, control, x0 + data.dx1, y0 + data.dy1).commit()
+ compare(pressedSpy2.count, pressedCount2)
+ compare(control.second.pressed, true)
+ compare(visualPositionSpy2.count, visualPositionCount2)
+
+ touch.move(0, control, x0 + data.dx2, y0 + data.dy2).commit()
+ compare(pressedSpy2.count, pressedCount2)
+ compare(control.second.pressed, true)
+ compare(visualPositionSpy2.count, ++visualPositionCount2)
+ touch.release(0, control, x0 + data.dx2, y0 + data.dy2).commit()
+ }
+
+ function test_valueAt_data() {
+ return [
+ { tag: "0.0..1.0", properties: { from: 0.0, to: 1.0 }, values: [0.0, 0.2, 0.5, 1.0] },
+ { tag: "0..100", properties: { from: 0, to: 100 }, values: [0, 20, 50, 100] },
+ { tag: "100..-100", properties: { from: 100, to: -100 }, values: [100, 60, 0, -100] },
+ { tag: "-7..7", properties: { from: -7, to: 7, stepSize: 1.0 }, values: [-7.0, -4.0, 0.0, 7.0] },
+ { tag: "-3..7", properties: { from: -3, to: 7, stepSize: 5.0 }, values: [-3.0, -3.0, 2.0, 7.0] },
+ ]
+ }
+
+ function test_valueAt(data) {
+ var control = createTemporaryObject(sliderComponent, testCase, data.properties)
+ verify(control)
+
+ compare(control.valueAt(0.0), data.values[0])
+ compare(control.valueAt(0.2), data.values[1])
+ compare(control.valueAt(0.5), data.values[2])
+ compare(control.valueAt(1.0), data.values[3])
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_roundbutton.qml b/tests/auto/quickcontrols2/controls/data/tst_roundbutton.qml
new file mode 100644
index 0000000000..d7a8832ca2
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_roundbutton.qml
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "RoundButton"
+
+ Component {
+ id: roundButton
+ RoundButton { }
+ }
+
+ function test_radius() {
+ var control = createTemporaryObject(roundButton, testCase);
+ verify(control);
+
+ var implicitRadius = control.radius;
+ compare(implicitRadius, Math.min(control.width, control.height) / 2);
+
+ control.radius = 10;
+ compare(control.radius, 10);
+
+ control.radius = undefined;
+ compare(control.radius, implicitRadius);
+
+ control.width = -1;
+ compare(control.radius, 0);
+
+ control.width = 10;
+ compare(control.radius, 5);
+ }
+
+ function test_spacing() {
+ var control = createTemporaryObject(roundButton, testCase, { text: "Some long, long, long text" })
+ verify(control)
+ verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
+
+ var textLabel = findChild(control.contentItem, "label")
+ verify(textLabel)
+
+ // The implicitWidth of the IconLabel that all buttons use as their contentItem
+ // should be equal to the implicitWidth of the Text while no icon is set.
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // That means that spacing shouldn't affect it.
+ control.spacing += 100
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // The implicitWidth of the Button itself should, therefore, also never include spacing while no icon is set.
+ compare(control.implicitWidth, textLabel.implicitWidth + control.leftPadding + control.rightPadding)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: RoundButton.IconOnly },
+ { "tag": "TextOnly", display: RoundButton.TextOnly },
+ { "tag": "TextUnderIcon", display: RoundButton.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: RoundButton.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: RoundButton.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: RoundButton.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: RoundButton.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: RoundButton.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(roundButton, testCase, {
+ text: "RoundButton",
+ display: data.display,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ switch (control.display) {
+ case RoundButton.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case RoundButton.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case RoundButton.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case RoundButton.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_scrollbar.qml b/tests/auto/quickcontrols2/controls/data/tst_scrollbar.qml
new file mode 100644
index 0000000000..7753a4cc33
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_scrollbar.qml
@@ -0,0 +1,993 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "ScrollBar"
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component {
+ id: scrollBar
+ ScrollBar {
+ padding: 0
+ minimumSize: 0
+ }
+ }
+
+ Component {
+ id: scrollBarWithDefaultPadding
+ ScrollBar {
+ minimumSize: 0
+ }
+ }
+
+ Component {
+ id: flickable
+ Flickable {
+ width: 100
+ height: 100
+ contentWidth: 200
+ contentHeight: 200
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.HorizontalAndVerticalFlick
+ }
+ }
+
+ function test_attach() {
+ var container = createTemporaryObject(flickable, testCase)
+ verify(container)
+ waitForRendering(container)
+
+ var vertical = scrollBar.createObject()
+ verify(!vertical.parent)
+ compare(vertical.size, 0.0)
+ compare(vertical.position, 0.0)
+ compare(vertical.active, false)
+ compare(vertical.orientation, Qt.Vertical)
+ compare(vertical.x, 0)
+ compare(vertical.y, 0)
+ verify(vertical.width > 0)
+ verify(vertical.height > 0)
+
+ container.ScrollBar.vertical = vertical
+ compare(vertical.parent, container)
+ compare(vertical.orientation, Qt.Vertical)
+ compare(vertical.size, container.visibleArea.heightRatio)
+ compare(vertical.position, container.visibleArea.yPosition)
+ compare(vertical.x, container.width - vertical.width)
+ compare(vertical.y, 0)
+ verify(vertical.width > 0)
+ compare(vertical.height, container.height)
+ // vertical scroll bar follows flickable's width
+ container.width += 10
+ compare(vertical.x, container.width - vertical.width)
+ vertical.implicitWidth -= 2
+ compare(vertical.x, container.width - vertical.width)
+ // ...unless explicitly positioned
+ vertical.x = 123
+ container.width += 10
+ compare(vertical.x, 123)
+
+ var horizontal = createTemporaryObject(scrollBar, null)
+ verify(!horizontal.parent)
+ compare(horizontal.size, 0.0)
+ compare(horizontal.position, 0.0)
+ compare(horizontal.active, false)
+ compare(horizontal.orientation, Qt.Vertical)
+ compare(horizontal.x, 0)
+ compare(horizontal.y, 0)
+ verify(horizontal.width > 0)
+ verify(horizontal.height > 0)
+
+ container.ScrollBar.horizontal = horizontal
+ compare(horizontal.parent, container)
+ compare(horizontal.orientation, Qt.Horizontal)
+ compare(horizontal.size, container.visibleArea.widthRatio)
+ compare(horizontal.position, container.visibleArea.xPosition)
+ compare(horizontal.x, 0)
+ compare(horizontal.y, container.height - horizontal.height)
+ compare(horizontal.width, container.width)
+ verify(horizontal.height > 0)
+ // horizontal scroll bar follows flickable's height
+ container.height += 10
+ compare(horizontal.y, container.height - horizontal.height)
+ horizontal.implicitHeight -= 2
+ compare(horizontal.y, container.height - horizontal.height)
+ // ...unless explicitly positioned
+ horizontal.y = 123
+ container.height += 10
+ compare(horizontal.y, 123)
+
+ var velocity = container.maximumFlickVelocity
+
+ compare(container.flicking, false)
+ container.flick(-velocity, -velocity)
+ compare(container.flicking, true)
+ tryCompare(container, "flicking", false)
+
+ compare(vertical.size, container.visibleArea.heightRatio)
+ compare(vertical.position, container.visibleArea.yPosition)
+ compare(horizontal.size, container.visibleArea.widthRatio)
+ compare(horizontal.position, container.visibleArea.xPosition)
+
+ compare(container.flicking, false)
+ container.flick(velocity, velocity)
+ compare(container.flicking, true)
+ tryCompare(container, "flicking", false)
+
+ compare(vertical.size, container.visibleArea.heightRatio)
+ compare(vertical.position, container.visibleArea.yPosition)
+ compare(horizontal.size, container.visibleArea.widthRatio)
+ compare(horizontal.position, container.visibleArea.xPosition)
+
+ var oldY = vertical.y
+ var oldHeight = vertical.height
+ vertical.parent = testCase
+ vertical.y -= 10
+ container.height += 10
+ compare(vertical.y, oldY - 10)
+ compare(vertical.height, oldHeight)
+
+ var oldX = horizontal.x
+ var oldWidth = horizontal.width
+ horizontal.parent = testCase
+ horizontal.x -= 10
+ container.width += 10
+ compare(horizontal.x, oldX - 10)
+ compare(horizontal.width, oldWidth)
+ }
+
+ function test_attachTwice() {
+ let container = createTemporaryObject(flickable, testCase)
+ verify(container)
+ waitForRendering(container)
+
+ container.ScrollBar.vertical = scrollBar.createObject(container, { objectName: "oldVerticalScrollBar" })
+ verify(container.ScrollBar.vertical)
+ let oldVerticalScrollBar = findChild(container, "oldVerticalScrollBar")
+ verify(oldVerticalScrollBar)
+ verify(oldVerticalScrollBar.visible)
+
+ container.ScrollBar.horizontal = scrollBar.createObject(container, { objectName: "oldHorizontalScrollBar" })
+ verify(container.ScrollBar.horizontal)
+ let oldHorizontalScrollBar = findChild(container, "oldHorizontalScrollBar")
+ verify(oldHorizontalScrollBar)
+ verify(oldHorizontalScrollBar.visible)
+
+ container.ScrollBar.vertical = scrollBar.createObject(container, { objectName: "newVerticalScrollBar" })
+ let newVerticalScrollBar = findChild(container, "newVerticalScrollBar")
+ verify(newVerticalScrollBar)
+ verify(newVerticalScrollBar.visible)
+ verify(!oldVerticalScrollBar.visible)
+
+ container.ScrollBar.horizontal = scrollBar.createObject(container, { objectName: "newHorizontalScrollBar" })
+ let newHorizontalScrollBar = findChild(container, "newHorizontalScrollBar")
+ verify(newHorizontalScrollBar)
+ verify(newHorizontalScrollBar.visible)
+ verify(!oldHorizontalScrollBar.visible)
+ }
+
+ function getGrooveRange(scrollbar) {
+ return {
+ start: { // top left
+ x: scrollbar.orientation === Qt.Horizontal ? scrollbar.leftPadding : 0,
+ y: scrollbar.orientation === Qt.Vertical ? scrollbar.topPadding : 0
+ },
+ end: { // bottom right, (inclusive, last pixel position of the groove)
+ x: (scrollbar.orientation === Qt.Horizontal ? scrollbar.width - scrollbar.rightPadding : scrollbar.width) - 1,
+ y: (scrollbar.orientation === Qt.Vertical ? scrollbar.height - scrollbar.bottomPadding : scrollbar.height) - 1
+ },
+ width : scrollbar.width - scrollbar.leftPadding - scrollbar.rightPadding,
+ height: scrollbar.height - scrollbar.topPadding - scrollbar.bottomPadding
+ }
+ }
+
+ function test_mouse_data() {
+ return [
+ { tag: "horizontal", properties: { visible: true, orientation: Qt.Horizontal, width: testCase.width } },
+ { tag: "vertical", properties: { visible: true, orientation: Qt.Vertical, height: testCase.height } }
+ ]
+ }
+
+ function test_mouse(data) {
+ var control = createTemporaryObject(scrollBarWithDefaultPadding, testCase, data.properties)
+ verify(control)
+
+ var grooveRange = getGrooveRange(control)
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ mousePress(control, grooveRange.start.x, grooveRange.start.y, Qt.LeftButton)
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ compare(control.position, 0.0)
+
+ mouseMove(control, -control.width, -control.height, 0)
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ compare(control.position, 0.0)
+
+ mouseMove(control, control.width * 0.5, control.height * 0.5, 0)
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ verify(control.position, 0.5)
+
+ mouseRelease(control, control.width * 0.5, control.height * 0.5, Qt.LeftButton)
+ compare(pressedSpy.count, 2)
+ compare(control.pressed, false)
+ compare(control.position, 0.5)
+
+ mousePress(control, grooveRange.end.x, grooveRange.end.y, Qt.LeftButton)
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ // We can't click on right and bottom edge, so click to (grooveRange.end),
+ // and move mouse to (grooveRange.end.x + 1, grooveRange.end.y + 1)
+ mouseMove(control, grooveRange.end.x + 1, grooveRange.end.y + 1, 0)
+ compare(control.position, 1.0)
+
+ mouseMove(control, control.width * 2, control.height * 2, 0)
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ compare(control.position, 1.0)
+
+ mouseMove(control, grooveRange.start.x + grooveRange.width * 0.75, grooveRange.start.y + grooveRange.height * 0.75, 0)
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ fuzzyCompare(control.position, 0.75, 0.01)
+
+ mouseRelease(control, grooveRange.start.x + grooveRange.width * 0.25, grooveRange.start.y + grooveRange.height * 0.25, Qt.LeftButton)
+ compare(pressedSpy.count, 4)
+ compare(control.pressed, false)
+ fuzzyCompare(control.position, 0.25, 0.01)
+
+ if (control.__decreaseVisual.indicator !== null) {
+ var p = control.__decreaseVisual.indicator.mapToItem(control, Qt.point(0, 0))
+ mousePress(control, p.x, p.y, Qt.LeftButton)
+ compare(pressedSpy.count, 4)
+ compare(control.pressed, false)
+ compare(control.__decreaseVisual.pressed, true)
+ fuzzyCompare(control.position, 0.15, 0.01)
+ mouseRelease(control.__decreaseVisual.indicator, 0, 0, Qt.LeftButton)
+ compare(control.__decreaseVisual.pressed, false)
+
+ p = control.__increaseVisual.indicator.mapToItem(control, Qt.point(0, 0))
+ mousePress(control, p.x, p.y, Qt.LeftButton)
+ compare(pressedSpy.count, 4)
+ compare(control.pressed, false)
+ compare(control.__increaseVisual.pressed, true)
+ fuzzyCompare(control.position, 0.25, 0.01)
+ mouseRelease(control.__increaseVisual.indicator, 0, 0, Qt.LeftButton)
+ compare(control.__increaseVisual.pressed, false)
+ }
+ }
+
+ function test_touch_data() {
+ return [
+ { tag: "horizontal", properties: { visible: true, orientation: Qt.Horizontal, width: testCase.width } },
+ { tag: "vertical", properties: { visible: true, orientation: Qt.Vertical, height: testCase.height } }
+ ]
+ }
+
+ function test_touch(data) {
+ var control = createTemporaryObject(scrollBar, testCase, data.properties)
+ verify(control)
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ control.width += (control.leftPadding + control.rightPadding)
+ control.height += (control.topPadding + control.bottomPadding)
+ var availableSlideWidth = 0
+ var availableSlideHeight = 0
+
+ var p0 = {}
+ if (control.orientation === Qt.Horizontal) {
+ availableSlideWidth = control.width - control.rightPadding - control.leftPadding
+ p0 = { x = control.leftPadding, y = control.height/2 }
+ } else {
+ availableSlideHeight = control.height - control.bottomPadding - control.topPadding
+ p0 = { x = control.width/2, y = control.topPadding}
+ }
+
+ var touch = touchEvent(control)
+
+ touch.press(0, control, p0.x, p0.y).commit()
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ compare(control.position, 0.0)
+
+ touch.move(0, control, -control.width, -control.height).commit()
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ compare(control.position, 0.0)
+
+ touch.move(0, control, p0.x + availableSlideWidth * 0.5, p0.y + availableSlideHeight * 0.5).commit()
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ verify(control.position, 0.5)
+
+ touch.release(0, control, p0.x + availableSlideWidth * 0.5, p0.y + availableSlideHeight * 0.5).commit()
+ compare(pressedSpy.count, 2)
+ compare(control.pressed, false)
+ compare(control.position, 0.5)
+
+ touch.press(0, control, p0.x + availableSlideWidth - 1, p0.y + availableSlideHeight - 1).commit()
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ compare(control.position, 0.5)
+
+ touch.move(0, control, control.width * 2, control.height * 2).commit()
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ compare(control.position, 1.0)
+
+ touch.move(0, control, p0.x + availableSlideWidth * 0.75, p0.y + availableSlideHeight * 0.75).commit()
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ compare(control.position, 0.75)
+
+ touch.release(0, control, p0.x + availableSlideWidth * 0.25, p0.y + availableSlideHeight * 0.25).commit()
+ compare(pressedSpy.count, 4)
+ compare(control.pressed, false)
+ compare(control.position, 0.25)
+ }
+
+ function test_multiTouch() {
+ var control1 = createTemporaryObject(scrollBar, testCase)
+ verify(control1)
+
+ control1.height = 200 + (control1.topPadding + control1.bottomPadding)
+
+ var grooveRange = getGrooveRange(control1)
+
+ var pressedCount1 = 0
+ var movedCount1 = 0
+
+ var pressedSpy1 = signalSpy.createObject(control1, {target: control1, signalName: "pressedChanged"})
+ verify(pressedSpy1.valid)
+
+ var positionSpy1 = signalSpy.createObject(control1, {target: control1, signalName: "positionChanged"})
+ verify(positionSpy1.valid)
+
+ var touch = touchEvent(control1)
+ touch.press(0, control1, grooveRange.start.x, grooveRange.start.y).commit().move(0, control1, grooveRange.end.x+1, grooveRange.end.y+1).commit()
+
+ compare(pressedSpy1.count, ++pressedCount1)
+ compare(positionSpy1.count, ++movedCount1)
+ compare(control1.pressed, true)
+ compare(control1.position, 1.0)
+
+ // second touch point on the same control is ignored
+ touch.stationary(0).press(1, control1, grooveRange.start.x, grooveRange.start.y).commit()
+ touch.stationary(0).move(1).commit()
+ touch.stationary(0).release(1).commit()
+
+ compare(pressedSpy1.count, pressedCount1)
+ compare(positionSpy1.count, movedCount1)
+ compare(control1.pressed, true)
+ compare(control1.position, 1.0)
+
+ var control2 = createTemporaryObject(scrollBar, testCase, {y: control1.height})
+ verify(control2)
+ control2.height = 200 + (control2.topPadding + control2.bottomPadding)
+
+ var pressedCount2 = 0
+ var movedCount2 = 0
+
+ var pressedSpy2 = signalSpy.createObject(control2, {target: control2, signalName: "pressedChanged"})
+ verify(pressedSpy2.valid)
+
+ var positionSpy2 = signalSpy.createObject(control2, {target: control2, signalName: "positionChanged"})
+ verify(positionSpy2.valid)
+
+ // press the second scrollbar
+ touch.stationary(0).press(2, control2, grooveRange.start.x, grooveRange.start.y).commit()
+
+ compare(pressedSpy2.count, ++pressedCount2)
+ compare(positionSpy2.count, movedCount2)
+ compare(control2.pressed, true)
+ compare(control2.position, 0.0)
+
+ compare(pressedSpy1.count, pressedCount1)
+ compare(positionSpy1.count, movedCount1)
+ compare(control1.pressed, true)
+ compare(control1.position, 1.0)
+
+ // move both scrollbars
+ touch.move(0, control1).move(2, control2).commit()
+
+ compare(pressedSpy2.count, pressedCount2)
+ compare(positionSpy2.count, ++movedCount2)
+ compare(control2.pressed, true)
+ compare(control2.position, 0.5)
+
+ compare(pressedSpy1.count, pressedCount1)
+ compare(positionSpy1.count, ++movedCount1)
+ compare(control1.pressed, true)
+ compare(control1.position, 0.5)
+
+ // release both scrollbars
+ touch.release(0, control1).release(2, control2).commit()
+
+ compare(pressedSpy2.count, ++pressedCount2)
+ compare(positionSpy2.count, movedCount2)
+ compare(control2.pressed, false)
+ compare(control2.position, 0.5)
+
+ compare(pressedSpy1.count, ++pressedCount1)
+ compare(positionSpy1.count, movedCount1)
+ compare(control1.pressed, false)
+ compare(control1.position, 0.5)
+ }
+
+ function test_increase_decrease_data() {
+ return [
+ { tag: "increase:active", increase: true, active: true },
+ { tag: "decrease:active", increase: false, active: true },
+ { tag: "increase:inactive", increase: true, active: false },
+ { tag: "decrease:inactive", increase: false, active: false }
+ ]
+ }
+
+ function test_increase_decrease(data) {
+ var control = createTemporaryObject(scrollBar, testCase, {position: 0.5, active: data.active})
+ verify(control)
+
+ if (data.increase) {
+ control.increase()
+ compare(control.position, 0.6)
+ } else {
+ control.decrease()
+ compare(control.position, 0.4)
+ }
+ compare(control.active, data.active)
+ }
+
+ function test_stepSize_data() {
+ return [
+ { tag: "0.0", stepSize: 0.0 },
+ { tag: "0.1", stepSize: 0.1 },
+ { tag: "0.5", stepSize: 0.5 }
+ ]
+ }
+
+ function test_stepSize(data) {
+ var control = createTemporaryObject(scrollBar, testCase, {stepSize: data.stepSize})
+ verify(control)
+
+ compare(control.stepSize, data.stepSize)
+ compare(control.position, 0.0)
+
+ var count = 10
+ if (data.stepSize !== 0.0)
+ count = 1.0 / data.stepSize
+
+ // increase until 1.0
+ for (var i = 1; i <= count; ++i) {
+ control.increase()
+ compare(control.position, i / count)
+ }
+ control.increase()
+ compare(control.position, 1.0)
+
+ // decrease until 0.0
+ for (var d = count - 1; d >= 0; --d) {
+ control.decrease()
+ compare(control.position, d / count)
+ }
+ control.decrease()
+ compare(control.position, 0.0)
+ }
+
+ function test_padding_data() {
+ return [
+ { tag: "horizontal", properties: { visible: true, orientation: Qt.Horizontal, width: testCase.width, leftPadding: testCase.width * 0.1 } },
+ { tag: "vertical", properties: { visible: true, orientation: Qt.Vertical, height: testCase.height, topPadding: testCase.height * 0.1 } }
+ ]
+ }
+
+ function test_padding(data) {
+ var control = createTemporaryObject(scrollBar, testCase, data.properties)
+
+ mousePress(control, control.leftPadding + control.availableWidth * 0.5, control.topPadding + control.availableHeight * 0.5, Qt.LeftButton)
+ mouseRelease(control, control.leftPadding + control.availableWidth * 0.5, control.topPadding + control.availableHeight * 0.5, Qt.LeftButton)
+
+ compare(control.position, 0.5)
+ }
+
+ function test_warning() {
+ ignoreWarning(Qt.resolvedUrl("tst_scrollbar.qml") + ":55:1: QML TestCase: ScrollBar must be attached to a Flickable or ScrollView")
+ testCase.ScrollBar.vertical = null
+ }
+
+ function test_mirrored() {
+ var container = createTemporaryObject(flickable, testCase)
+ verify(container)
+ waitForRendering(container)
+
+ container.ScrollBar.vertical = scrollBar.createObject(container)
+ compare(container.ScrollBar.vertical.x, container.width - container.ScrollBar.vertical.width)
+ container.ScrollBar.vertical.locale = Qt.locale("ar_EG")
+ compare(container.ScrollBar.vertical.x, container.width - container.ScrollBar.vertical.width)
+ }
+
+ function test_hover_data() {
+ return [
+ { tag: "enabled", hoverEnabled: true, interactive: true },
+ { tag: "disabled", hoverEnabled: false, interactive: true },
+ { tag: "non-interactive", hoverEnabled: true, interactive: false }
+ ]
+ }
+
+ function test_hover(data) {
+ var control = createTemporaryObject(scrollBar, testCase, {hoverEnabled: data.hoverEnabled, interactive: data.interactive})
+ verify(control)
+
+ compare(control.hovered, false)
+
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.hovered, data.hoverEnabled)
+ compare(control.active, data.hoverEnabled && data.interactive)
+
+ mouseMove(control, -1, -1)
+ compare(control.hovered, false)
+ compare(control.active, false)
+ }
+
+ function test_snapMode_data() {
+ return [
+ { tag: "NoSnap", snapMode: ScrollBar.NoSnap, stepSize: 0.1, size: 0.2, width: 100, steps: 80 }, /* 0.8*100 */
+ { tag: "NoSnap2", snapMode: ScrollBar.NoSnap, stepSize: 0.2, size: 0.1, width: 200, steps: 180 }, /* 0.9*200 */
+
+ { tag: "SnapAlways", snapMode: ScrollBar.SnapAlways, stepSize: 0.1, size: 0.2, width: 100, steps: 10 },
+ { tag: "SnapAlways2", snapMode: ScrollBar.SnapAlways, stepSize: 0.2, size: 0.125, width: 200, steps: 5 },
+
+ { tag: "SnapOnRelease", snapMode: ScrollBar.SnapOnRelease, stepSize: 0.1, size: 0.2, width: 100, steps: 80 }, /* 0.8*100 */
+ { tag: "SnapOnRelease2", snapMode: ScrollBar.SnapOnRelease, stepSize: 0.2, size: 0.1, width: 200, steps: 180 }, /* 0.9*200 */
+ ]
+ }
+
+ function test_snapMode_mouse_data() {
+ return test_snapMode_data()
+ }
+
+ function test_snapMode_mouse(data) {
+ var control = createTemporaryObject(scrollBar, testCase, {snapMode: data.snapMode, orientation: Qt.Horizontal, stepSize: data.stepSize, size: data.size, width: data.width})
+ verify(control)
+ // In case the slider is surrounded with decrease/increase buttons
+ // Adjust slider width so that slider area is a whole number (to avoid rounding errors)
+ control.width += control.leftPadding + control.rightPadding
+
+ function snappedPosition(pos) {
+ var effectiveStep = control.stepSize * (1.0 - control.size)
+ return Math.round(pos / effectiveStep) * effectiveStep
+ }
+
+ function boundPosition(pos) {
+ return Math.max(0, Math.min(pos, 1.0 - control.size))
+ }
+
+ var minHandlePos = control.leftPadding
+ var maxHandlePos = control.width - control.rightPadding
+ var availableSlideWidth = maxHandlePos - minHandlePos
+ mousePress(control, minHandlePos, 0)
+ compare(control.position, 0)
+
+ mouseMove(control, minHandlePos + availableSlideWidth * 0.3, 0)
+ var expectedMovePos = 0.3
+ if (control.snapMode === ScrollBar.SnapAlways) {
+ expectedMovePos = snappedPosition(expectedMovePos)
+ verify(expectedMovePos !== 0.3)
+ }
+ compare(control.position, expectedMovePos)
+
+ mouseRelease(control, minHandlePos + availableSlideWidth * 0.75, 0)
+ var expectedReleasePos = 0.75
+ if (control.snapMode !== ScrollBar.NoSnap) {
+ expectedReleasePos = snappedPosition(expectedReleasePos)
+ verify(expectedReleasePos !== 0.75)
+ }
+ compare(control.position, expectedReleasePos)
+
+ control.position = 0
+ mousePress(control, minHandlePos, 0)
+
+ var steps = 0
+ var prevPos = 0
+
+ for (var x = minHandlePos; x < maxHandlePos; ++x) {
+ mouseMove(control, x, 0)
+ expectedMovePos = boundPosition((x - minHandlePos) / availableSlideWidth)
+ if (control.snapMode === ScrollBar.SnapAlways)
+ expectedMovePos = snappedPosition(expectedMovePos)
+ compare(control.position, expectedMovePos)
+
+ if (control.position !== prevPos)
+ ++steps
+ prevPos = control.position
+ }
+ compare(steps, data.steps)
+
+ mouseRelease(control, maxHandlePos - 1, 0)
+ }
+
+ function test_snapMode_touch_data() {
+ return test_snapMode_data()
+ }
+
+ function test_snapMode_touch(data) {
+ var control = createTemporaryObject(scrollBar, testCase, {snapMode: data.snapMode, orientation: Qt.Horizontal, stepSize: data.stepSize, size: data.size, width: data.width})
+ verify(control)
+ // In case the slider is surrounded with decrease/increase buttons
+ // Adjust slider width so that slider area is a whole number (to avoid rounding errors)
+ control.width += control.leftPadding + control.rightPadding
+
+ function snappedPosition(pos) {
+ var effectiveStep = control.stepSize * (1.0 - control.size)
+ return Math.round(pos / effectiveStep) * effectiveStep
+ }
+
+ function boundPosition(pos) {
+ return Math.max(0, Math.min(pos, 1.0 - control.size))
+ }
+
+ var touch = touchEvent(control)
+
+ var minHandlePos = control.leftPadding
+ var maxHandlePos = control.width - control.rightPadding
+ var availableSlideWidth = maxHandlePos - minHandlePos
+ touch.press(0, control, minHandlePos, 0).commit()
+ compare(control.position, 0)
+
+ touch.move(0, control, minHandlePos + availableSlideWidth*0.3, 0).commit()
+ var expectedMovePos = 0.3
+ if (control.snapMode === ScrollBar.SnapAlways) {
+ expectedMovePos = snappedPosition(expectedMovePos)
+ verify(expectedMovePos !== 0.3)
+ }
+ compare(control.position, expectedMovePos)
+
+ touch.release(0, control, minHandlePos + availableSlideWidth*0.75, 0).commit()
+ var expectedReleasePos = 0.75
+ if (control.snapMode !== ScrollBar.NoSnap) {
+ expectedReleasePos = snappedPosition(expectedReleasePos)
+ verify(expectedReleasePos !== 0.75)
+ }
+ compare(control.position, expectedReleasePos)
+
+ control.position = 0
+ touch.press(0, control, minHandlePos, 0).commit()
+
+ var steps = 0
+ var prevPos = 0
+
+ for (var x = minHandlePos; x < maxHandlePos; ++x) {
+ touch.move(0, control, x, 0).commit()
+ expectedMovePos = boundPosition((x - minHandlePos) / availableSlideWidth)
+ if (control.snapMode === ScrollBar.SnapAlways)
+ expectedMovePos = snappedPosition(expectedMovePos)
+ compare(control.position, expectedMovePos)
+
+ if (control.position !== prevPos)
+ ++steps
+ prevPos = control.position
+ }
+ compare(steps, data.steps)
+
+ touch.release(0, control, maxHandlePos - 1).commit()
+ }
+
+ function test_interactive_data() {
+ return [
+ { tag: "true", interactive: true },
+ { tag: "false", interactive: false }
+ ]
+ }
+
+ function test_interactive(data) {
+ var control = createTemporaryObject(scrollBar, testCase, {interactive: data.interactive})
+ verify(control)
+
+ compare(control.interactive, data.interactive)
+ // 200 pixels tall to avoid rounding errors further on
+ control.height = 200 + (control.topPadding + control.bottomPadding)
+
+ // press-move-release
+ mousePress(control, control.width/2, control.topPadding, Qt.LeftButton)
+ compare(control.pressed, data.interactive)
+
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.position, data.interactive ? 0.5 : 0.0)
+
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, false)
+
+ // change to non-interactive while pressed
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, data.interactive)
+
+ mouseMove(control, control.width, control.height)
+ compare(control.position, data.interactive ? 1.0 : 0.0)
+
+ control.interactive = false
+ compare(control.interactive, false)
+ compare(control.pressed, false)
+
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.position, data.interactive ? 1.0 : 0.0)
+
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, false)
+
+ // change back to interactive & try press-move-release again
+ control.interactive = true
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+
+ mouseMove(control, 0, 0)
+ compare(control.position, 0.0)
+
+ mouseRelease(control, 0, 0, Qt.LeftButton)
+ compare(control.pressed, false)
+ }
+
+ function test_policy() {
+ var control = createTemporaryObject(scrollBar, testCase, {active: true})
+ verify(control)
+
+ compare(ScrollBar.AsNeeded, Qt.ScrollBarAsNeeded)
+ compare(ScrollBar.AlwaysOff, Qt.ScrollBarAlwaysOff)
+ compare(ScrollBar.AlwaysOn, Qt.ScrollBarAlwaysOn)
+
+ compare(control.visible, true)
+ compare(control.policy, ScrollBar.AsNeeded)
+
+ if (Qt.platform.pluginName !== "windows") {
+ control.size = 0.5
+ verify(control.state === "active" || control.contentItem.state === "active")
+
+ control.size = 1.0
+ verify(control.state !== "active" && control.contentItem.state !== "active")
+ }
+ control.policy = ScrollBar.AlwaysOff
+ compare(control.visible, false)
+
+ control.policy = ScrollBar.AlwaysOn
+ compare(control.visible, true)
+ if (Qt.platform.pluginName !== "windows") {
+ verify(control.state === "active" || control.contentItem.state === "active")
+ }
+ }
+
+ function test_overshoot() {
+ var container = createTemporaryObject(flickable, testCase)
+ verify(container)
+ waitForRendering(container)
+
+ var vertical = scrollBar.createObject(container, {size: 0.5})
+ container.ScrollBar.vertical = vertical
+
+ var horizontal = scrollBar.createObject(container, {size: 0.5})
+ container.ScrollBar.horizontal = horizontal
+
+ // negative vertical overshoot (pos < 0)
+ vertical.position = -0.1
+ compare(vertical.contentItem.y, vertical.topPadding)
+ compare(vertical.contentItem.height, 0.4 * vertical.availableHeight)
+
+ // positive vertical overshoot (pos + size > 1)
+ vertical.position = 0.8
+ compare(vertical.contentItem.y, vertical.topPadding + 0.8 * vertical.availableHeight)
+ compare(vertical.contentItem.height, 0.2 * vertical.availableHeight)
+
+ // negative horizontal overshoot (pos < 0)
+ horizontal.position = -0.1
+ compare(horizontal.contentItem.x, horizontal.leftPadding)
+ compare(horizontal.contentItem.width, 0.4 * horizontal.availableWidth)
+
+ // positive horizontal overshoot (pos + size > 1)
+ horizontal.position = 0.8
+ compare(horizontal.contentItem.x, horizontal.leftPadding + 0.8 * horizontal.availableWidth)
+ compare(horizontal.contentItem.width, 0.2 * horizontal.availableWidth)
+ }
+
+ function test_orientation() {
+ var control = createTemporaryObject(scrollBar, testCase)
+ verify(control)
+
+ compare(control.orientation, Qt.Vertical)
+ compare(control.horizontal, false)
+ compare(control.vertical, true)
+
+ control.orientation = Qt.Horizontal
+ compare(control.orientation, Qt.Horizontal)
+ compare(control.horizontal, true)
+ compare(control.vertical, false)
+ }
+
+ function test_flashing() {
+ var control = createTemporaryObject(scrollBar, testCase, {size: 0.2})
+ verify(control)
+
+ var activeSpy = signalSpy.createObject(control, {target: control, signalName: "activeChanged"})
+ verify(activeSpy.valid)
+
+ compare(control.active, false)
+ if (control.contentItem && control.contentItem.opacity > 0)
+ // Slider handle is always visible in this style (Windows style)
+ return
+
+ if (control.contentItem)
+ compare(control.contentItem.opacity, 0)
+ if (control.background)
+ compare(control.background.opacity, 0)
+
+ control.increase()
+ compare(control.position, 0.1)
+ compare(control.active, false)
+ compare(activeSpy.count, 2)
+ if (control.contentItem)
+ verify(control.contentItem.opacity > 0)
+ if (control.background)
+ verify(control.background.opacity > 0)
+ if (control.contentItem)
+ tryCompare(control.contentItem, "opacity", 0)
+ if (control.background)
+ tryCompare(control.background, "opacity", 0)
+
+ control.decrease()
+ compare(control.position, 0.0)
+ compare(control.active, false)
+ compare(activeSpy.count, 4)
+ if (control.contentItem)
+ verify(control.contentItem.opacity > 0)
+ if (control.background)
+ verify(control.background.opacity > 0)
+ if (control.contentItem)
+ tryCompare(control.contentItem, "opacity", 0)
+ if (control.background)
+ tryCompare(control.background, "opacity", 0)
+ }
+
+ function test_minimumSize() {
+ var container = createTemporaryObject(flickable, testCase)
+ verify(container)
+ waitForRendering(container)
+
+ var vertical = scrollBar.createObject(container, {minimumSize: 0.1})
+ container.ScrollBar.vertical = vertical
+
+ compare(container.visibleArea.heightRatio, 0.5)
+ compare(vertical.size, 0.5)
+ compare(vertical.visualSize, 0.5)
+ compare(vertical.contentItem.height, 0.5 * vertical.availableHeight)
+
+ container.contentHeight = 2000
+
+ compare(container.visibleArea.heightRatio, 0.05)
+ compare(vertical.size, 0.05)
+ compare(vertical.visualSize, 0.1)
+ compare(vertical.contentItem.height, 0.1 * vertical.availableHeight)
+
+ verify(container.atYBeginning)
+ compare(container.visibleArea.yPosition, 0.0)
+ compare(vertical.position, 0.0)
+ compare(vertical.visualPosition, 0.0)
+ compare(vertical.contentItem.y, vertical.topPadding)
+
+ container.contentY = 1900
+
+ verify(container.atYEnd)
+ compare(container.visibleArea.yPosition, 0.95)
+ compare(vertical.position, 0.95)
+ compare(vertical.visualPosition, 0.9)
+ compare(vertical.contentItem.y, vertical.topPadding + 0.9 * vertical.availableHeight)
+
+ container.contentHeight = 125
+
+ compare(container.visibleArea.heightRatio, 0.8)
+ compare(vertical.size, 0.8)
+ compare(vertical.visualSize, 0.8)
+ compare(vertical.contentItem.height, 0.8 * vertical.availableHeight)
+
+ verify(container.atYEnd)
+ compare(container.visibleArea.yPosition, 0.2)
+ compare(vertical.position, 0.2)
+ compare(vertical.visualPosition, 0.2)
+ compare(vertical.contentItem.y, vertical.topPadding + 0.2 * vertical.availableHeight)
+ }
+
+ function test_setting_invalid_property_values() {
+ var control = createTemporaryObject(scrollBar, testCase, {size: 2.0, minimumSize: -1.0})
+ verify(control)
+
+ // check that the values are within the expected range
+ compare(control.size, 1.0)
+ compare(control.minimumSize, 0)
+
+ control.minimumSize = 2.0
+ compare(control.minimumSize, 1.0)
+
+ // test if setting NaN is prevented
+ control.size = NaN
+ control.minimumSize = NaN
+ compare(control.size, 1.0)
+ compare(control.minimumSize, 1.0)
+
+
+ // test if setting float infinity is prevented
+ control.size = Number.POSITIVE_INFINITY
+ control.minimumSize = Number.POSITIVE_INFINITY
+ compare(control.size, 1.0)
+ compare(control.minimumSize, 1.0)
+
+ let oldPosition = control.position;
+ let oldStepSize = control.stepSize;
+
+ control.position = NaN;
+ control.stepSize = NaN;
+
+ compare(oldPosition, control.position)
+ compare(oldStepSize, control.stepSize)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_scrollindicator.qml b/tests/auto/quickcontrols2/controls/data/tst_scrollindicator.qml
new file mode 100644
index 0000000000..363048c0bd
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_scrollindicator.qml
@@ -0,0 +1,309 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "ScrollIndicator"
+
+ Component {
+ id: scrollIndicator
+ ScrollIndicator { }
+ }
+
+ Component {
+ id: mouseArea
+ MouseArea { }
+ }
+
+ Component {
+ id: flickable
+ Flickable {
+ width: 100
+ height: 100
+ contentWidth: 200
+ contentHeight: 200
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.HorizontalAndVerticalFlick
+ }
+ }
+
+ function test_attach() {
+ var container = createTemporaryObject(flickable, testCase)
+ verify(container)
+ waitForRendering(container)
+
+ var vertical = createTemporaryObject(scrollIndicator, null)
+ verify(!vertical.parent)
+ compare(vertical.size, 0.0)
+ compare(vertical.position, 0.0)
+ compare(vertical.active, false)
+ compare(vertical.orientation, Qt.Vertical)
+ compare(vertical.x, 0)
+ compare(vertical.y, 0)
+ verify(vertical.width > 0)
+ verify(vertical.height > 0)
+
+ container.ScrollIndicator.vertical = vertical
+ compare(vertical.parent, container)
+ compare(vertical.orientation, Qt.Vertical)
+ compare(vertical.size, container.visibleArea.heightRatio)
+ compare(vertical.position, container.visibleArea.yPosition)
+ compare(vertical.x, container.width - vertical.width)
+ compare(vertical.y, 0)
+ verify(vertical.width > 0)
+ compare(vertical.height, container.height)
+ // vertical scroll indicator follows flickable's width
+ container.width += 10
+ compare(vertical.x, container.width - vertical.width)
+ vertical.implicitWidth -= 1
+ compare(vertical.x, container.width - vertical.width)
+ // ...unless explicitly positioned
+ vertical.x = 123
+ container.width += 10
+ compare(vertical.x, 123)
+
+ var horizontal = createTemporaryObject(scrollIndicator, null)
+ verify(!horizontal.parent)
+ compare(horizontal.size, 0.0)
+ compare(horizontal.position, 0.0)
+ compare(horizontal.active, false)
+ compare(horizontal.orientation, Qt.Vertical)
+ compare(horizontal.x, 0)
+ compare(horizontal.y, 0)
+ verify(horizontal.width > 0)
+ verify(horizontal.height > 0)
+
+ container.ScrollIndicator.horizontal = horizontal
+ compare(horizontal.parent, container)
+ compare(horizontal.orientation, Qt.Horizontal)
+ compare(horizontal.size, container.visibleArea.widthRatio)
+ compare(horizontal.position, container.visibleArea.xPosition)
+ compare(horizontal.x, 0)
+ compare(horizontal.y, container.height - horizontal.height)
+ compare(horizontal.width, container.width)
+ verify(horizontal.height > 0)
+ // horizontal scroll indicator follows flickable's height
+ container.height += 10
+ compare(horizontal.y, container.height - horizontal.height)
+ horizontal.implicitHeight -= 1
+ compare(horizontal.y, container.height - horizontal.height)
+ // ...unless explicitly positioned
+ horizontal.y = 123
+ container.height += 10
+ compare(horizontal.y, 123)
+
+ var velocity = container.maximumFlickVelocity
+
+ compare(container.flicking, false)
+ container.flick(-velocity, -velocity)
+ compare(container.flicking, true)
+ tryCompare(container, "flicking", false)
+
+ compare(vertical.size, container.visibleArea.heightRatio)
+ compare(vertical.position, container.visibleArea.yPosition)
+ compare(horizontal.size, container.visibleArea.widthRatio)
+ compare(horizontal.position, container.visibleArea.xPosition)
+
+ compare(container.flicking, false)
+ container.flick(velocity, velocity)
+ compare(container.flicking, true)
+ tryCompare(container, "flicking", false)
+
+ compare(vertical.size, container.visibleArea.heightRatio)
+ compare(vertical.position, container.visibleArea.yPosition)
+ compare(horizontal.size, container.visibleArea.widthRatio)
+ compare(horizontal.position, container.visibleArea.xPosition)
+
+ var oldY = vertical.y
+ var oldHeight = vertical.height
+ vertical.parent = testCase
+ vertical.y -= 10
+ container.height += 10
+ compare(vertical.y, oldY - 10)
+ compare(vertical.height, oldHeight)
+
+ var oldX = horizontal.x
+ var oldWidth = horizontal.width
+ horizontal.parent = testCase
+ horizontal.x -= 10
+ container.width += 10
+ compare(horizontal.x, oldX - 10)
+ compare(horizontal.width, oldWidth)
+ }
+
+ function test_warning() {
+ ignoreWarning(/QML TestCase: ScrollIndicator must be attached to a Flickable/)
+ testCase.ScrollIndicator.vertical = null
+ }
+
+ function test_overshoot() {
+ var container = createTemporaryObject(flickable, testCase)
+ verify(container)
+ waitForRendering(container)
+
+ var vertical = scrollIndicator.createObject(container, {size: 0.5})
+ container.ScrollIndicator.vertical = vertical
+
+ var horizontal = scrollIndicator.createObject(container, {size: 0.5})
+ container.ScrollIndicator.horizontal = horizontal
+
+ // negative vertical overshoot (pos < 0)
+ vertical.position = -0.1
+ compare(vertical.contentItem.y, vertical.topPadding)
+ compare(vertical.contentItem.height, 0.4 * vertical.availableHeight)
+
+ // positive vertical overshoot (pos + size > 1)
+ vertical.position = 0.8
+ compare(vertical.contentItem.y, vertical.topPadding + 0.8 * vertical.availableHeight)
+ compare(vertical.contentItem.height, 0.2 * vertical.availableHeight)
+
+ // negative horizontal overshoot (pos < 0)
+ horizontal.position = -0.1
+ compare(horizontal.contentItem.x, horizontal.leftPadding)
+ compare(horizontal.contentItem.width, 0.4 * horizontal.availableWidth)
+
+ // positive horizontal overshoot (pos + size > 1)
+ horizontal.position = 0.8
+ compare(horizontal.contentItem.x, horizontal.leftPadding + 0.8 * horizontal.availableWidth)
+ compare(horizontal.contentItem.width, 0.2 * horizontal.availableWidth)
+ }
+
+ function test_orientation() {
+ var control = createTemporaryObject(scrollIndicator, testCase)
+ verify(control)
+
+ compare(control.orientation, Qt.Vertical)
+ compare(control.horizontal, false)
+ compare(control.vertical, true)
+
+ control.orientation = Qt.Horizontal
+ compare(control.orientation, Qt.Horizontal)
+ compare(control.horizontal, true)
+ compare(control.vertical, false)
+ }
+
+ // QTBUG-61785
+ function test_mouseArea() {
+ var ma = createTemporaryObject(mouseArea, testCase, {width: testCase.width, height: testCase.height})
+ verify(ma)
+
+ var control = scrollIndicator.createObject(ma, {active: true, size: 0.9, width: testCase.width, height: testCase.height})
+ verify(control)
+
+ mousePress(control)
+ verify(ma.pressed)
+
+ mouseRelease(control)
+ verify(!ma.pressed)
+
+ var touch = touchEvent(control)
+ touch.press(0, control).commit()
+ verify(ma.pressed)
+
+ touch.release(0, control).commit()
+ verify(!ma.pressed)
+ }
+
+ function test_minimumSize() {
+ var container = createTemporaryObject(flickable, testCase)
+ verify(container)
+ waitForRendering(container)
+
+ var vertical = scrollIndicator.createObject(container, {minimumSize: 0.1})
+ container.ScrollIndicator.vertical = vertical
+
+ compare(container.visibleArea.heightRatio, 0.5)
+ compare(vertical.size, 0.5)
+ compare(vertical.visualSize, 0.5)
+ compare(vertical.contentItem.height, 0.5 * vertical.availableHeight)
+
+ container.contentHeight = 2000
+
+ compare(container.visibleArea.heightRatio, 0.05)
+ compare(vertical.size, 0.05)
+ compare(vertical.visualSize, 0.1)
+ compare(vertical.contentItem.height, 0.1 * vertical.availableHeight)
+
+ verify(container.atYBeginning)
+ compare(container.visibleArea.yPosition, 0.0)
+ compare(vertical.position, 0.0)
+ compare(vertical.visualPosition, 0.0)
+ compare(vertical.contentItem.y, vertical.topPadding)
+
+ container.contentY = 1900
+
+ verify(container.atYEnd)
+ compare(container.visibleArea.yPosition, 0.95)
+ compare(vertical.position, 0.95)
+ compare(vertical.visualPosition, 0.9)
+ compare(vertical.contentItem.y, vertical.topPadding + 0.9 * vertical.availableHeight)
+
+ container.contentHeight = 125
+
+ compare(container.visibleArea.heightRatio, 0.8)
+ compare(vertical.size, 0.8)
+ compare(vertical.visualSize, 0.8)
+ compare(vertical.contentItem.height, 0.8 * vertical.availableHeight)
+
+ verify(container.atYEnd)
+ compare(container.visibleArea.yPosition, 0.2)
+ compare(vertical.position, 0.2)
+ compare(vertical.visualPosition, 0.2)
+ compare(vertical.contentItem.y, vertical.topPadding + 0.2 * vertical.availableHeight)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_scrollview.qml b/tests/auto/quickcontrols2/controls/data/tst_scrollview.qml
new file mode 100644
index 0000000000..6704d5894c
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_scrollview.qml
@@ -0,0 +1,668 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "ScrollView"
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component {
+ id: scrollView
+ ScrollView { }
+ }
+
+ Component {
+ id: scrollBarComponent
+ ScrollBar {}
+ }
+
+ Component {
+ id: scrollableLabel
+ ScrollView {
+ Label {
+ text: "ABC"
+ font.pixelSize: 512
+ }
+ }
+ }
+
+ Component {
+ id: scrollableLabels
+ ScrollView {
+ contentHeight: label1.implicitHeight + label2.implicitHeight + label3.implicitHeight
+ Label {
+ id: label1
+ text: "First"
+ font.pixelSize: 96
+ }
+ Label {
+ id: label2
+ text: "Second"
+ font.pixelSize: 96
+ }
+ Label {
+ id: label3
+ text: "Third"
+ font.pixelSize: 96
+ }
+ }
+ }
+
+ Component {
+ id: flickableLabel
+ ScrollView {
+ Flickable {
+ contentWidth: label.implicitWidth
+ contentHeight: label.implicitHeight
+ Label {
+ id: label
+ text: "ABC"
+ font.pixelSize: 512
+ }
+ }
+ }
+ }
+
+ Component {
+ id: emptyFlickable
+ ScrollView {
+ Flickable {
+ }
+ }
+ }
+
+ Component {
+ id: labelComponent
+ Label {
+ text: "ABC"
+ font.pixelSize: 512
+ }
+ }
+
+ Component {
+ id: scrollableListView
+ ScrollView {
+ ListView {
+ model: 3
+ delegate: Label {
+ text: modelData
+ }
+ }
+ }
+ }
+
+ Component {
+ id: scrollableFlickable
+ ScrollView {
+ Flickable {
+ Item {
+ width: 100
+ height: 100
+ }
+ }
+ }
+ }
+
+ Component {
+ id: scrollableWithContentSize
+ ScrollView {
+ contentWidth: 1000
+ contentHeight: 1000
+ Flickable {
+ }
+ }
+ }
+
+ Component {
+ id: scrollableAndFlicableWithContentSize
+ ScrollView {
+ contentWidth: 1000
+ contentHeight: 1000
+ Flickable {
+ contentWidth: 200
+ contentHeight: 200
+ }
+ }
+ }
+
+ Component {
+ id: scrollableTextArea
+ ScrollView {
+ TextArea {
+ text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas id dignissim ipsum. Nam molestie nisl turpis."
+ wrapMode: TextArea.WordWrap
+ }
+ }
+ }
+ Component {
+ id: scrollableTextAreaWithSibling
+ ScrollView {
+ Item {
+ }
+ TextArea {
+ }
+ }
+ }
+
+ function test_scrollBars() {
+ var control = createTemporaryObject(scrollView, testCase, {width: 200, height: 200})
+ verify(control)
+
+ var vertical = control.ScrollBar.vertical
+ verify(vertical)
+
+ var horizontal = control.ScrollBar.horizontal
+ verify(horizontal)
+
+ control.contentHeight = 400
+ verify(vertical.size > 0)
+ compare(control.contentItem.visibleArea.heightRatio, vertical.size)
+
+ control.contentWidth = 400
+ verify(horizontal.size > 0)
+ compare(control.contentItem.visibleArea.widthRatio, horizontal.size)
+
+ vertical.increase()
+ verify(vertical.position > 0)
+ compare(control.contentItem.visibleArea.yPosition, vertical.position)
+
+ horizontal.increase()
+ verify(horizontal.position > 0)
+ compare(control.contentItem.visibleArea.xPosition, horizontal.position)
+ }
+
+ function test_oneChild_data() {
+ return [
+ { tag: "label", component: scrollableLabel },
+ { tag: "flickable", component: flickableLabel }
+ ]
+ }
+
+ function test_oneChild(data) {
+ var control = createTemporaryObject(data.component, testCase)
+ verify(control)
+
+ var flickable = control.contentItem
+ verify(flickable.hasOwnProperty("contentX"))
+ verify(flickable.hasOwnProperty("contentY"))
+
+ var label = flickable.contentItem.children[0]
+ compare(label.text, "ABC")
+
+ compare(control.implicitWidth, label.implicitWidth)
+ compare(control.implicitHeight, label.implicitHeight)
+
+ compare(control.contentWidth, label.implicitWidth)
+ compare(control.contentHeight, label.implicitHeight)
+
+ compare(flickable.contentWidth, label.implicitWidth)
+ compare(flickable.contentHeight, label.implicitHeight)
+
+ control.contentWidth = 200
+ compare(control.implicitWidth, 200)
+ compare(control.contentWidth, 200)
+ compare(flickable.contentWidth, 200)
+
+ control.contentHeight = 100
+ compare(control.implicitHeight, 100)
+ compare(control.contentHeight, 100)
+ compare(flickable.contentHeight, 100)
+ }
+
+ function test_multipleChildren() {
+ var control = createTemporaryObject(scrollableLabels, testCase)
+ verify(control)
+
+ var flickable = control.contentItem
+ verify(flickable.hasOwnProperty("contentX"))
+ verify(flickable.hasOwnProperty("contentY"))
+
+ compare(control.contentChildren, flickable.contentItem.children)
+
+ var label1 = control.contentChildren[0]
+ compare(label1.text, "First")
+
+ var label2 = control.contentChildren[1]
+ compare(label2.text, "Second")
+
+ var label3 = control.contentChildren[2]
+ compare(label3.text, "Third")
+
+ var expectedContentHeight = label1.implicitHeight + label2.implicitHeight + label3.implicitHeight
+ compare(control.contentHeight, expectedContentHeight)
+ compare(flickable.contentHeight, expectedContentHeight)
+ }
+
+ function test_listView() {
+ var control = createTemporaryObject(scrollableListView, testCase)
+ verify(control)
+
+ var listview = control.contentItem
+ verify(listview.hasOwnProperty("contentX"))
+ verify(listview.hasOwnProperty("contentY"))
+ verify(listview.hasOwnProperty("model"))
+
+ compare(control.contentWidth, listview.contentWidth)
+ compare(control.contentHeight, listview.contentHeight)
+ }
+
+ function test_scrollableFlickable() {
+ // Check that if the application adds a flickable as a child of a
+ // scrollview, the scrollview doesn't try to calculate and change
+ // the flickables contentWidth/Height based on the flickables
+ // children, even if the flickable has an empty or negative content
+ // size. Some flickables (e.g ListView) sets a negative
+ // contentWidth on purpose, which should be respected.
+ var scrollview = createTemporaryObject(scrollableFlickable, testCase)
+ verify(scrollview)
+
+ var flickable = scrollview.contentItem
+ verify(flickable.hasOwnProperty("contentX"))
+ verify(flickable.hasOwnProperty("contentY"))
+
+ compare(flickable.contentWidth, -1)
+ compare(flickable.contentHeight, -1)
+ compare(scrollview.contentWidth, -1)
+ compare(scrollview.contentHeight, -1)
+ }
+
+ function test_scrollableWithContentSize() {
+ // Check that if the scrollview has contentWidth/Height set, but
+ // not the flickable, then those values will be forwarded and used
+ // by the flickable (rather than trying to calculate the content size
+ // based on the flickables children).
+ var scrollview = createTemporaryObject(scrollableWithContentSize, testCase)
+ verify(scrollview)
+
+ var flickable = scrollview.contentItem
+ verify(flickable.hasOwnProperty("contentX"))
+ verify(flickable.hasOwnProperty("contentY"))
+
+ compare(flickable.contentWidth, 1000)
+ compare(flickable.contentHeight, 1000)
+ compare(scrollview.contentWidth, 1000)
+ compare(scrollview.contentHeight, 1000)
+ }
+
+ function test_scrollableAndFlickableWithContentSize() {
+ // Check that if both the scrollview and the flickable has
+ // contentWidth/Height set (which is an inconsistency/fault
+ // by the app), the content size of the scrollview wins.
+ var scrollview = createTemporaryObject(scrollableAndFlicableWithContentSize, testCase)
+ verify(scrollview)
+
+ var flickable = scrollview.contentItem
+ verify(flickable.hasOwnProperty("contentX"))
+ verify(flickable.hasOwnProperty("contentY"))
+
+ compare(flickable.contentWidth, 1000)
+ compare(flickable.contentHeight, 1000)
+ compare(scrollview.contentWidth, 1000)
+ compare(scrollview.contentHeight, 1000)
+ }
+
+ function test_flickableWithExplicitContentSize() {
+ var control = createTemporaryObject(emptyFlickable, testCase)
+ verify(control)
+
+ var flickable = control.contentItem
+ verify(flickable.hasOwnProperty("contentX"))
+ verify(flickable.hasOwnProperty("contentY"))
+
+ var flickableContentSize = 1000;
+ flickable.contentWidth = flickableContentSize;
+ flickable.contentHeight = flickableContentSize;
+
+ compare(flickable.contentWidth, flickableContentSize)
+ compare(flickable.contentHeight, flickableContentSize)
+ compare(control.implicitWidth, flickableContentSize)
+ compare(control.implicitHeight, flickableContentSize)
+ compare(control.contentWidth, flickableContentSize)
+ compare(control.contentHeight, flickableContentSize)
+
+ // Add a single child to the flickable. This should not
+ // trick ScrollView into taking the implicit size of
+ // the child as content size, since the flickable
+ // already has an explicit content size.
+ labelComponent.createObject(flickable);
+
+ compare(flickable.contentWidth, flickableContentSize)
+ compare(flickable.contentHeight, flickableContentSize)
+ compare(control.implicitWidth, flickableContentSize)
+ compare(control.implicitHeight, flickableContentSize)
+ compare(control.contentWidth, flickableContentSize)
+ compare(control.contentHeight, flickableContentSize)
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(scrollView, testCase, {width: 200, height: 200, contentHeight: 400})
+ verify(control)
+
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.contentItem.contentY, 0)
+
+ for (var y = control.height / 2; y >= 0; --y) {
+ mouseMove(control, control.width / 2, y, 10)
+ compare(control.contentItem.contentY, 0)
+ }
+
+ mouseRelease(control, control.width / 2, 0, Qt.LeftButton)
+ compare(control.contentItem.contentY, 0)
+ }
+
+ function test_hover() {
+ var control = createTemporaryObject(scrollView, testCase, {width: 200, height: 200, contentHeight: 400})
+ verify(control)
+
+ var vertical = control.ScrollBar.vertical
+ verify(vertical)
+ vertical.hoverEnabled = true
+
+ mouseMove(vertical, vertical.width / 2, vertical.height / 2)
+ compare(vertical.visible, true)
+ compare(vertical.hovered, true)
+ compare(vertical.active, true)
+ compare(vertical.interactive, true)
+ }
+
+ function test_wheel() {
+ var control = createTemporaryObject(scrollView, testCase, {width: 200, height: 200, contentHeight: 400})
+ verify(control)
+
+ var vertical = control.ScrollBar.vertical
+ verify(vertical)
+
+ mouseWheel(control, control.width / 2, control.height / 2, 0, -120)
+ compare(vertical.visible, true)
+ compare(vertical.active, true)
+ compare(vertical.interactive, true)
+ }
+
+ function test_touch() {
+ var control = createTemporaryObject(scrollView, testCase, {width: 200, height: 200, contentHeight: 400})
+ verify(control)
+
+ var vertical = control.ScrollBar.vertical
+ verify(vertical)
+
+ var touch = touchEvent(control)
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.contentItem.contentY, 0)
+
+ compare(vertical.active, false)
+ compare(vertical.interactive, false)
+
+ var maxContentY = 0
+ for (var y = control.height / 2; y >= 0; --y) {
+ touch.move(0, control, control.width / 2, y).commit()
+ maxContentY = Math.max(maxContentY, control.contentItem.contentY)
+ }
+ verify(maxContentY > 0)
+
+ compare(vertical.active, true)
+ compare(vertical.interactive, false)
+
+ touch.release(0, control, control.width / 2, 0).commit()
+ }
+
+ function test_keys() {
+ var control = createTemporaryObject(scrollView, testCase, {width: 200, height: 200, contentWidth: 400, contentHeight: 400})
+ verify(control)
+ // If the viewport is smaller than the size of the ScrollView
+ // (like windows style does due to its opaque scrollbars),
+ // make the ScrollView taller in order to keep the *viewport* 200x200
+ control.width += (control.width - control.availableWidth)
+ control.height += (control.height - control.availableHeight)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ var vertical = control.ScrollBar.vertical
+ verify(vertical)
+
+ compare(vertical.position, 0.0)
+ for (var i = 1; i <= 10; ++i) {
+ keyClick(Qt.Key_Down)
+ compare(vertical.position, Math.min(0.5, i * 0.1))
+ }
+ compare(vertical.position, 0.5)
+ for (i = 1; i <= 10; ++i) {
+ keyClick(Qt.Key_Up)
+ compare(vertical.position, Math.max(0.0, 0.5 - i * 0.1))
+ }
+ compare(vertical.position, 0.0)
+
+ var horizontal = control.ScrollBar.horizontal
+ verify(horizontal)
+
+ compare(horizontal.position, 0.0)
+ for (i = 1; i <= 10; ++i) {
+ keyClick(Qt.Key_Right)
+ compare(horizontal.position, Math.min(0.5, i * 0.1))
+ }
+ compare(horizontal.position, 0.5)
+ for (i = 1; i <= 10; ++i) {
+ keyClick(Qt.Key_Left)
+ compare(horizontal.position, Math.max(0.0, 0.5 - i * 0.1))
+ }
+ compare(horizontal.position, 0.0)
+ }
+
+ function test_textArea() {
+ // TODO: verify no binding loop warnings (QTBUG-62325)
+ var control = createTemporaryObject(scrollableTextArea, testCase)
+ verify(control)
+
+ var flickable = control.contentItem
+ verify(flickable && flickable.hasOwnProperty("contentX"))
+
+ var textArea = flickable.contentItem.children[0]
+ verify(textArea && textArea.hasOwnProperty("text"))
+
+ compare(control.contentWidth, flickable.contentWidth)
+ compare(control.contentHeight, flickable.contentHeight)
+ }
+
+ function test_textAreaWithSibling() {
+ // Checks that it does not crash when the ScrollView is deleted
+ var control = createTemporaryObject(scrollableTextAreaWithSibling, testCase)
+ verify(control)
+ }
+
+ Component {
+ id: zeroSizedContentItemComponent
+ ScrollView {
+ width: 100
+ height: 100
+ contentItem: Item {}
+ }
+ }
+
+ function test_zeroSizedContentItem() {
+ ignoreWarning(/ScrollView only supports Flickable types as its contentItem/)
+ let control = createTemporaryObject(zeroSizedContentItemComponent, testCase)
+ verify(control)
+
+ let verticalScrollBar = control.ScrollBar.vertical
+ verify(verticalScrollBar)
+ // Scrolling a ScrollView with a zero-sized contentItem shouldn't crash.
+ mouseDrag(verticalScrollBar, verticalScrollBar.width / 2, verticalScrollBar.height / 2, 0, 50)
+
+ let horizontalScrollBar = control.ScrollBar.horizontal
+ verify(verticalScrollBar)
+ mouseDrag(horizontalScrollBar, horizontalScrollBar.width / 2, horizontalScrollBar.height / 2, 50, 0)
+ }
+
+ function test_customScrollBars() {
+ let control = createTemporaryObject(scrollView, testCase)
+ verify(control)
+ control.ScrollBar.vertical.objectName = "oldVerticalScrollBar"
+ control.ScrollBar.horizontal.objectName = "oldHorizontalScrollBar"
+
+ let oldVerticalScrollBar = control.ScrollBar.vertical
+ verify(oldVerticalScrollBar)
+ compare(oldVerticalScrollBar.objectName, "oldVerticalScrollBar")
+
+ let oldHorizontalScrollBar = control.ScrollBar.horizontal
+ verify(oldHorizontalScrollBar)
+ compare(oldHorizontalScrollBar.objectName, "oldHorizontalScrollBar")
+
+ // Create the new scroll bars imperatively so that we can easily access the old ones.
+ control.ScrollBar.vertical = scrollBarComponent.createObject(control, { objectName: "newVerticalScrollBar" })
+ verify(control.ScrollBar.vertical)
+ let newVerticalScrollBar = findChild(control, "newVerticalScrollBar")
+ verify(newVerticalScrollBar)
+ verify(newVerticalScrollBar.visible)
+ verify(!oldVerticalScrollBar.visible)
+
+ control.ScrollBar.horizontal = scrollBarComponent.createObject(control, { objectName: "newHorizontalScrollBar" })
+ verify(control.ScrollBar.horizontal)
+ let newHorizontalScrollBar = findChild(control, "newHorizontalScrollBar")
+ verify(newHorizontalScrollBar)
+ verify(newHorizontalScrollBar.visible)
+ verify(!oldHorizontalScrollBar.visible)
+ }
+
+ Component {
+ id: bindingToContentItemAndStandaloneFlickable
+
+ Item {
+ width: 200
+ height: 200
+
+ property alias scrollView: scrollView
+
+ ScrollView {
+ id: scrollView
+ anchors.fill: parent
+ contentItem: listView
+
+ property Item someBinding: contentItem
+ }
+ ListView {
+ id: listView
+ model: 10
+ delegate: ItemDelegate {
+ text: modelData
+ width: listView.width
+ }
+ }
+ }
+ }
+
+ // Tests that scroll bars show up for a ScrollView where
+ // - its contentItem is declared as a standalone, separate item
+ // - there is a binding to contentItem (which causes a default Flickable to be created)
+ function test_bindingToContentItemAndStandaloneFlickable() {
+ let root = createTemporaryObject(bindingToContentItemAndStandaloneFlickable, testCase)
+ verify(root)
+
+ let control = root.scrollView
+ let verticalScrollBar = control.ScrollBar.vertical
+ let horizontalScrollBar = control.ScrollBar.horizontal
+ compare(verticalScrollBar.parent, control)
+ compare(horizontalScrollBar.parent, control)
+ verify(verticalScrollBar.visible)
+ verify(horizontalScrollBar.visible)
+
+ mouseDrag(verticalScrollBar, verticalScrollBar.width / 2, verticalScrollBar.height / 2, 0, 50)
+ verify(verticalScrollBar.active)
+ verify(horizontalScrollBar.active)
+ }
+
+ Component {
+ id: contentItemAssignedImperatively
+
+ Item {
+ width: 100
+ height: 100
+
+ property alias scrollView: scrollView
+
+ ListView {
+ id: listView
+ model: 20
+ delegate: Text {
+ text: modelData
+ }
+ }
+
+ Component.onCompleted: scrollView.contentItem = listView
+
+ ScrollView {
+ id: scrollView
+ anchors.fill: parent
+
+ ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+ }
+ }
+ }
+
+ // Tests that a ListView declared before the ScrollView (as the QObject destruction order
+ // is relevant for the bug) and assigned imperatively to ScrollView does not cause a crash
+ // on exit.
+ function test_contentItemAssignedImperatively() {
+ let root = createTemporaryObject(contentItemAssignedImperatively, testCase)
+ verify(root)
+ // Shouldn't crash.
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_selectionrectangle.qml b/tests/auto/quickcontrols2/controls/data/tst_selectionrectangle.qml
new file mode 100644
index 0000000000..210c6594cd
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_selectionrectangle.qml
@@ -0,0 +1,373 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+import Qt.labs.qmlmodels
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "SelectionRectangle"
+
+ property real cellWidth: 50
+ property real cellHeight: 20
+ property Item handle: null
+ property bool handleWasDragged: false
+
+ Component {
+ id: handleComp
+ Rectangle {
+ id: handle
+ width: 28
+ height: width
+ radius: width / 2
+ property bool dragging: SelectionRectangle.dragging
+ property Item control: SelectionRectangle.control
+ border.width: 1
+ border.color: "red"
+ visible: SelectionRectangle.control.active
+
+ SelectionRectangle.onDraggingChanged: {
+ if (SelectionRectangle.dragging)
+ testCase.handleWasDragged = true
+ }
+
+ Component.onCompleted: testCase.handle = handle
+ }
+ }
+
+ Component {
+ id: tableviewComp
+ TableView {
+ id: tableView
+ clip: true
+ anchors.fill: parent
+
+ model: TableModel {
+ TableModelColumn { display: "c1" }
+ TableModelColumn { display: "c2" }
+ TableModelColumn { display: "c3" }
+ TableModelColumn { display: "c4" }
+ rows: [
+ { "c1": "v1", "c2":"v2", "c3":"v3", "c4": "v4" },
+ { "c1": "v1", "c2":"v2", "c3":"v3", "c4": "v4" },
+ { "c1": "v1", "c2":"v2", "c3":"v3", "c4": "v4" },
+ { "c1": "v1", "c2":"v2", "c3":"v3", "c4": "v4" },
+ ]
+ }
+
+ delegate: Rectangle {
+ required property bool selected
+ implicitWidth: cellWidth
+ implicitHeight: cellHeight
+ color: selected ? "lightblue" : "gray"
+ Text { text: "cell" }
+ }
+
+ selectionModel: ItemSelectionModel {
+ model: tableView.model
+ }
+
+ property alias selectionRectangle: selectionRectangle
+ SelectionRectangle {
+ id: selectionRectangle
+ target: tableView
+ }
+ }
+
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_set_target() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ compare(selectionRectangle.target, tableView)
+
+ selectionRectangle.target = null
+ compare(selectionRectangle.target, null)
+
+ selectionRectangle.target = tableView
+ compare(selectionRectangle.target, tableView)
+ }
+
+ function test_set_selectionMode() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ // Default selection mode should be Auto
+ compare(selectionRectangle.selectionMode, SelectionRectangle.Auto)
+
+ selectionRectangle.selectionMode = SelectionRectangle.Drag
+ compare(selectionRectangle.selectionMode, SelectionRectangle.Drag)
+
+ selectionRectangle.selectionMode = SelectionRectangle.PressAndHold
+ compare(selectionRectangle.selectionMode, SelectionRectangle.PressAndHold)
+
+ selectionRectangle.selectionMode = SelectionRectangle.Auto
+ compare(selectionRectangle.selectionMode, SelectionRectangle.Auto)
+ }
+
+ function test_set_handles() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ selectionRectangle.topLeftHandle = null
+ compare(selectionRectangle.topLeftHandle, null)
+
+ selectionRectangle.bottomRightHandle = null
+ compare(selectionRectangle.bottomRightHandle, null)
+
+ selectionRectangle.topLeftHandle = handleComp
+ compare(selectionRectangle.topLeftHandle, handleComp)
+
+ selectionRectangle.bottomRightHandle = handleComp
+ compare(selectionRectangle.bottomRightHandle, handleComp)
+ }
+
+ function test_drag() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ selectionRectangle.selectionMode = SelectionRectangle.Drag
+
+ let activeSpy = signalSpy.createObject(selectionRectangle, {target: selectionRectangle, signalName: "activeChanged"})
+ let draggingSpy = signalSpy.createObject(selectionRectangle, {target: selectionRectangle, signalName: "draggingChanged"})
+ verify(activeSpy.valid)
+ verify(draggingSpy.valid)
+
+ verify(!tableView.selectionModel.hasSelection)
+ mouseDrag(tableView, 1, 1, (cellWidth * 2) - 2, 1, Qt.LeftButton)
+ verify(tableView.selectionModel.hasSelection)
+ compare(tableView.selectionModel.selectedIndexes.length, 2)
+ verify(tableView.selectionModel.isSelected(tableView.model.index(0, 0)))
+ verify(tableView.selectionModel.isSelected(tableView.model.index(0, 1)))
+
+ compare(activeSpy.count, 1)
+ compare(draggingSpy.count, 2)
+
+ // Remove selection
+ mouseClick(tableView, 1, 1, Qt.LeftButton)
+ verify(!tableView.selectionModel.hasSelection)
+ compare(draggingSpy.count, 2)
+ compare(activeSpy.count, 2)
+
+ // Ensure that a press and hold doesn't start a selection
+ mousePress(tableView, 1, 1, Qt.LeftButton)
+ mousePress(tableView, 1, 1, Qt.LeftButton, Qt.NoModifier, 1000)
+ verify(!tableView.selectionModel.hasSelection)
+ }
+
+ function test_pressAndHold() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ selectionRectangle.selectionMode = SelectionRectangle.PressAndHold
+
+ let activeSpy = signalSpy.createObject(selectionRectangle, {target: selectionRectangle, signalName: "activeChanged"})
+ let draggingSpy = signalSpy.createObject(selectionRectangle, {target: selectionRectangle, signalName: "draggingChanged"})
+ verify(activeSpy.valid)
+ verify(draggingSpy.valid)
+
+ verify(!tableView.selectionModel.hasSelection)
+ // Do a press and hold
+ mousePress(tableView, 1, 1, Qt.LeftButton)
+ mousePress(tableView, 1, 1, Qt.LeftButton, Qt.NoModifier, 1000)
+ verify(tableView.selectionModel.hasSelection)
+ compare(tableView.selectionModel.selectedIndexes.length, 1)
+ verify(tableView.selectionModel.isSelected(tableView.model.index(0, 0)))
+
+ compare(draggingSpy.count, 0)
+ compare(activeSpy.count, 1)
+
+ // Remove selection
+ mouseClick(tableView, 1, 1, Qt.LeftButton)
+ verify(!tableView.selectionModel.hasSelection)
+ compare(draggingSpy.count, 0)
+ compare(activeSpy.count, 2)
+
+ // Ensure that a drag doesn't start a selection
+ mouseDrag(tableView, 1, 1, (cellWidth * 2) - 2, 1, Qt.LeftButton)
+ verify(!tableView.selectionModel.hasSelection)
+ }
+
+ function test_pressAndHold_on_top_of_handle() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ selectionRectangle.selectionMode = SelectionRectangle.PressAndHold
+
+ let activeSpy = signalSpy.createObject(selectionRectangle, {target: selectionRectangle, signalName: "activeChanged"})
+ let draggingSpy = signalSpy.createObject(selectionRectangle, {target: selectionRectangle, signalName: "draggingChanged"})
+ verify(activeSpy.valid)
+ verify(draggingSpy.valid)
+
+ verify(!tableView.selectionModel.hasSelection)
+ // Do a press and hold
+ mousePress(tableView, 1, 1, Qt.LeftButton)
+ mouseRelease(tableView, 1, 1, Qt.LeftButton, Qt.NoModifier, 2000)
+ verify(tableView.selectionModel.hasSelection)
+ compare(tableView.selectionModel.selectedIndexes.length, 1)
+ verify(tableView.selectionModel.isSelected(tableView.model.index(0, 0)))
+
+ compare(draggingSpy.count, 0)
+ compare(activeSpy.count, 1)
+
+ // Do another press and hold on top the part of the bottom right handle that
+ // also covers cell 1, 1. Without any handles, this would start a new selection
+ // on top of that cell. But when the handles are in front, they should block it.
+ mousePress(tableView, cellWidth + 1, cellHeight + 1, Qt.LeftButton)
+ mouseRelease(tableView, cellWidth + 1, cellHeight + 1, Qt.LeftButton, Qt.NoModifier, 2000)
+ compare(tableView.selectionModel.selectedIndexes.length, 1)
+ verify(tableView.selectionModel.isSelected(tableView.model.index(0, 0)))
+ }
+
+ function test_handleDragTopLeft() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ selectionRectangle.selectionMode = SelectionRectangle.Drag
+
+ verify(!tableView.selectionModel.hasSelection)
+ // Select four cells in the middle
+ mouseDrag(tableView, cellWidth + 1, cellHeight + 1, (cellWidth * 2) - 2, (cellHeight * 2) - 2, Qt.LeftButton)
+ compare(tableView.selectionModel.selectedIndexes.length, 4)
+ for (var x = 1; x < 3; ++x) {
+ for (var y = 1; y < 3; ++y) {
+ verify(tableView.selectionModel.isSelected(tableView.model.index(x, y)))
+ }
+ }
+
+ // Drag on the top left handle, so that the selection extends to cell 0, 0
+ mouseDrag(tableView, cellWidth, cellHeight, -cellWidth / 2, -cellHeight / 2, Qt.LeftButton)
+ compare(tableView.selectionModel.selectedIndexes.length, 9)
+ for (x = 0; x < 3; ++x) {
+ for (y = 0; y < 3; ++y) {
+ verify(tableView.selectionModel.isSelected(tableView.model.index(x, y)))
+ }
+ }
+ }
+
+ function test_handleDragBottomRight_shrink() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ selectionRectangle.selectionMode = SelectionRectangle.Drag
+
+ verify(!tableView.selectionModel.hasSelection)
+ // Select four cells in the middle
+ mouseDrag(tableView, cellWidth + 1, cellHeight + 1, (cellWidth * 2) - 2, (cellHeight * 2) - 2, Qt.LeftButton)
+ compare(tableView.selectionModel.selectedIndexes.length, 4)
+ for (var x = 1; x < 3; ++x) {
+ for (var y = 1; y < 3; ++y) {
+ verify(tableView.selectionModel.isSelected(tableView.model.index(x, y)))
+ }
+ }
+
+ // Drag on the bottom right handle, so that the selection shrinks to cell 1, 1
+ mouseDrag(tableView, (cellWidth * 3) - 1, (cellHeight * 3) - 1, -cellWidth, -cellHeight, Qt.LeftButton)
+ compare(tableView.selectionModel.selectedIndexes.length, 1)
+ verify(tableView.selectionModel.isSelected(tableView.model.index(1, 1)))
+ }
+
+ function test_handleDragBottomRight_expand() {
+ let tableView = createTemporaryObject(tableviewComp, testCase)
+ verify(tableView)
+ let selectionRectangle = tableView.selectionRectangle
+ verify(selectionRectangle)
+
+ selectionRectangle.selectionMode = SelectionRectangle.Drag
+
+ verify(!tableView.selectionModel.hasSelection)
+ // Select four cells in the middle
+ mouseDrag(tableView, cellWidth + 1, cellHeight + 1, (cellWidth * 2) - 2, (cellHeight * 2) - 2, Qt.LeftButton)
+ compare(tableView.selectionModel.selectedIndexes.length, 4)
+ for (var x = 1; x < 3; ++x) {
+ for (var y = 1; y < 3; ++y) {
+ verify(tableView.selectionModel.isSelected(tableView.model.index(x, y)))
+ }
+ }
+
+ // Drag on the bottom right handle, so that the selection expands to cell 9 cells
+ mouseDrag(tableView, cellWidth * 3, cellHeight * 3, cellWidth * 4, cellHeight * 4, Qt.LeftButton)
+ compare(tableView.selectionModel.selectedIndexes.length, 9)
+ for (x = 1; x < 4; ++x) {
+ for (y = 1; y < 4; ++y) {
+ verify(tableView.selectionModel.isSelected(tableView.model.index(x, y)))
+ }
+ }
+ }
+
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_slider.qml b/tests/auto/quickcontrols2/controls/data/tst_slider.qml
new file mode 100644
index 0000000000..39fcaa3a2e
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_slider.qml
@@ -0,0 +1,954 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Slider"
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component {
+ id: slider
+ Slider { }
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(slider, testCase)
+ verify(control)
+
+ compare(control.stepSize, 0)
+ compare(control.snapMode, Slider.NoSnap)
+ compare(control.orientation, Qt.Horizontal)
+ compare(control.horizontal, true)
+ compare(control.vertical, false)
+ }
+
+ function test_value() {
+ var control = createTemporaryObject(slider, testCase)
+ verify(control)
+
+ compare(control.value, 0.0)
+ control.value = 0.5
+ compare(control.value, 0.5)
+ control.value = 1.0
+ compare(control.value, 1.0)
+ control.value = -1.0
+ compare(control.value, 0.0)
+ control.value = 2.0
+ compare(control.value, 1.0)
+ }
+
+ function test_range() {
+ var control = createTemporaryObject(slider, testCase, {from: 0, to: 100, value: 50})
+ verify(control)
+
+ compare(control.from, 0)
+ compare(control.to, 100)
+ compare(control.value, 50)
+ compare(control.position, 0.5)
+
+ control.value = 1000
+ compare(control.value, 100)
+ compare(control.position, 1)
+
+ control.value = -1
+ compare(control.value, 0)
+ compare(control.position, 0)
+
+ control.from = 25
+ compare(control.from, 25)
+ compare(control.value, 25)
+ compare(control.position, 0)
+
+ control.to = 75
+ compare(control.to, 75)
+ compare(control.value, 25)
+ compare(control.position, 0)
+
+ control.value = 50
+ compare(control.value, 50)
+ compare(control.position, 0.5)
+ }
+
+ function test_inverted() {
+ var control = createTemporaryObject(slider, testCase, {from: 1.0, to: -1.0})
+ verify(control)
+
+ compare(control.from, 1.0)
+ compare(control.to, -1.0)
+ compare(control.value, 0.0)
+ compare(control.position, 0.5)
+
+ control.value = 2.0
+ compare(control.value, 1.0)
+ compare(control.position, 0.0)
+
+ control.value = -2.0
+ compare(control.value, -1.0)
+ compare(control.position, 1.0)
+
+ control.value = 0.0
+ compare(control.value, 0.0)
+ compare(control.position, 0.5)
+ }
+
+ function test_position() {
+ var control = createTemporaryObject(slider, testCase)
+ verify(control)
+
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+
+ control.value = 0.25
+ compare(control.value, 0.25)
+ compare(control.position, 0.25)
+
+ control.value = 0.75
+ compare(control.value, 0.75)
+ compare(control.position, 0.75)
+ }
+
+ function test_visualPosition() {
+ var control = createTemporaryObject(slider, testCase)
+ verify(control)
+
+ compare(control.value, 0.0)
+ compare(control.visualPosition, 0.0)
+
+ control.value = 0.25
+ compare(control.value, 0.25)
+ compare(control.visualPosition, 0.25)
+
+ // RTL locale
+ control.locale = Qt.locale("ar_EG")
+ compare(control.visualPosition, 0.25)
+
+ // RTL locale + LayoutMirroring
+ control.LayoutMirroring.enabled = true
+ compare(control.visualPosition, 0.75)
+
+ // LTR locale + LayoutMirroring
+ control.locale = Qt.locale("en_US")
+ compare(control.visualPosition, 0.75)
+
+ // LTR locale
+ control.LayoutMirroring.enabled = false
+ compare(control.visualPosition, 0.25)
+
+ // LayoutMirroring
+ control.LayoutMirroring.enabled = true
+ compare(control.visualPosition, 0.75)
+ }
+
+ function test_orientation() {
+ var control = createTemporaryObject(slider, testCase)
+ verify(control)
+
+ compare(control.orientation, Qt.Horizontal)
+ compare(control.horizontal, true)
+ compare(control.vertical, false)
+ verify(control.width > control.height)
+
+ control.orientation = Qt.Vertical
+ compare(control.orientation, Qt.Vertical)
+ compare(control.horizontal, false)
+ compare(control.vertical, true)
+ verify(control.width < control.height)
+ }
+
+ function test_mouse_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, live: false },
+ { tag: "vertical", orientation: Qt.Vertical, live: false },
+ { tag: "horizontal:live", orientation: Qt.Horizontal, live: true },
+ { tag: "vertical:live", orientation: Qt.Vertical, live: true }
+ ]
+ }
+
+ function test_mouse(data) {
+ var control = createTemporaryObject(slider, testCase, {orientation: data.orientation, live: data.live})
+ verify(control)
+
+ var pressedCount = 0
+ var movedCount = 0
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ var movedSpy = signalSpy.createObject(control, {target: control, signalName: "moved"})
+ verify(movedSpy.valid)
+
+ mousePress(control, 0, control.height - 1, Qt.LeftButton)
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+
+ // mininum on the left in horizontal vs. at the bottom in vertical
+ mouseMove(control, -control.width, 2 * control.height, 0)
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+
+ mouseMove(control, control.width * 0.5, control.height * 0.5, 0)
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, true)
+ compare(control.value, data.live ? 0.5 : 0.0)
+ compare(control.position, 0.5)
+
+ mouseRelease(control, control.width * 0.5, control.height * 0.5, Qt.LeftButton)
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, false)
+ compare(control.value, 0.5)
+ compare(control.position, 0.5)
+
+ mousePress(control, control.width - 1, 0, Qt.LeftButton)
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, true)
+ compare(control.value, data.live ? 1.0 : 0.5)
+ compare(control.position, 1.0)
+
+ // maximum on the right in horizontal vs. at the top in vertical
+ mouseMove(control, control.width * 2, -control.height, 0)
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, true)
+ compare(control.value, data.live ? 1.0 : 0.5)
+ compare(control.position, 1.0)
+
+ mouseMove(control, control.width * 0.75, control.height * 0.25, 0)
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, true)
+ compare(control.value, data.live ? control.position : 0.5)
+ verify(control.position >= 0.75)
+
+ mouseRelease(control, control.width * 0.25, control.height * 0.75, Qt.LeftButton)
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, false)
+ compare(control.value, control.position)
+ verify(control.value <= 0.25 && control.value >= 0.0)
+ verify(control.position <= 0.25 && control.position >= 0.0)
+
+ // QTBUG-53846
+ mouseClick(control, control.width * 0.5, control.height * 0.5, Qt.LeftButton)
+ compare(movedSpy.count, ++movedCount)
+ compare(pressedSpy.count, pressedCount += 2)
+ compare(control.value, 0.5)
+ compare(control.position, 0.5)
+ }
+
+ function test_touch_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, live: false },
+ { tag: "vertical", orientation: Qt.Vertical, live: false },
+ { tag: "horizontal:live", orientation: Qt.Horizontal, live: true },
+ { tag: "vertical:live", orientation: Qt.Vertical, live: true }
+ ]
+ }
+
+ function test_touch(data) {
+ var control = createTemporaryObject(slider, testCase, {orientation: data.orientation, live: data.live})
+ verify(control)
+
+ var pressedCount = 0
+ var movedCount = 0
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ var movedSpy = signalSpy.createObject(control, {target: control, signalName: "moved"})
+ verify(movedSpy.valid)
+
+ var touch = touchEvent(control)
+ touch.press(0, control, 0, 0).commit()
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+
+ // mininum on the left in horizontal vs. at the bottom in vertical
+ touch.move(0, control, -control.width, 2 * control.height, 0).commit()
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+
+ touch.move(0, control, control.width * 0.5, control.height * 0.5, 0).commit()
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, true)
+ compare(control.value, data.live ? 0.5 : 0.0)
+ compare(control.position, 0.5)
+
+ touch.release(0, control, control.width * 0.5, control.height * 0.5).commit()
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, false)
+ compare(control.value, 0.5)
+ compare(control.position, 0.5)
+
+ touch.press(0, control, control.width - 1, control.height - 1).commit()
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, true)
+ compare(control.value, 0.5)
+ compare(control.position, 0.5)
+
+ // maximum on the right in horizontal vs. at the top in vertical
+ touch.move(0, control, control.width * 2, -control.height, 0).commit()
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, true)
+ compare(control.value, data.live ? 1.0 : 0.5)
+ compare(control.position, 1.0)
+
+ touch.move(0, control, control.width * 0.75, control.height * 0.25, 0).commit()
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, true)
+ compare(control.value, data.live ? control.position : 0.5)
+ verify(control.position >= 0.75)
+
+ touch.release(0, control, control.width * 0.25, control.height * 0.75).commit()
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, false)
+ compare(control.value, control.position)
+ verify(control.value <= 0.25 && control.value >= 0.0)
+ verify(control.position <= 0.25 && control.position >= 0.0)
+
+ // QTBUG-53846
+ touch.press(0, control).commit().release(0, control).commit()
+ compare(movedSpy.count, ++movedCount)
+ compare(pressedSpy.count, pressedCount += 2)
+ compare(control.value, 0.5)
+ compare(control.position, 0.5)
+ }
+
+ function test_multiTouch() {
+ var control1 = createTemporaryObject(slider, testCase, {live: false})
+ verify(control1)
+
+ var pressedCount1 = 0
+ var movedCount1 = 0
+
+ var pressedSpy1 = signalSpy.createObject(control1, {target: control1, signalName: "pressedChanged"})
+ verify(pressedSpy1.valid)
+
+ var movedSpy1 = signalSpy.createObject(control1, {target: control1, signalName: "moved"})
+ verify(movedSpy1.valid)
+
+ var touch = touchEvent(control1)
+ touch.press(0, control1, 0, 0).commit().move(0, control1, control1.width, control1.height).commit()
+
+ compare(pressedSpy1.count, ++pressedCount1)
+ compare(movedSpy1.count, ++movedCount1)
+ compare(control1.pressed, true)
+ compare(control1.position, 1.0)
+
+ // second touch point on the same control is ignored
+ touch.stationary(0).press(1, control1, 0, 0).commit()
+ touch.stationary(0).move(1, control1).commit()
+ touch.stationary(0).release(1).commit()
+
+ compare(pressedSpy1.count, pressedCount1)
+ compare(movedSpy1.count, movedCount1)
+ compare(control1.pressed, true)
+ compare(control1.position, 1.0)
+
+ var control2 = createTemporaryObject(slider, testCase, {y: control1.height, live: false})
+ verify(control2)
+
+ var pressedCount2 = 0
+ var movedCount2 = 0
+
+ var pressedSpy2 = signalSpy.createObject(control2, {target: control2, signalName: "pressedChanged"})
+ verify(pressedSpy2.valid)
+
+ var movedSpy2 = signalSpy.createObject(control2, {target: control2, signalName: "moved"})
+ verify(movedSpy2.valid)
+
+ // press the second slider
+ touch.stationary(0).press(2, control2, 0, 0).commit()
+
+ compare(pressedSpy2.count, ++pressedCount2)
+ compare(movedSpy2.count, movedCount2)
+ compare(control2.pressed, true)
+ compare(control2.position, 0.0)
+
+ compare(pressedSpy1.count, pressedCount1)
+ compare(movedSpy1.count, movedCount1)
+ compare(control1.pressed, true)
+ compare(control1.position, 1.0)
+
+ // move both sliders
+ touch.move(0, control1).move(2, control2).commit()
+
+ compare(pressedSpy2.count, pressedCount2)
+ compare(movedSpy2.count, ++movedCount2)
+ compare(control2.pressed, true)
+ compare(control2.position, 0.5)
+ compare(control2.value, 0.0)
+
+ compare(pressedSpy1.count, pressedCount1)
+ compare(movedSpy1.count, ++movedCount1)
+ compare(control1.pressed, true)
+ compare(control1.position, 0.5)
+ compare(control1.value, 0.0)
+
+ // release both sliders
+ touch.release(0, control1).release(2, control2).commit()
+
+ compare(pressedSpy2.count, ++pressedCount2)
+ compare(movedSpy2.count, movedCount2)
+ compare(control2.pressed, false)
+ compare(control2.position, 0.5)
+ compare(control2.value, 0.5)
+
+ compare(pressedSpy1.count, ++pressedCount1)
+ compare(movedSpy1.count, movedCount1)
+ compare(control1.pressed, false)
+ compare(control1.position, 0.5)
+ compare(control1.value, 0.5)
+ }
+
+ function test_keys_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, decrease: Qt.Key_Left, increase: Qt.Key_Right },
+ { tag: "vertical", orientation: Qt.Vertical, decrease: Qt.Key_Down, increase: Qt.Key_Up }
+ ]
+ }
+
+ function test_keys(data) {
+ var control = createTemporaryObject(slider, testCase, {orientation: data.orientation})
+ verify(control)
+
+ var pressedCount = 0
+ var movedCount = 0
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ var movedSpy = signalSpy.createObject(control, {target: control, signalName: "moved"})
+ verify(movedSpy.valid)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ var oldValue = 0.0
+ control.value = 0.5
+
+ for (var d1 = 1; d1 <= 10; ++d1) {
+ oldValue = control.value
+ keyPress(data.decrease)
+ compare(control.pressed, true)
+ compare(pressedSpy.count, ++pressedCount)
+ if (oldValue !== control.value)
+ compare(movedSpy.count, ++movedCount)
+
+ compare(control.value, Math.max(0.0, 0.5 - d1 * 0.1))
+ compare(control.value, control.position)
+
+ keyRelease(data.decrease)
+ compare(control.pressed, false)
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ }
+
+ for (var i1 = 1; i1 <= 20; ++i1) {
+ oldValue = control.value
+ keyPress(data.increase)
+ compare(control.pressed, true)
+ compare(pressedSpy.count, ++pressedCount)
+ if (oldValue !== control.value)
+ compare(movedSpy.count, ++movedCount)
+
+ compare(control.value, Math.min(1.0, 0.0 + i1 * 0.1))
+ compare(control.value, control.position)
+
+ keyRelease(data.increase)
+ compare(control.pressed, false)
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ }
+
+ control.stepSize = 0.25
+
+ for (var d2 = 1; d2 <= 10; ++d2) {
+ oldValue = control.value
+ keyPress(data.decrease)
+ compare(control.pressed, true)
+ compare(pressedSpy.count, ++pressedCount)
+ if (oldValue !== control.value)
+ compare(movedSpy.count, ++movedCount)
+
+ compare(control.value, Math.max(0.0, 1.0 - d2 * 0.25))
+ compare(control.value, control.position)
+
+ keyRelease(data.decrease)
+ compare(control.pressed, false)
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ }
+
+ for (var i2 = 1; i2 <= 10; ++i2) {
+ oldValue = control.value
+ keyPress(data.increase)
+ compare(control.pressed, true)
+ compare(pressedSpy.count, ++pressedCount)
+ if (oldValue !== control.value)
+ compare(movedSpy.count, ++movedCount)
+
+ compare(control.value, Math.min(1.0, 0.0 + i2 * 0.25))
+ compare(control.value, control.position)
+
+ keyRelease(data.increase)
+ compare(control.pressed, false)
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ }
+ }
+
+ function test_padding() {
+ // test with "unbalanced" paddings (left padding != right padding) to ensure
+ // that the slider position calculation is done taking padding into account
+ // ==> the position is _not_ 0.5 in the middle of the control
+ var control = createTemporaryObject(slider, testCase, {leftPadding: 10, rightPadding: 20, live: false})
+ verify(control)
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ mousePress(control, 0, 0, Qt.LeftButton)
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+ compare(control.visualPosition, 0.0)
+
+ mouseMove(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, 0)
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ compare(control.position, 0.5)
+ compare(control.visualPosition, 0.5)
+
+ mouseMove(control, control.width * 0.5, control.height * 0.5, 0)
+ compare(pressedSpy.count, 1)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ verify(control.position > 0.5)
+ verify(control.visualPosition > 0.5)
+
+ mouseRelease(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, Qt.LeftButton)
+ compare(pressedSpy.count, 2)
+ compare(control.pressed, false)
+ compare(control.value, 0.5)
+ compare(control.position, 0.5)
+ compare(control.visualPosition, 0.5)
+
+ // RTL
+ control.value = 0
+ control.locale = Qt.locale("ar_EG")
+
+ mousePress(control, 0, 0, Qt.LeftButton)
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+ compare(control.visualPosition, 0.0)
+
+ mouseMove(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, 0)
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ compare(control.position, 0.5)
+ compare(control.visualPosition, 0.5)
+
+ mouseMove(control, control.width * 0.5, control.height * 0.5, 0)
+ compare(pressedSpy.count, 3)
+ compare(control.pressed, true)
+ compare(control.value, 0.0)
+ verify(control.position > 0.5)
+ verify(control.visualPosition > 0.5)
+
+ mouseRelease(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, Qt.LeftButton)
+ compare(pressedSpy.count, 4)
+ compare(control.pressed, false)
+ compare(control.value, 0.5)
+ compare(control.position, 0.5)
+ compare(control.visualPosition, 0.5)
+ }
+
+ function calcMousePos(control, t) {
+ t = Math.min(Math.max(t, 0.0), 1.0);
+ return control.leftPadding + control.handle.width * 0.5 + t * (control.availableWidth - control.handle.width)
+ }
+
+ function snapModeData(immediate) {
+ return [
+ { tag: "NoSnap", snapMode: Slider.NoSnap, from: 0, to: 2, values: [0, 0, 0.25], positions: [0, 0.1, 0.1] },
+ { tag: "SnapAlways (0..2)", snapMode: Slider.SnapAlways, from: 0, to: 2, values: [0.0, 0.0, 0.2], positions: [0.0, 0.1, 0.1] },
+ { tag: "SnapAlways (1..3)", snapMode: Slider.SnapAlways, from: 1, to: 3, values: [1.0, 1.0, 1.2], positions: [0.0, 0.1, 0.1] },
+ { tag: "SnapAlways (-1..1)", snapMode: Slider.SnapAlways, from: -1, to: 1, values: [0.0, 0.0, -0.8], positions: [immediate ? 0.0 : 0.5, 0.1, 0.1] },
+ { tag: "SnapAlways (1..-1)", snapMode: Slider.SnapAlways, from: 1, to: -1, values: [0.0, 0.0, 0.8], positions: [immediate ? 0.0 : 0.5, 0.1, 0.1] },
+ { tag: "SnapOnRelease (0..2)", snapMode: Slider.SnapOnRelease, from: 0, to: 2, values: [0.0, 0.0, 0.2], positions: [0.0, 0.1, 0.1] },
+ { tag: "SnapOnRelease (1..3)", snapMode: Slider.SnapOnRelease, from: 1, to: 3, values: [1.0, 1.0, 1.2], positions: [0.0, 0.1, 0.1] },
+ { tag: "SnapOnRelease (-1..1)", snapMode: Slider.SnapOnRelease, from: -1, to: 1, values: [0.0, 0.0, -0.8], positions: [immediate ? 0.0 : 0.5, 0.1, 0.1] },
+ { tag: "SnapOnRelease (1..-1)", snapMode: Slider.SnapOnRelease, from: 1, to: -1, values: [0.0, 0.0, 0.8], positions: [immediate ? 0.0 : 0.5, 0.1, 0.1] },
+ // Live
+ { tag: "SnapAlwaysLive", snapMode: Slider.SnapAlways, from: 0, to: 1, value: 0, stepSize: 1, live: true, sliderPos: 0.6, values: [0, 1, 1], positions: [0, 1, 1] },
+ { tag: "SnapAlwaysLive", snapMode: Slider.SnapAlways, from: 0, to: 1, value: 0, stepSize: 1, live: true, sliderPos: 0.4, values: [0, 0, 0], positions: [0, 0, 0] },
+ { tag: "NoSnapLive", snapMode: Slider.NoSnap, from: 0, to: 1, value: 0, stepSize: 1, live: true, sliderPos: 0.6, values: [0, 1, 1], positions: [0, 0.6, 0.6] },
+ { tag: "NoSnapLive", snapMode: Slider.NoSnap, from: 0, to: 1, value: 0, stepSize: 1, live: true, sliderPos: 0.4, values: [0, 0, 0], positions: [0, 0.4, 0.4] },
+ { tag: "SnapOnReleaseLive", snapMode: Slider.SnapOnRelease, from: 0, to: 1, value: 0, stepSize: 1, live: true, sliderPos: 0.6, values: [0, 1, 1], positions: [0, 0.6, 1] },
+ { tag: "SnapOnReleaseLive", snapMode: Slider.SnapOnRelease, from: 0, to: 1, value: 0, stepSize: 1, live: true, sliderPos: 0.4, values: [0, 0, 0], positions: [0, 0.4, 0] },
+ ]
+ }
+
+ function testSnapMode(data, useMouse) {
+ let live = data.live !== undefined ? data.live : false
+ let stepSize = data.stepSize !== undefined ? data.stepSize : 0.2
+ let sliderPos = data.sliderPos !== undefined ? data.sliderPos : 0.1
+ let fuzz = 0.05
+
+ var control = createTemporaryObject(slider, testCase, {live: live, snapMode: data.snapMode, from: data.from, to: data.to, stepSize: stepSize})
+ verify(control)
+
+ // The test assumes there is no drag threshold for neither mouse or touch.
+ // But by default, touch has a threshold and mouse doesn't.
+ // In order to not get a test fail if we're trying to move the slider handle
+ // on a very narrow slider, we ensure the same width of all sliders
+ control.width = testCase.width
+
+ var touch = useMouse ? null : touchEvent(control)
+
+ if (useMouse)
+ mousePress(control, calcMousePos(control, 0.0))
+ else
+ touch.press(0, control, calcMousePos(control, 0.0)).commit()
+
+ fuzzyCompare(control.value, data.values[0], fuzz)
+ fuzzyCompare(control.position, data.positions[0], fuzz)
+
+ if (useMouse)
+ mouseMove(control, calcMousePos(control, sliderPos))
+ else
+ touch.move(0, control, calcMousePos(control, sliderPos)).commit()
+
+ fuzzyCompare(control.value, data.values[1], fuzz)
+ fuzzyCompare(control.position, data.positions[1], fuzz)
+
+ if (useMouse)
+ mouseRelease(control, calcMousePos(control, sliderPos))
+ else
+ touch.release(0, control, calcMousePos(control, sliderPos)).commit()
+
+ fuzzyCompare(control.value, data.values[2], fuzz)
+ fuzzyCompare(control.position, data.positions[2], fuzz)
+ }
+
+ function test_snapMode_touch_data() {
+ return snapModeData(false)
+ }
+
+ function test_snapMode_touch(data) {
+ return testSnapMode(data, false)
+ }
+
+ function test_snapMode_mouse_data() {
+ return snapModeData(true)
+ }
+
+ function test_snapMode_mouse(data) {
+ return testSnapMode(data, true)
+ }
+
+ function test_wheel_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, dx: 120, dy: 0 },
+ { tag: "vertical", orientation: Qt.Vertical, dx: 0, dy: 120 }
+ ]
+ }
+
+ function test_wheel(data) {
+ var control = createTemporaryObject(slider, testCase, {wheelEnabled: true, orientation: data.orientation})
+ verify(control)
+
+ var movedCount = 0
+ var movedSpy = signalSpy.createObject(control, {target: control, signalName: "moved"})
+ verify(movedSpy.valid)
+
+ compare(control.value, 0.0)
+
+ mouseWheel(control, control.width / 2, control.height / 2, data.dx, data.dy)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.value, 0.1)
+ compare(control.position, 0.1)
+
+ control.stepSize = 0.2
+
+ mouseWheel(control, control.width / 2, control.height / 2, data.dx, data.dy)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.value, 0.3)
+ compare(control.position, 0.3)
+
+ control.stepSize = 10.0
+
+ mouseWheel(control, control.width / 2, control.height / 2, -data.dx, -data.dy)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+
+ // no change
+ mouseWheel(control, control.width / 2, control.height / 2, -data.dx, -data.dy)
+ compare(movedSpy.count, movedCount)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+
+ control.to = 10.0
+ control.stepSize = 5.0
+
+ mouseWheel(control, control.width / 2, control.height / 2, data.dx, data.dy)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.value, 5.0)
+ compare(control.position, 0.5)
+
+ mouseWheel(control, control.width / 2, control.height / 2, 0.5 * data.dx, 0.5 * data.dy)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.value, 7.5)
+ compare(control.position, 0.75)
+
+ mouseWheel(control, control.width / 2, control.height / 2, -data.dx, -data.dy)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.value, 2.5)
+ compare(control.position, 0.25)
+ }
+
+ function test_wheelPropagation_data() {
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, dx: 120, dy: 0 },
+ { tag: "vertical", orientation: Qt.Vertical, dx: 0, dy: 120 }
+ ]
+ }
+
+ Component {
+ id: mouseAreaComponent
+ MouseArea {}
+ }
+
+ function test_wheelPropagation(data) {
+ var mouseArea = createTemporaryObject(mouseAreaComponent, testCase, { width: parent.width, height: parent.height })
+ verify(mouseArea)
+
+ var mouseAreaWheelSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "wheel" })
+ verify(mouseAreaWheelSpy.valid)
+
+ var control = createTemporaryObject(slider, mouseArea,
+ { wheelEnabled: true, orientation: data.orientation, stepSize: 1 })
+ verify(control)
+ compare(control.value, 0.0)
+
+ var movedCount = 0
+ var movedSpy = signalSpy.createObject(control, { target: control, signalName: "moved" })
+ verify(movedSpy.valid)
+
+ // Scroll the handle to the edge.
+ mouseWheel(control, control.width / 2, control.height / 2, data.dx, data.dy)
+ compare(control.value, 1.0)
+ compare(control.position, 1.0)
+ compare(movedSpy.count, ++movedCount)
+ compare(mouseAreaWheelSpy.count, 0)
+
+ // Scroll again; the wheel event shouldn't go through to the MouseArea parent.
+ mouseWheel(control, control.width / 2, control.height / 2, data.dx, data.dy)
+ compare(control.value, 1.0)
+ compare(control.position, 1.0)
+ compare(movedSpy.count, movedCount)
+ compare(mouseAreaWheelSpy.count, 0)
+
+ // Scroll the handle to the other edge.
+ mouseWheel(control, control.width / 2, control.height / 2, -data.dx, -data.dy)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+ compare(movedSpy.count, ++movedCount)
+ compare(mouseAreaWheelSpy.count, 0)
+
+ // Scroll again; the wheel event shouldn't go through to the MouseArea parent.
+ mouseWheel(control, control.width / 2, control.height / 2, -data.dx, -data.dy)
+ compare(control.value, 0.0)
+ compare(control.position, 0.0)
+ compare(movedSpy.count, movedCount)
+ compare(mouseAreaWheelSpy.count, 0)
+ }
+
+ function test_valueAt_data() {
+ return [
+ { tag: "0.0..1.0", properties: { from: 0.0, to: 1.0 }, values: [0.0, 0.2, 0.5, 1.0] },
+ { tag: "0..100", properties: { from: 0, to: 100 }, values: [0, 20, 50, 100] },
+ { tag: "100..-100", properties: { from: 100, to: -100 }, values: [100, 60, 0, -100] },
+ { tag: "-7..7", properties: { from: -7, to: 7, stepSize: 1.0 }, values: [-7.0, -4.0, 0.0, 7.0] },
+ { tag: "-3..7", properties: { from: -3, to: 7, stepSize: 5.0 }, values: [-3.0, -3.0, 2.0, 7.0] },
+ ]
+ }
+
+ function test_valueAt(data) {
+ let control = createTemporaryObject(slider, testCase, data.properties)
+ verify(control)
+
+ compare(control.valueAt(0.0), data.values[0])
+ compare(control.valueAt(0.2), data.values[1])
+ compare(control.valueAt(0.5), data.values[2])
+ compare(control.valueAt(1.0), data.values[3])
+ }
+
+ function test_nullHandle() {
+ var control = createTemporaryObject(slider, testCase)
+ verify(control)
+
+ control.handle = null
+
+ mousePress(control)
+ verify(control.pressed, true)
+
+ mouseRelease(control)
+ compare(control.pressed, false)
+ }
+
+ function test_touchDragThreshold_data() {
+ var d1 = 3; var d2 = 7;
+ return [
+ { tag: "horizontal", orientation: Qt.Horizontal, dx1: d1, dy1: 0, dx2: d2, dy2: 0 },
+ { tag: "vertical", orientation: Qt.Vertical, dx1: 0, dy1: -d1, dx2: 0, dy2: -d2 },
+ { tag: "horizontal2", orientation: Qt.Horizontal, dx1: -d1, dy1: 0, dx2: -d2, dy2: 0 },
+ { tag: "vertical2", orientation: Qt.Vertical, dx1: 0, dy1: d1, dx2: 0, dy2: d2 }
+ ]
+ }
+
+ function test_touchDragThreshold(data) {
+ var control = createTemporaryObject(slider, testCase, {touchDragThreshold: 10, live: true, orientation: data.orientation, value: 0.5})
+ verify(control)
+ compare(control.touchDragThreshold, 10)
+
+ var valueChangedCount = 0
+ var valueChangedSpy = signalSpy.createObject(control, {target: control, signalName: "touchDragThresholdChanged"})
+ verify(valueChangedSpy.valid)
+
+ control.touchDragThreshold = undefined
+ compare(control.touchDragThreshold, -1) // reset to -1
+ compare(valueChangedSpy.count, ++valueChangedCount)
+
+ var t = 5
+ control.touchDragThreshold = t
+ compare(control.touchDragThreshold, t)
+ compare(valueChangedSpy.count, ++valueChangedCount)
+
+ control.touchDragThreshold = t
+ compare(control.touchDragThreshold, t)
+ compare(valueChangedSpy.count, valueChangedCount)
+
+ var pressedCount = 0
+ var movedCount = 0
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ var movedSpy = signalSpy.createObject(control, {target: control, signalName: "moved"})
+ verify(movedSpy.valid)
+
+ var touch = touchEvent(control)
+ var x0 = control.handle.x + control.handle.width * 0.5
+ var y0 = control.handle.y + control.handle.height * 0.5
+ touch.press(0, control, x0, y0).commit()
+ compare(pressedSpy.count, ++pressedCount)
+ compare(movedSpy.count, movedCount)
+ compare(control.pressed, true)
+
+ touch.move(0, control, x0 + data.dx1, y0 + data.dy1).commit()
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, movedCount) // shouldn't move
+ compare(control.pressed, true)
+
+ touch.move(0, control, x0 + data.dx2, y0 + data.dy2).commit()
+ compare(pressedSpy.count, pressedCount)
+ compare(movedSpy.count, ++movedCount)
+ compare(control.pressed, true)
+
+ touch.release(0, control, x0 + data.dx2, y0 + data.dy2).commit()
+ }
+
+ function test_nullTexture() {
+ var control = createTemporaryObject(slider, testCase, {width: -100})
+ verify(control)
+ control.visible = true
+ waitForRendering(control)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_spinbox.qml b/tests/auto/quickcontrols2/controls/data/tst_spinbox.qml
new file mode 100644
index 0000000000..a3d6b265e7
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_spinbox.qml
@@ -0,0 +1,740 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+import QtQuick.Window
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "SpinBox"
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component {
+ id: spinBox
+ SpinBox { }
+ }
+
+ Component {
+ id: mouseArea
+ MouseArea { }
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(spinBox, testCase)
+ verify(control)
+
+ compare(control.from, 0)
+ compare(control.to, 99)
+ compare(control.value, 0)
+ compare(control.stepSize, 1)
+ compare(control.editable, false)
+ compare(control.up.pressed, false)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.pressed, false)
+ compare(control.down.indicator.enabled, false)
+ }
+
+ function test_value() {
+ var control = createTemporaryObject(spinBox, testCase)
+ verify(control)
+
+ compare(control.value, 0)
+ control.value = 50
+ compare(control.value, 50)
+ control.value = 99
+ compare(control.value, 99)
+ control.value = -99
+ compare(control.value, 0)
+ control.value = 100
+ compare(control.value, 99)
+ }
+
+ function test_range() {
+ var control = createTemporaryObject(spinBox, testCase, {from: 0, to: 100, value: 50})
+ verify(control)
+
+ compare(control.from, 0)
+ compare(control.to, 100)
+ compare(control.value, 50)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, true)
+
+ control.value = 1000
+ compare(control.value, 100)
+ compare(control.up.indicator.enabled, false)
+ compare(control.down.indicator.enabled, true)
+
+ control.wrap = true
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, true)
+
+ control.value = -1
+ compare(control.value, 0)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, true)
+
+ control.from = 25
+ compare(control.from, 25)
+ compare(control.value, 25)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, true)
+
+ control.wrap = false
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, false)
+
+ control.value = 30
+ compare(control.from, 25)
+ compare(control.value, 30)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, true)
+
+ control.from = 30
+ compare(control.from, 30)
+ compare(control.value, 30)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, false)
+
+ control.to = 75
+ compare(control.to, 75)
+ compare(control.value, 30)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, false)
+
+ control.value = 50
+ compare(control.value, 50)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, true)
+
+ control.to = 50
+ compare(control.to, 50)
+ compare(control.value, 50)
+ compare(control.up.indicator.enabled, false)
+ compare(control.down.indicator.enabled, true)
+
+ control.to = 40
+ compare(control.to, 40)
+ compare(control.value, 40)
+ compare(control.up.indicator.enabled, false)
+ compare(control.down.indicator.enabled, true)
+ }
+
+ function test_inverted() {
+ var control = createTemporaryObject(spinBox, testCase, {from: 100, to: -100})
+ verify(control)
+
+ compare(control.from, 100)
+ compare(control.to, -100)
+ compare(control.value, 0)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, true)
+
+ control.value = 200
+ compare(control.value, 100)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, false)
+
+ control.value = -200
+ compare(control.value, -100)
+ compare(control.up.indicator.enabled, false)
+ compare(control.down.indicator.enabled, true)
+
+ control.value = 0
+ compare(control.value, 0)
+ compare(control.up.indicator.enabled, true)
+ compare(control.down.indicator.enabled, true)
+ }
+
+ function test_mouse_data() {
+ return [
+ { tag: "up", button: "up", value: 50, enabled: true, hold: false, modified: 1, expected: 51 },
+ { tag: "down", button: "down", value: 50, enabled: true, hold: false, modified: 1, expected: 49 },
+ { tag: "up:disabled", button: "up", value: 99, enabled: false, hold: false, modified: 0, expected: 99 },
+ { tag: "down:disabled", button: "down", value: 0, enabled: false, hold: false, modified: 0, expected: 0 },
+ { tag: "up:hold", button: "up", value: 95, enabled: true, hold: true, modified: 4, expected: 99 },
+ { tag: "down:hold", button: "down", value: 5, enabled: true, hold: true, modified: 5, expected: 0 }
+ ]
+ }
+
+ function test_mouse(data) {
+ var control = createTemporaryObject(spinBox, testCase, {value: data.value})
+ verify(control)
+
+ var button = control[data.button]
+ verify(button)
+
+ var pressedSpy = signalSpy.createObject(control, {target: button, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ var valueModifiedSpy = signalSpy.createObject(control, {target: control, signalName: "valueModified"})
+ verify(valueModifiedSpy.valid)
+
+ mousePress(button.indicator)
+ compare(pressedSpy.count, data.enabled ? 1 : 0)
+ compare(button.pressed, data.enabled)
+ compare(control.value, data.value)
+ compare(valueModifiedSpy.count, 0)
+
+ if (data.hold)
+ tryCompare(control, "value", data.expected)
+
+ mouseRelease(button.indicator)
+ compare(pressedSpy.count, data.enabled ? 2 : 0)
+ compare(button.pressed, false)
+ compare(control.value, data.expected)
+ compare(valueModifiedSpy.count, data.modified)
+ }
+
+ function test_keys_data() {
+ return [
+ { tag: "1", properties: { from: 1, to: 10, value: 1, stepSize: 1 }, upSteps: [2,3,4], downSteps: [3,2,1,1] },
+ { tag: "2", properties: { from: 1, to: 10, value: 10, stepSize: 2 }, upSteps: [10,10], downSteps: [8,6,4] },
+ { tag: "25", properties: { from: 0, to: 100, value: 50, stepSize: 25 }, upSteps: [75,100,100], downSteps: [75,50,25,0,0] },
+ { tag: "wrap1", properties: { wrap: true, from: 1, to: 10, value: 1, stepSize: 1 }, upSteps: [2,3], downSteps: [2,1,10,9] },
+ { tag: "wrap2", properties: { wrap: true, from: 1, to: 10, value: 10, stepSize: 2 }, upSteps: [1,3,5], downSteps: [3,1,10,8,6] },
+ { tag: "wrap25", properties: { wrap: true, from: 0, to: 100, value: 50, stepSize: 25 }, upSteps: [75,100,0,25], downSteps: [0,100,75] }
+ ]
+ }
+
+ function test_keys(data) {
+ var control = createTemporaryObject(spinBox, testCase, data.properties)
+ verify(control)
+
+ var upPressedCount = 0
+ var downPressedCount = 0
+ var valueModifiedCount = 0
+
+ var upPressedSpy = signalSpy.createObject(control, {target: control.up, signalName: "pressedChanged"})
+ verify(upPressedSpy.valid)
+
+ var downPressedSpy = signalSpy.createObject(control, {target: control.down, signalName: "pressedChanged"})
+ verify(downPressedSpy.valid)
+
+ var valueModifiedSpy = signalSpy.createObject(control, {target: control, signalName: "valueModified"})
+ verify(valueModifiedSpy.valid)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ for (var u = 0; u < data.upSteps.length; ++u) {
+ var wasUpEnabled = control.wrap || control.value < control.to
+ keyPress(Qt.Key_Up)
+ compare(control.up.pressed, wasUpEnabled)
+ compare(control.down.pressed, false)
+ if (wasUpEnabled) {
+ ++upPressedCount
+ ++valueModifiedCount
+ }
+ compare(upPressedSpy.count, upPressedCount)
+ compare(valueModifiedSpy.count, valueModifiedCount)
+
+ compare(control.value, data.upSteps[u])
+
+ keyRelease(Qt.Key_Up)
+ compare(control.down.pressed, false)
+ compare(control.up.pressed, false)
+ if (wasUpEnabled)
+ ++upPressedCount
+ compare(upPressedSpy.count, upPressedCount)
+ compare(valueModifiedSpy.count, valueModifiedCount)
+ }
+
+ for (var d = 0; d < data.downSteps.length; ++d) {
+ var wasDownEnabled = control.wrap || control.value > control.from
+ keyPress(Qt.Key_Down)
+ compare(control.down.pressed, wasDownEnabled)
+ compare(control.up.pressed, false)
+ if (wasDownEnabled) {
+ ++downPressedCount
+ ++valueModifiedCount
+ }
+ compare(downPressedSpy.count, downPressedCount)
+ compare(valueModifiedSpy.count, valueModifiedCount)
+
+ compare(control.value, data.downSteps[d])
+
+ keyRelease(Qt.Key_Down)
+ compare(control.down.pressed, false)
+ compare(control.up.pressed, false)
+ if (wasDownEnabled)
+ ++downPressedCount
+ compare(downPressedSpy.count, downPressedCount)
+ compare(valueModifiedSpy.count, valueModifiedCount)
+ }
+ }
+
+ function test_locale() {
+ var control = createTemporaryObject(spinBox, testCase)
+ verify(control)
+
+ control.locale = Qt.locale("ar_EG") // Arabic, Egypt
+
+ var numbers = ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"]
+ for (var i = 0; i < 10; ++i) {
+ control.value = i
+ compare(control.contentItem.text, numbers[i])
+ }
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(spinBox, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ function test_focus() {
+ var control = createTemporaryObject(spinBox, testCase, {from: 10, to: 1000, value: 100, focus: true})
+ verify(control)
+
+ control.forceActiveFocus()
+ compare(control.activeFocus, true)
+
+ compare(control.from, 10)
+ compare(control.to, 1000)
+ compare(control.value, 100)
+
+ control.focus = false
+ compare(control.activeFocus, false)
+
+ compare(control.from, 10)
+ compare(control.to, 1000)
+ compare(control.value, 100)
+ }
+
+ function test_initialFocus() {
+ var window = testCase.Window.window
+ verify(window)
+ compare(window.activeFocusItem, window.contentItem)
+
+ var control = createTemporaryObject(spinBox, testCase, { editable: true, focus: true })
+ verify(control)
+ tryCompare(control.contentItem, "activeFocus", true)
+ }
+
+ function test_editable() {
+ var control = createTemporaryObject(spinBox, testCase)
+ verify(control)
+
+ var valueModifiedSpy = signalSpy.createObject(control, {target: control, signalName: "valueModified"})
+ verify(valueModifiedSpy.valid)
+
+ control.contentItem.forceActiveFocus()
+ compare(control.contentItem.activeFocus, true)
+
+ compare(control.editable, false)
+ control.contentItem.selectAll()
+ keyClick(Qt.Key_5)
+ keyClick(Qt.Key_Return)
+ compare(control.value, 0)
+ compare(valueModifiedSpy.count, 0)
+
+ control.editable = true
+ compare(control.editable, true)
+ control.contentItem.selectAll()
+ keyClick(Qt.Key_5)
+ keyClick(Qt.Key_Return)
+ compare(control.value, 5)
+ compare(valueModifiedSpy.count, 1)
+ }
+
+ function test_wheel_data() {
+ return [
+ { tag: "1", properties: { from: 1, to: 10, value: 1, stepSize: 1 }, upSteps: [2,3,4], downSteps: [3,2,1,1] },
+ { tag: "2", properties: { from: 1, to: 10, value: 10, stepSize: 2 }, upSteps: [10,10], downSteps: [8,6,4] },
+ { tag: "25", properties: { from: 0, to: 100, value: 50, stepSize: 25 }, upSteps: [75,100,100], downSteps: [75,50,25,0,0] },
+ { tag: "wrap1", properties: { wrap: true, from: 1, to: 10, value: 1, stepSize: 1 }, upSteps: [2,3], downSteps: [2,1,10,9] },
+ { tag: "wrap2", properties: { wrap: true, from: 1, to: 10, value: 10, stepSize: 2 }, upSteps: [1,3,5], downSteps: [3,1,10,8,6] },
+ { tag: "wrap25", properties: { wrap: true, from: 0, to: 100, value: 50, stepSize: 25 }, upSteps: [75,100,0,25], downSteps: [0,100,75] }
+ ]
+ }
+
+ function test_wheel(data) {
+ var ma = createTemporaryObject(mouseArea, testCase, {width: 100, height: 100})
+ verify(ma)
+
+ data.properties.wheelEnabled = true
+ var control = spinBox.createObject(ma, data.properties)
+ verify(control)
+
+ var valueModifiedCount = 0
+ var valueModifiedSpy = signalSpy.createObject(control, {target: control, signalName: "valueModified"})
+ verify(valueModifiedSpy.valid)
+
+ var delta = 120
+
+ var spy = signalSpy.createObject(ma, {target: ma, signalName: "wheel"})
+ verify(spy.valid)
+
+ for (var u = 0; u < data.upSteps.length; ++u) {
+ var wasUpEnabled = control.wrap || control.value < control.to
+ mouseWheel(control, control.width / 2, control.height / 2, delta, delta)
+ if (wasUpEnabled)
+ ++valueModifiedCount
+ compare(valueModifiedSpy.count, valueModifiedCount)
+ compare(spy.count, 0) // no propagation
+ compare(control.value, data.upSteps[u])
+ }
+
+ for (var d = 0; d < data.downSteps.length; ++d) {
+ var wasDownEnabled = control.wrap || control.value > control.from
+ mouseWheel(control, control.width / 2, control.height / 2, -delta, -delta)
+ if (wasDownEnabled)
+ ++valueModifiedCount
+ compare(valueModifiedSpy.count, valueModifiedCount)
+ compare(spy.count, 0) // no propagation
+ compare(control.value, data.downSteps[d])
+ }
+ }
+
+ function test_initiallyDisabledIndicators_data() {
+ return [
+ { tag: "down disabled", from: 0, value: 0, to: 99, upEnabled: true, downEnabled: false },
+ { tag: "up disabled", from: 0, value: 99, to: 99, upEnabled: false, downEnabled: true },
+ { tag: "inverted, down disabled", from: 99, value: 99, to: 0, upEnabled: true, downEnabled: false },
+ { tag: "inverted, up disabled", from: 99, value: 0, to: 0, upEnabled: false, downEnabled: true }
+ ]
+ }
+
+ function test_initiallyDisabledIndicators(data) {
+ var control = createTemporaryObject(spinBox, testCase, { from: data.from, value: data.value, to: data.to })
+ verify(control)
+
+ compare(control.up.indicator.enabled, data.upEnabled)
+ compare(control.down.indicator.enabled, data.downEnabled)
+ }
+
+ function test_hover_data() {
+ return [
+ { tag: "up:true", button: "up", hoverEnabled: true, value: 50 },
+ { tag: "up:false", button: "up", hoverEnabled: false, value: 50 },
+ { tag: "up:max", button: "up", hoverEnabled: true, value: 99 },
+ { tag: "down:true", button: "down", hoverEnabled: true, value: 50 },
+ { tag: "down:false", button: "down", hoverEnabled: false, value: 50 },
+ { tag: "down:min", button: "down", hoverEnabled: true, value: 0 }
+ ]
+ }
+
+ function test_hover(data) {
+ var control = createTemporaryObject(spinBox, testCase, {hoverEnabled: data.hoverEnabled, value: data.value})
+ verify(control)
+
+ var button = control[data.button]
+ compare(control.hovered, false)
+ compare(button.hovered, false)
+
+ mouseMove(control, button.indicator.x + button.indicator.width / 2, button.indicator.y + button.indicator.height / 2)
+ compare(control.hovered, data.hoverEnabled)
+ compare(button.hovered, data.hoverEnabled && button.indicator.enabled)
+
+ mouseMove(control, button.indicator.x - 1, button.indicator.y - 1)
+ compare(button.hovered, false)
+ }
+
+ function test_hoverWhilePressed_data() {
+ return [
+ { tag: "up" },
+ { tag: "down" },
+ ]
+ }
+
+ // QTBUG-74688
+ function test_hoverWhilePressed(data) {
+ var control = createTemporaryObject(spinBox, testCase, { hoverEnabled: true, value: 50 })
+ verify(control)
+
+ var button = control[data.tag]
+ compare(control.hovered, false)
+ compare(button.hovered, false)
+
+ // Hover over the indicator. It should be hovered.
+ var buttonXCenter = button.indicator.x + button.indicator.width / 2
+ var buttonYCenter = button.indicator.y + button.indicator.height / 2
+ mouseMove(control, buttonXCenter, buttonYCenter)
+ compare(button.hovered, true)
+
+ // Press on the indicator and then move the mouse outside of it.
+ mousePress(control, buttonXCenter, buttonYCenter)
+ compare(button.hovered, true)
+ mouseMove(control, buttonXCenter - button.indicator.width, buttonYCenter - button.indicator.height)
+ // It should not be pressed or hovered.
+ compare(button.pressed, false)
+ compare(button.hovered, false)
+
+ mouseRelease(control)
+ }
+
+ function test_valueFromText_data() {
+ return [
+ { tag: "editable", editable: true },
+ { tag: "non-editable", editable: false }
+ ]
+ }
+
+ function test_valueFromText(data) {
+ var control = createTemporaryObject(spinBox, testCase, {editable: data.editable})
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ var valueFromTextCalls = 0
+ control.valueFromText = function(text, locale) {
+ ++valueFromTextCalls
+ return Number.fromLocaleString(locale, text);
+ }
+
+ keyClick(Qt.Key_Enter)
+ compare(valueFromTextCalls, data.editable ? 1 : 0)
+
+ keyClick(Qt.Key_Return)
+ compare(valueFromTextCalls, data.editable ? 2 : 0)
+
+ control.focus = false
+ compare(valueFromTextCalls, data.editable ? 3 : 0)
+ }
+
+ function test_callDefaultValueFromText() {
+ var control = createTemporaryObject(spinBox, testCase)
+ verify(control)
+ compare(control.valueFromText("123", control.locale), 123)
+ }
+
+ function test_autoRepeat() {
+ var control = createTemporaryObject(spinBox, testCase)
+ verify(control)
+
+ compare(control.value, 0)
+
+ var valueSpy = signalSpy.createObject(control, {target: control, signalName: "valueChanged"})
+ verify(valueSpy.valid)
+
+ var countBefore = 0
+
+ // repeat up
+ mousePress(control.up.indicator)
+ verify(control.up.pressed)
+ compare(valueSpy.count, 0)
+ valueSpy.wait()
+ valueSpy.wait()
+ countBefore = valueSpy.count
+ mouseRelease(control.up.indicator)
+ verify(!control.up.pressed)
+ compare(valueSpy.count, countBefore)
+
+ valueSpy.clear()
+
+ // repeat down
+ mousePress(control.down.indicator)
+ verify(control.down.pressed)
+ compare(valueSpy.count, 0)
+ valueSpy.wait()
+ valueSpy.wait()
+ countBefore = valueSpy.count
+ mouseRelease(control.down.indicator)
+ verify(!control.down.pressed)
+ compare(valueSpy.count, countBefore)
+
+ mousePress(control.up.indicator)
+ verify(control.up.pressed)
+ valueSpy.wait()
+
+ // move inside during repeat -> continue repeat (QTBUG-57085)
+ mouseMove(control.up.indicator, control.up.indicator.width / 4, control.up.indicator.height / 4)
+ verify(control.up.pressed)
+ valueSpy.wait()
+
+ valueSpy.clear()
+
+ // move outside during repeat -> stop repeat
+ mouseMove(control.up.indicator, -1, -1)
+ verify(!control.up.pressed)
+ // NOTE: The following wait() is NOT a reliable way to test that the
+ // auto-repeat timer is not running, but there's no way dig into the
+ // private APIs from QML. If this test ever fails in the future, it
+ // indicates that the auto-repeat timer logic is broken.
+ wait(125)
+ compare(valueSpy.count, 0)
+
+ mouseRelease(control.up.indicator, -1, -1)
+ verify(!control.up.pressed)
+ }
+
+ function test_initialValue() {
+ var control = createTemporaryObject(spinBox, testCase, {from: 1000, to: 10000})
+ verify(control)
+ compare(control.value, 1000)
+ }
+
+ Component {
+ id: sizeBox
+ SpinBox {
+ from: 0
+ to: items.length - 1
+
+ property var items: ["Small", "Medium", "Large"]
+
+ validator: RegularExpressionValidator {
+ regularExpression: new RegExp("(Small|Medium|Large)", "i")
+ }
+
+ textFromValue: function(value) {
+ return items[value];
+ }
+
+ valueFromText: function(text) {
+ for (var i = 0; i < items.length; ++i) {
+ if (items[i].toLowerCase().indexOf(text.toLowerCase()) === 0)
+ return i
+ }
+ return sb.value
+ }
+ }
+ }
+
+ function test_textFromValue_data() {
+ return [
+ { tag: "default", component: spinBox, values: [0, 10, 99], displayTexts: ["0", "10", "99"] },
+ { tag: "custom", component: sizeBox, values: [0, 1, 2], displayTexts: ["Small", "Medium", "Large"] }
+ ]
+ }
+
+ function test_textFromValue(data) {
+ var control = createTemporaryObject(data.component, testCase)
+ verify(control)
+
+ for (var i = 0; i < data.values.length; ++i) {
+ control.value = data.values[i]
+ compare(control.value, data.values[i])
+ compare(control.displayText, data.displayTexts[i])
+ }
+ }
+
+ function test_callDefaultTextFromValue() {
+ var control = createTemporaryObject(spinBox, testCase)
+ verify(control)
+ compare(control.textFromValue(123, control.locale), "123")
+ }
+
+ Component {
+ id: overriddenSpinBox
+ SpinBox {
+ value: 50
+ up.indicator: Rectangle {
+ property string s: "this is the one"
+ }
+ }
+ }
+
+ function test_indicatorOverridden() {
+ var control = createTemporaryObject(overriddenSpinBox, testCase)
+ verify(control)
+ compare(control.up.indicator.s, "this is the one");
+ }
+
+ Component {
+ id: overriddenSpinBoxWithIds
+ SpinBox {
+ value: 50
+ up.indicator: Rectangle {
+ id: uhOh1
+ property string s: "up"
+ }
+ down.indicator: Rectangle {
+ id: uhOh2
+ property string s: "down"
+ }
+ }
+ }
+
+ function test_indicatorOverriddenWithIds() {
+ var control = createTemporaryObject(overriddenSpinBoxWithIds, testCase)
+ verify(control)
+ // TODO: Use failOnWarning() here when it has been implemented
+ // Specifying an id will result in both the default indicator implementations
+ // and the custom ones being created, but it shouldn't result in any TypeErrors.
+ compare(control.up.indicator.s, "up");
+ compare(control.down.indicator.s, "down");
+ }
+
+ function test_valueEnterFromOutsideRange() {
+ // Check that changing from 2 to 99 goes to 98 then changing to 99 puts it back to 98
+ var control = createTemporaryObject(spinBox, testCase, {from: 2, to: 98, value: 2, editable: true})
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ keyClick(Qt.Key_Backspace)
+ keyClick(Qt.Key_Backspace)
+ keyClick(Qt.Key_9)
+ keyClick(Qt.Key_9)
+ keyClick(Qt.Key_Return)
+ compare(control.value, 98)
+ compare(control.displayText, "98")
+ compare(control.contentItem.text, "98")
+
+ keyClick(Qt.Key_Backspace)
+ keyClick(Qt.Key_9)
+ keyClick(Qt.Key_Return)
+ compare(control.value, 98)
+ compare(control.displayText, "98")
+ compare(control.contentItem.text, "98")
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_splitview.qml b/tests/auto/quickcontrols2/controls/data/tst_splitview.qml
new file mode 100644
index 0000000000..76174a3c8e
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_splitview.qml
@@ -0,0 +1,2600 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Window
+import QtTest
+import Qt.labs.settings
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "SplitView"
+
+ function initTestCase() {
+ // For the serialization tests.
+ Qt.application.name = "qtquickcontrols2-splitview-auto-test"
+ Qt.application.domain = "org.qt-project"
+ Qt.application.organization = "QtProject"
+ }
+
+ function findHandles(splitView) {
+ var handles = []
+ for (var i = 0; i < splitView.children.length; ++i) {
+ var child = splitView.children[i]
+ if (child.objectName.toLowerCase().indexOf("handle") !== -1)
+ handles.push(child)
+ }
+ return handles
+ }
+
+ function compareSizes(control, expectedGeometries, context) {
+ if (context === undefined)
+ context = ""
+ else
+ context = " (" + context + ")"
+
+ compare(control.count, Math.floor(expectedGeometries.length / 2) + 1,
+ "Mismatch in actual vs expected number of split items" + context)
+
+ var handles = findHandles(control)
+ compare(handles.length, Math.floor(expectedGeometries.length / 2),
+ "Mismatch in actual vs expected number of handle items" + context)
+
+ for (var i = 0, splitItemIndex = 0, handleItemIndex = 0; i < expectedGeometries.length; ++i) {
+ var item = null
+ var itemType = ""
+ var typeSpecificIndex = -1
+ if (i % 2 == 0) {
+ item = control.itemAt(splitItemIndex)
+ itemType = "split item"
+ typeSpecificIndex = splitItemIndex
+ ++splitItemIndex
+ } else {
+ item = handles[handleItemIndex]
+ itemType = "handle item"
+ typeSpecificIndex = handleItemIndex
+ ++handleItemIndex
+ }
+
+ verify(item, itemType + " at index " + typeSpecificIndex + " should not be null" + context)
+
+ var expectedGeometry = expectedGeometries[i]
+ if (expectedGeometry.hasOwnProperty("hidden")) {
+ // It's geometry doesn't matter because it's hidden.
+ verify(!item.visible, itemType + " at index " + typeSpecificIndex + " should be hidden" + context)
+ continue
+ }
+
+ // Note that the indices mentioned here account for handles; they do not
+ // match the indices reported by QQuickSplitView's logging categories.
+ compare(item.x, expectedGeometry.x, "Mismatch in actual vs expected x value of "
+ + itemType + " at index " + typeSpecificIndex + context)
+ compare(item.y, expectedGeometry.y, "Mismatch in actual vs expected y value of "
+ + itemType + " at index " + typeSpecificIndex + context)
+ compare(item.width, expectedGeometry.width, "Mismatch in actual vs expected width value of "
+ + itemType + " at index " + typeSpecificIndex + context)
+ compare(item.height, expectedGeometry.height, "Mismatch in actual vs expected height value of "
+ + itemType + " at index " + typeSpecificIndex + context)
+ }
+ }
+
+ property real defaultHorizontalHandleWidth: 10
+ property real defaultVerticalHandleHeight: 10
+
+
+ Component {
+ id: signalSpyComponent
+ SignalSpy {}
+ }
+
+ Component {
+ id: handleComponent
+ Rectangle {
+ objectName: "handle"
+ implicitWidth: defaultHorizontalHandleWidth
+ implicitHeight: defaultVerticalHandleHeight
+ color: "#444"
+
+ Text {
+ objectName: "handleText_" + text
+ text: parent.x + "," + parent.y + " " + parent.width + "x" + parent.height
+ color: "white"
+ anchors.centerIn: parent
+ rotation: 90
+ }
+ }
+ }
+
+ Component {
+ id: splitViewComponent
+
+ SplitView {
+ anchors.fill: parent
+ handle: handleComponent
+ }
+ }
+
+ Component {
+ id: rectangleComponent
+
+ Rectangle {}
+ }
+
+ function test_addItemsAfterCompletion() {
+ var control = createTemporaryObject(splitViewComponent, testCase)
+ verify(control)
+
+ var item0 = rectangleComponent.createObject(control, { implicitWidth: 25, color: "salmon" })
+ verify(item0)
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ // The last item fills the width by default, and since there is only one item...
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, testCase.width)
+ compare(item0.height, testCase.height)
+
+ var item1 = rectangleComponent.createObject(control, { implicitWidth: 25, color: "steelblue" })
+ verify(item1)
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ // Now that a second item has been added, the first item goes back to its preferred (implicit) width.
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, item0.implicitWidth)
+ compare(item0.height, testCase.height)
+ var handles = findHandles(control)
+ var handle0 = handles[0]
+ compare(handle0.x, item0.implicitWidth)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+ compare(item1.x, item0.implicitWidth + defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, testCase.width - item0.implicitWidth - defaultHorizontalHandleWidth)
+ compare(item1.height, testCase.height)
+ }
+
+ function test_addItemsWithNoSizeAfterCompletion() {
+ var control = createTemporaryObject(splitViewComponent, testCase)
+ verify(control)
+
+ var item0 = rectangleComponent.createObject(control, { color: "salmon" })
+ verify(item0)
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, testCase.width)
+ compare(item0.height, testCase.height)
+
+ var item1 = rectangleComponent.createObject(control, { color: "steelblue" })
+ verify(item1)
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, 0)
+ compare(item0.height, testCase.height)
+ var handles = findHandles(control)
+ var handle0 = handles[0]
+ compare(handle0.x, 0)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+ compare(item1.x, defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, testCase.width - defaultHorizontalHandleWidth)
+ compare(item1.height, testCase.height)
+ }
+
+ Component {
+ id: threeZeroSizedItemsComponent
+
+ SplitView {
+ anchors.fill: parent
+ handle: handleComponent
+
+ Rectangle {
+ objectName: "salmon"
+ color: objectName
+ }
+ Rectangle {
+ objectName: "navajowhite"
+ color: objectName
+ }
+ Rectangle {
+ objectName: "steelblue"
+ color: objectName
+ }
+ }
+ }
+
+ function test_changeAttachedPropertiesAfterCompletion() {
+ var control = createTemporaryObject(threeZeroSizedItemsComponent, testCase)
+ verify(control)
+
+ var item0 = control.itemAt(0)
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, 0)
+ compare(item0.height, testCase.height)
+
+ var handles = findHandles(control)
+ var handle0 = handles[0]
+ compare(handle0.x, 0)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+
+ var item1 = control.itemAt(1)
+ compare(item1.x, defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, 0)
+ compare(item1.height, testCase.height)
+
+ var handle1 = handles[1]
+ compare(handle1.x, defaultHorizontalHandleWidth)
+ compare(handle1.y, 0)
+ compare(handle1.width, defaultHorizontalHandleWidth)
+ compare(handle1.height, testCase.height)
+
+ var item2 = control.itemAt(2)
+ compare(item2.x, defaultHorizontalHandleWidth * 2)
+ compare(item2.y, 0)
+ compare(item2.width, testCase.width - item2.x)
+ compare(item2.height, testCase.height)
+
+ item0.SplitView.preferredWidth = 25
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, 25)
+ compare(item0.height, testCase.height)
+ compare(handle0.x, item0.width)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+ compare(item1.x, 25 + defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, 0)
+ compare(item1.height, testCase.height)
+ compare(handle1.x, item1.x + item1.width)
+ compare(handle1.y, 0)
+ compare(handle1.width, defaultHorizontalHandleWidth)
+ compare(handle1.height, testCase.height)
+ compare(item2.x, item1.x + item1.width + defaultHorizontalHandleWidth)
+ compare(item2.y, 0)
+ compare(item2.width, testCase.width - item2.x)
+ compare(item2.height, testCase.height)
+
+ item0.SplitView.minimumWidth = 50
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, 50)
+ compare(item0.height, testCase.height)
+ compare(handle0.x, item0.width)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+ compare(item1.x, 50 + defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, 0)
+ compare(item1.height, testCase.height)
+ compare(handle1.x, item1.x + item1.width)
+ compare(handle1.y, 0)
+ compare(handle1.width, defaultHorizontalHandleWidth)
+ compare(handle1.height, testCase.height)
+ compare(item2.x, item1.x + item1.width + defaultHorizontalHandleWidth)
+ compare(item2.y, 0)
+ compare(item2.width, testCase.width - item2.x)
+ compare(item2.height, testCase.height)
+
+ item0.SplitView.preferredWidth = 100
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, 100)
+ compare(item0.height, testCase.height)
+ compare(handle0.x, item0.width)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+ compare(item1.x, 100 + defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, 0)
+ compare(item1.height, testCase.height)
+ compare(handle1.x, item1.x + item1.width)
+ compare(handle1.y, 0)
+ compare(handle1.width, defaultHorizontalHandleWidth)
+ compare(handle1.height, testCase.height)
+ compare(item2.x, item1.x + item1.width + defaultHorizontalHandleWidth)
+ compare(item2.y, 0)
+ compare(item2.width, testCase.width - item2.x)
+ compare(item2.height, testCase.height)
+
+ item0.SplitView.maximumWidth = 75
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, 75)
+ compare(item0.height, testCase.height)
+ compare(handle0.x, item0.width)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+ compare(item1.x, 75 + defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, 0)
+ compare(item1.height, testCase.height)
+ compare(handle1.x, item1.x + item1.width)
+ compare(handle1.y, 0)
+ compare(handle1.width, defaultHorizontalHandleWidth)
+ compare(handle1.height, testCase.height)
+ compare(item2.x, item1.x + item1.width + defaultHorizontalHandleWidth)
+ compare(item2.y, 0)
+ compare(item2.width, testCase.width - item2.x)
+ compare(item2.height, testCase.height)
+
+ item1.SplitView.fillWidth = true
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, 75)
+ compare(item0.height, testCase.height)
+ compare(handle0.x, item0.width)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+ compare(item1.x, 75 + defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, testCase.width - 75 - defaultHorizontalHandleWidth * 2)
+ compare(item1.height, testCase.height)
+ compare(handle1.x, item1.x + item1.width)
+ compare(handle1.y, 0)
+ compare(handle1.width, defaultHorizontalHandleWidth)
+ compare(handle1.height, testCase.height)
+ compare(item2.x, testCase.width)
+ compare(item2.y, 0)
+ compare(item2.width, 0)
+ compare(item2.height, testCase.height)
+ }
+
+ Component {
+ id: itemComponent
+ Item {}
+ }
+
+ Component {
+ id: objectComponent
+ QtObject {}
+ }
+
+ function test_useAttachedPropertiesIncorrectly_data() {
+ var properties = [ "fillWidth", "fillHeight", "minimumWidth", "minimumHeight",
+ "preferredWidth", "preferredHeight", "maximumWidth", "maximumHeight" ]
+
+ var data = []
+
+ for (var i = 0; i < properties.length; ++i) {
+ var property = properties[i]
+ data.push({ tag: "Item," + property, component: itemComponent, property: property,
+ expectedWarning: /.*SplitView: attached properties must be accessed through a direct child of SplitView/ })
+ }
+
+ for (i = 0; i < properties.length; ++i) {
+ property = properties[i]
+ data.push({ tag: "QtObject," + property, component: objectComponent, property: property,
+ expectedWarning: /.*SplitView: attached properties can only be used on Items/ })
+ }
+
+ return data
+ }
+
+ function test_useAttachedPropertiesIncorrectly(data) {
+ // The object (whatever it may be) is not managed by a SplitView.
+ var object = createTemporaryObject(data.component, testCase, { objectName: data.tag })
+ verify(object)
+
+ ignoreWarning(data.expectedWarning)
+ // Should warn, but not crash.
+ object.SplitView[data.property] = 1;
+ }
+
+ function test_sizes_data() {
+ var splitViewWidth = testCase.width
+ var splitViewHeight = testCase.height
+ var data = [
+ {
+ // When the combined size of items is too large, the non-fill items should just exceed
+ // the size of the SplitView, exactly as they would were they in a RowLayout, for example.
+ tag: "fillItemOnLeft",
+ expectedGeometries: [
+ // We're the fill item, but since the combined implicitWidths
+ // of the other two items take up all the space, we get none.
+ { x: 0, y: 0, width: 0, height: splitViewHeight },
+ // First handle.
+ { x: 0, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The second item does not fill, so its width should be unchanged.
+ { x: defaultHorizontalHandleWidth, y: 0, width: 200, height: splitViewHeight },
+ // Second handle.
+ { x: 200 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: splitViewHeight },
+ // The third item also gets its implicitWidth.
+ { x: 200 + defaultHorizontalHandleWidth * 2, y: 0, width: 200, height: splitViewHeight }
+ ]
+ },
+ {
+ // Same as above except vertical.
+ tag: "fillItemOnTop",
+ expectedGeometries: [
+ // We're the fill item, but since the combined implicitHeights
+ // of the other two items take up all the space, we get none.
+ { x: 0, y: 0, width: splitViewWidth, height: 0 },
+ // First handle.
+ { x: 0, y: 0, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ // The second item does not fill, so its height should be unchanged.
+ { x: 0, y: defaultVerticalHandleHeight, width: splitViewWidth, height: 200 },
+ // Second handle.
+ { x: 0, y: 200 + defaultVerticalHandleHeight, width: splitViewWidth,
+ height: defaultVerticalHandleHeight },
+ // The third item also gets its implicitHeight.
+ { x: 0, y: 200 + defaultVerticalHandleHeight * 2, width: splitViewWidth, height: 200 }
+ ]
+ },
+ {
+ tag: "fillItemInMiddle",
+ expectedGeometries: [
+ // Our size is fixed.
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ // First handle.
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The second item fills.
+ { x: 25 + defaultHorizontalHandleWidth, y: 0,
+ width: splitViewWidth - 25 - 200 - defaultHorizontalHandleWidth * 2, height: splitViewHeight },
+ // Second handle.
+ { x: splitViewWidth - 200 - defaultHorizontalHandleWidth, y: 0,
+ width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The third item's size is also fixed.
+ { x: splitViewWidth - 200, y: 0, width: 200, height: splitViewHeight }
+ ]
+ }
+ ]
+ return data
+ }
+
+ function test_sizes(data) {
+ var component = Qt.createComponent("splitview/" + data.tag + ".qml")
+ compare(component.status, Component.Ready, component.errorString());
+ var control = createTemporaryObject(component, testCase, { "handle": handleComponent })
+ verify(control)
+
+ compareSizes(control, data.expectedGeometries)
+ }
+
+ Component {
+ id: threeSizedItemsComponent
+
+ SplitView {
+ anchors.fill: parent
+ handle: handleComponent
+
+ Rectangle {
+ objectName: "salmon"
+ color: objectName
+ implicitWidth: 25
+ implicitHeight: 25
+ }
+ Rectangle {
+ objectName: "navajowhite"
+ color: objectName
+ implicitWidth: 100
+ implicitHeight: 100
+ }
+ Rectangle {
+ objectName: "steelblue"
+ color: objectName
+ implicitWidth: 200
+ implicitHeight: 200
+ }
+ }
+ }
+
+ function test_resetAttachedProperties_data() {
+ var splitViewWidth = testCase.width
+ var splitViewHeight = testCase.height
+ var data = [
+ {
+ tag: "resetMinimumWidth",
+ orientation: Qt.Horizontal,
+ // Set the minimumWidth to 50. It should be used instead of implicitWidth since it's greater than 25.
+ splitItemIndex: 0,
+ propertyName: "minimumWidth",
+ propertyValue: 50,
+ expectedGeometriesBefore: [
+ { x: 0, y: 0, width: 50, height: splitViewHeight },
+ { x: 50, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 50 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 50 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: splitViewHeight },
+ { x: 50 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 50 - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ],
+ // minimumWidth is now undefined, so implicitWidth should be used instead.
+ expectedGeometriesAfter: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 25 - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "resetMinimumHeight",
+ orientation: Qt.Vertical,
+ // Set the minimumHeight to 50. It should be used instead of implicitHeight since it's greater than 25.
+ splitItemIndex: 0,
+ propertyName: "minimumHeight",
+ propertyValue: 50,
+ expectedGeometriesBefore: [
+ { x: 0, y: 0, width: splitViewWidth, height: 50 },
+ { x: 0, y: 50, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 50 + defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 50 + 100 + defaultVerticalHandleHeight, width: splitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 50 + 100 + defaultVerticalHandleHeight * 2, width: splitViewWidth,
+ height: splitViewHeight - 50 - 100 - defaultVerticalHandleHeight * 2 }
+ ],
+ // preferredHeight is now undefined, so implicitHeight should be used instead.
+ expectedGeometriesAfter: [
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ { x: 0, y: 25, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight, width: splitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight * 2, width: splitViewWidth,
+ height: splitViewHeight - 25 - 100 - defaultVerticalHandleHeight * 2 }
+ ]
+ },
+ {
+ tag: "resetPreferredWidth",
+ orientation: Qt.Horizontal,
+ // Set the preferredWidth to 50; it should be used instead of implicitWidth.
+ splitItemIndex: 0,
+ propertyName: "preferredWidth",
+ propertyValue: 50,
+ expectedGeometriesBefore: [
+ { x: 0, y: 0, width: 50, height: splitViewHeight },
+ { x: 50, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 50 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 50 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: splitViewHeight },
+ { x: 50 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 50 - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ],
+ // preferredWidth is now undefined, so implicitWidth should be used instead.
+ expectedGeometriesAfter: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 25 - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "resetPreferredHeight",
+ orientation: Qt.Vertical,
+ // Set the preferredHeight to 50; it should be used instead of implicitHeight.
+ splitItemIndex: 0,
+ propertyName: "preferredHeight",
+ propertyValue: 50,
+ expectedGeometriesBefore: [
+ { x: 0, y: 0, width: splitViewWidth, height: 50 },
+ { x: 0, y: 50, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 50 + defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 50 + 100 + defaultVerticalHandleHeight, width: splitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 50 + 100 + defaultVerticalHandleHeight * 2, width: splitViewWidth,
+ height: splitViewHeight - 50 - 100 - defaultVerticalHandleHeight * 2 }
+ ],
+ // preferredHeight is now undefined, so implicitHeight should be used instead.
+ expectedGeometriesAfter: [
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ { x: 0, y: 25, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight, width: splitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight * 2, width: splitViewWidth,
+ height: splitViewHeight - 25 - 100 - defaultVerticalHandleHeight * 2 }
+ ]
+ },
+ {
+ tag: "resetMaximumWidth",
+ orientation: Qt.Horizontal,
+ // Set the maximumWidth to 15. It should be used instead of implicitWidth since it's less than 25.
+ splitItemIndex: 0,
+ propertyName: "maximumWidth",
+ propertyValue: 15,
+ expectedGeometriesBefore: [
+ { x: 0, y: 0, width: 15, height: splitViewHeight },
+ { x: 15, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 15 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 15 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: splitViewHeight },
+ { x: 15 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 15 - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ],
+ // maximumWidth is now undefined, so implicitWidth should be used instead.
+ expectedGeometriesAfter: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 25 - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "resetMaximumHeight",
+ orientation: Qt.Vertical,
+ // Set the preferredHeight to 15. It should be used instead of implicitHeight if it's not undefined.
+ splitItemIndex: 0,
+ propertyName: "maximumHeight",
+ propertyValue: 15,
+ expectedGeometriesBefore: [
+ { x: 0, y: 0, width: splitViewWidth, height: 15 },
+ { x: 0, y: 15, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 15 + defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 15 + 100 + defaultVerticalHandleHeight, width: splitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 15 + 100 + defaultVerticalHandleHeight * 2, width: splitViewWidth,
+ height: splitViewHeight - 15 - 100 - defaultVerticalHandleHeight * 2 }
+ ],
+ // preferredHeight is now undefined, so implicitHeight should be used instead.
+ expectedGeometriesAfter: [
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ { x: 0, y: 25, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight, width: splitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight * 2, width: splitViewWidth,
+ height: splitViewHeight - 25 - 100 - defaultVerticalHandleHeight * 2 }
+ ]
+ },
+ ]
+ return data;
+ }
+
+ function test_resetAttachedProperties(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase,
+ { "orientation": data.orientation })
+ verify(control)
+
+ var splitItem = control.itemAt(data.splitItemIndex)
+ splitItem.SplitView[data.propertyName] = data.propertyValue
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometriesBefore, "after setting attached property")
+
+ splitItem.SplitView[data.propertyName] = undefined
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometriesAfter, "after resetting attached property")
+ }
+
+ function test_orientation() {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase)
+ verify(control)
+
+ var item0 = control.itemAt(0)
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, item0.implicitWidth)
+ compare(item0.height, testCase.height)
+
+ var handles = findHandles(control)
+ var handle0 = handles[0]
+ compare(handle0.x, item0.implicitWidth)
+ compare(handle0.y, 0)
+ compare(handle0.width, defaultHorizontalHandleWidth)
+ compare(handle0.height, testCase.height)
+
+ var item1 = control.itemAt(1)
+ compare(item1.x, item0.width + defaultHorizontalHandleWidth)
+ compare(item1.y, 0)
+ compare(item1.width, item1.implicitWidth)
+ compare(item1.height, testCase.height)
+
+ var handle1 = handles[1]
+ compare(handle1.x, item1.x + item1.width)
+ compare(handle1.y, 0)
+ compare(handle1.width, defaultHorizontalHandleWidth)
+ compare(handle1.height, testCase.height)
+
+ var item2 = control.itemAt(2)
+ compare(item2.x, item0.width + item1.width + defaultHorizontalHandleWidth * 2)
+ compare(item2.y, 0)
+ compare(item2.width, testCase.width - item2.x)
+ compare(item2.height, testCase.height)
+
+ control.orientation = Qt.Vertical
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(item0.x, 0)
+ compare(item0.y, 0)
+ compare(item0.width, testCase.width)
+ compare(item0.height, item0.implicitHeight)
+ handles = findHandles(control)
+ handle0 = handles[0]
+ compare(handle0.x, 0)
+ compare(handle0.y, item0.implicitHeight)
+ compare(handle0.width, testCase.width)
+ compare(handle0.height, defaultVerticalHandleHeight)
+ compare(item1.x, 0)
+ compare(item1.y, item0.height + defaultVerticalHandleHeight)
+ compare(item1.width, testCase.width)
+ compare(item1.height, item1.implicitHeight)
+ handle1 = handles[1]
+ compare(handle1.x, 0)
+ compare(handle1.y, item1.y + item1.height)
+ compare(handle1.width, testCase.width)
+ compare(handle1.height, defaultVerticalHandleHeight)
+ compare(item2.x, 0)
+ compare(item2.y, item0.height + item1.height + defaultVerticalHandleHeight * 2)
+ compare(item2.width, testCase.width)
+ compare(item2.height, testCase.height - item2.y)
+ }
+
+ readonly property int splitViewMargins: 50
+
+ Component {
+ id: threeItemsMinSizeAndFillComponent
+
+ SplitView {
+ anchors.fill: parent
+ handle: handleComponent
+
+ Rectangle {
+ objectName: "salmon"
+ color: objectName
+ implicitWidth: 25
+ implicitHeight: 25
+ SplitView.minimumWidth: 25
+ SplitView.minimumHeight: 25
+ SplitView.fillWidth: true
+ SplitView.fillHeight: true
+ }
+ Rectangle {
+ objectName: "navajowhite"
+ color: objectName
+ implicitWidth: 100
+ implicitHeight: 100
+ }
+ Rectangle {
+ objectName: "steelblue"
+ color: objectName
+ implicitWidth: 200
+ implicitHeight: 200
+ }
+ }
+ }
+
+ Component {
+ id: repeaterSplitViewComponent
+
+ SplitView {
+ anchors.fill: parent
+ handle: handleComponent
+
+ property alias repeater: repeater
+
+ Repeater {
+ id: repeater
+ model: 3
+ delegate: Rectangle {
+ objectName: "rectDelegate" + index
+
+ SplitView.preferredWidth: 25
+
+ color: "#aaff0000"
+
+ Text {
+ text: parent.x + "," + parent.y + " " + parent.width + "x" + parent.height
+ color: "white"
+ rotation: 90
+ anchors.centerIn: parent
+ }
+ }
+ }
+ }
+ }
+
+ Component {
+ id: hiddenItemSplitViewComponent
+
+ SplitView {
+ anchors.fill: parent
+ handle: handleComponent
+
+ Rectangle {
+ objectName: "steelblue"
+ color: objectName
+
+ SplitView.minimumWidth: 50
+ }
+ Rectangle {
+ objectName: "tomato"
+ color: objectName
+
+ SplitView.fillWidth: true
+ SplitView.preferredWidth: 200
+ }
+ Rectangle {
+ objectName: "navajowhite"
+ color: objectName
+ visible: false
+
+ SplitView.minimumWidth: visible ? 100 : 0
+ }
+ Rectangle {
+ objectName: "mediumseagreen"
+ color: objectName
+
+ SplitView.minimumWidth: 50
+ }
+ }
+ }
+
+ function test_dragHandle_data() {
+ var splitViewWidth = testCase.width - splitViewMargins * 2
+ var splitViewHeight = testCase.height - splitViewMargins * 2
+ var data = [
+ {
+ tag: "fillThirdItemAndDragFirstHandlePastRightSide",
+ component: threeSizedItemsComponent,
+ orientation: Qt.Horizontal,
+ // The index of the item that will fill.
+ fillIndex: 2,
+ // The index of the handle to be dragged.
+ handleIndex: 0,
+ // The position where the center of the handle will be.
+ newHandlePos: Qt.point(testCase.width + 20, testCase.height / 2),
+ // The expected geometry of each item managed by the SplitView before dragging the handle.
+ expectedGeometriesBeforeDrag: [
+ // First item.
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ // First handle.
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // Second item.
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ // Second handle.
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // Third item (fills).
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 25 - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ],
+ // The expected geometry of each item managed by the SplitView after dragging the handle.
+ expectedGeometriesAfterDrag: [
+ // The fill item is to the right of the handle at index 0, so the handle belongs
+ // to the left item: us. We should consume all of the fill item's width.
+ { x: 0, y: 0, width: splitViewWidth - 100 - defaultHorizontalHandleWidth * 2,
+ height: splitViewHeight },
+ // First handle.
+ { x: splitViewWidth - defaultHorizontalHandleWidth * 2 - 100,
+ y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The second item does not fill, so its width should be unchanged.
+ { x: splitViewWidth - 100 - defaultHorizontalHandleWidth,
+ y: 0, width: 100, height: splitViewHeight },
+ // Second handle.
+ { x: splitViewWidth - defaultHorizontalHandleWidth,
+ y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The last item does fill, so it should lose all of its width.
+ { x: splitViewWidth, y: 0, width: 0, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "fillThirdItemAndDragFirstHandlePastBottomSide",
+ component: threeSizedItemsComponent,
+ orientation: Qt.Vertical,
+ fillIndex: 2,
+ handleIndex: 0,
+ newHandlePos: Qt.point(testCase.width / 2, testCase.height + 20),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ { x: 0, y: 25, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight * 2,
+ width: splitViewWidth, height: splitViewHeight - 25 - 100 - defaultVerticalHandleHeight * 2 }
+ ],
+ // The expected geometry of each item managed by the SplitView after dragging the handle.
+ expectedGeometriesAfterDrag: [
+ // The fill item is to the bottom of the handle at index 0, so the handle belongs
+ // to the top item: us. We should consume all of the fill item's width.
+ { x: 0, y: 0, width: splitViewWidth,
+ height: splitViewHeight - 100 - defaultVerticalHandleHeight * 2 },
+ // First handle.
+ { x: 0, y: splitViewHeight - defaultVerticalHandleHeight * 2 - 100,
+ width: splitViewWidth, height: defaultVerticalHandleHeight },
+ // The second item does not fill, so its height should be unchanged.
+ { x: 0, y: splitViewWidth - 100 - defaultVerticalHandleHeight,
+ width: splitViewWidth, height: 100 },
+ // Second handle.
+ { x: 0, y: splitViewHeight - defaultVerticalHandleHeight,
+ width: splitViewWidth, height: defaultVerticalHandleHeight },
+ // The last item does fill, so it should lose all of its width.
+ { x: 0, y: splitViewHeight, width: splitViewWidth, height: 0 }
+ ]
+ },
+ {
+ tag: "fillThirdItemAndDragSecondHandlePastLeftSide",
+ component: threeSizedItemsComponent,
+ orientation: Qt.Horizontal,
+ fillIndex: 2,
+ handleIndex: 1,
+ newHandlePos: Qt.point(-20, testCase.height / 2),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 25 - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ],
+ expectedGeometriesAfterDrag: [
+ // The fill item is to the right of the handle at index 1, so the handle belongs
+ // to the second item; our width should be unchanged.
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ // First handle.
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The second item is the one being resized, and since we're dragging its handle
+ // to the left, its width should decrease.
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 0, height: splitViewHeight },
+ // Second handle.
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: splitViewHeight },
+ // The last item fills, so it should get the second item's lost width.
+ { x: 25 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 25 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "fillThirdItemAndDragSecondHandlePastTopSide",
+ component: threeSizedItemsComponent,
+ orientation: Qt.Vertical,
+ fillIndex: 2,
+ handleIndex: 1,
+ newHandlePos: Qt.point(testCase.width / 2, -20),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ { x: 0, y: 25, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight * 2,
+ width: splitViewWidth, height: splitViewHeight - 25 - 100 - defaultVerticalHandleHeight * 2 }
+ ],
+ expectedGeometriesAfterDrag: [
+ // The fill item is to the bottom of the handle at index 1, so the handle belongs
+ // to the second item; our height should be unchanged.
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ // First handle.
+ { x: 0, y: 25, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ // The second item is the one being resized, and since we're dragging its handle
+ // to the top, its height should decrease.
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: splitViewWidth, height: 0 },
+ // Second handle.
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: splitViewWidth,
+ height: defaultVerticalHandleHeight },
+ // The last item fills, so it should get the second item's lost height.
+ { x: 0, y: 25 + defaultVerticalHandleHeight * 2,
+ width: splitViewWidth, height: splitViewHeight - 25 - defaultVerticalHandleHeight * 2 }
+ ]
+ },
+ {
+ // First item should start off empty and then eventually take up all of 3rd item's space
+ // as the handle is dragged past the right side.
+ tag: "fillFirstItemAndDragSecondHandlePastRightSide",
+ component: threeSizedItemsComponent,
+ orientation: Qt.Horizontal,
+ fillIndex: 0,
+ handleIndex: 1,
+ newHandlePos: Qt.point(testCase.width + 20, testCase.height / 2),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: 0, height: splitViewHeight },
+ { x: 0, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 100 + defaultHorizontalHandleWidth * 2, y: 0, width: 200, height: splitViewHeight }
+ ],
+ expectedGeometriesAfterDrag: [
+ // The fill item is to the left of the handle at index 1, so the handle belongs
+ // to the third item. Since we're moving the handle to the right side of the
+ // SplitView, our width should grow as we consume the width of the third item.
+ { x: 0, y: 0, width: splitViewWidth - 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight },
+ // First handle.
+ { x: splitViewWidth - 100 - defaultHorizontalHandleWidth * 2, y: 0,
+ width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The second item's width remains unchanged.
+ { x: splitViewWidth - 100 - defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ // Second handle.
+ { x: splitViewWidth - defaultHorizontalHandleWidth, y: 0,
+ width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The last item loses its width.
+ { x: splitViewWidth, y: 0, width: 0, height: splitViewHeight }
+ ]
+ },
+ {
+ // First item should start off empty and then eventually take up all of 3rd item's space
+ // as the handle is dragged past the bottom side.
+ tag: "fillFirstItemAndDragSecondHandlePastBottomSide",
+ component: threeSizedItemsComponent,
+ orientation: Qt.Vertical,
+ fillIndex: 0,
+ handleIndex: 1,
+ newHandlePos: Qt.point(testCase.width / 2, testCase.height + 20),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: splitViewWidth, height: 0 },
+ { x: 0, y: 0, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ { x: 0, y: 100 + defaultVerticalHandleHeight, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 100 + defaultVerticalHandleHeight * 2, width: splitViewWidth, height: 200 }
+ ],
+ expectedGeometriesAfterDrag: [
+ // The fill item is to the top of the handle at index 1, so the handle belongs
+ // to the third item. Since we're moving the handle to the bottom side of the
+ // SplitView, our height should grow as we consume the height of the third item.
+ { x: 0, y: 0, width: splitViewWidth, height: splitViewHeight - 100 - defaultVerticalHandleHeight * 2 },
+ // First handle.
+ { x: 0, y: splitViewHeight - 100 - defaultVerticalHandleHeight * 2,
+ width: splitViewWidth, height: defaultVerticalHandleHeight },
+ // The second item's width remains unchanged.
+ { x: 0, y: splitViewHeight - 100 - defaultVerticalHandleHeight, width: splitViewWidth, height: 100 },
+ // Second handle.
+ { x: 0, y: splitViewHeight - defaultVerticalHandleHeight,
+ width: splitViewWidth, height: defaultVerticalHandleHeight },
+ // The last item loses its width.
+ { x: 0, y: splitViewHeight, width: splitViewHeight, height: 0 }
+ ]
+ },
+ {
+ tag: "fillFirstItemAndDragFirstHandlePastLeftSide",
+ component: threeSizedItemsComponent,
+ orientation: Qt.Horizontal,
+ fillIndex: 0,
+ handleIndex: 0,
+ newHandlePos: Qt.point(-20, testCase.height / 2),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: 0, height: splitViewHeight },
+ { x: 0, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // The second item's implicitWidth is 100, and ours is 200. The available width is 300,
+ // so both items get their implicit widths.
+ { x: 100 + defaultHorizontalHandleWidth * 2, y: 0, width: splitViewWidth - 100, height: splitViewHeight }
+ ],
+ // Should be unchanged.
+ expectedGeometriesAfterDrag: [
+ { x: 0, y: 0, width: 0, height: splitViewHeight },
+ { x: 0, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 100 + defaultHorizontalHandleWidth * 2, y: 0, width: splitViewWidth - 100, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "fillFirstItemWithMinWidthAndDragFirstHandlePastLeftSide",
+ component: threeItemsMinSizeAndFillComponent,
+ orientation: Qt.Horizontal,
+ fillIndex: 0,
+ handleIndex: 0,
+ newHandlePos: Qt.point(-20, testCase.height / 2),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0, width: splitViewWidth - 100, height: splitViewHeight }
+ ],
+ // Should be unchanged.
+ expectedGeometriesAfterDrag: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0, width: splitViewWidth - 100, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "repeater",
+ component: repeaterSplitViewComponent,
+ orientation: Qt.Horizontal,
+ fillIndex: 2,
+ handleIndex: 1,
+ newHandlePos: Qt.point(200, testCase.height / 2),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 25, height: splitViewHeight },
+ { x: 25 * 2 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 * 2 + defaultHorizontalHandleWidth * 2, y: 0, width: splitViewWidth - 70 , height: splitViewHeight }
+ ],
+ expectedGeometriesAfterDrag: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 105, height: splitViewHeight },
+ { x: 140, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 150, y: 0, width: 150, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "hiddenItemSplitViewComponent",
+ // [50] | [200 (fill)] | [hidden] | [50]
+ component: hiddenItemSplitViewComponent,
+ orientation: Qt.Horizontal,
+ fillIndex: 1,
+ handleIndex: 1,
+ // Drag to the horizontal centre of the SplitView.
+ newHandlePos: Qt.point(splitViewMargins + 150, testCase.height / 2),
+ expectedGeometriesBeforeDrag: [
+ { x: 0, y: 0, width: 50, height: splitViewHeight },
+ { x: 50, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 50 + defaultHorizontalHandleWidth, y: 0, width: 200 - defaultHorizontalHandleWidth * 2, height: splitViewHeight },
+ { x: 250 - (defaultHorizontalHandleWidth * 2) + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { hidden: true }, // Third item should be hidden.
+ { hidden: true }, // Handle for third item should be hidden.
+ { x: 250 - (defaultHorizontalHandleWidth * 2) + defaultHorizontalHandleWidth * 2, y: 0, width: 50, height: splitViewHeight }
+ ],
+ expectedGeometriesAfterDrag: [
+ { x: 0, y: 0, width: 50, height: splitViewHeight },
+ { x: 50, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // Width of the fill item should end up smaller.
+ { x: 50 + defaultHorizontalHandleWidth, y: 0, width: 100 - defaultHorizontalHandleWidth * 2, height: splitViewHeight },
+ { x: 150 - (defaultHorizontalHandleWidth * 2) + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { hidden: true }, // Third item should be hidden.
+ { hidden: true }, // Handle for third item should be hidden.
+ // Width of the last item should grow.
+ { x: 150 - (defaultHorizontalHandleWidth * 2) + defaultHorizontalHandleWidth * 2, y: 0, width: 150, height: splitViewHeight }
+ ]
+ }
+ ]
+ return data
+ }
+
+ function test_dragHandle(data) {
+ var control = createTemporaryObject(data.component, testCase)
+ verify(control)
+
+ control.orientation = data.orientation
+
+ // Ensure that there is space to drag outside of the SplitView.
+ control.anchors.margins = splitViewMargins
+
+ var fillItem = control.itemAt(data.fillIndex)
+ if (control.orientation === Qt.Horizontal)
+ fillItem.SplitView.fillWidth = true
+ else
+ fillItem.SplitView.fillHeight = true
+
+ // Check the sizes (and visibility) of the items before the drag.
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometriesBeforeDrag, "before drag")
+
+ // Drag the handle.
+ var handles = findHandles(control)
+ var targetHandle = handles[data.handleIndex]
+ verify(targetHandle.visible)
+ mousePress(targetHandle)
+ verify(control.resizing)
+ // newHandlePos is in scene coordinates, so map it to coordinates local to the handle.
+ var localPos = testCase.mapToItem(targetHandle, data.newHandlePos.x, data.newHandlePos.y)
+ mouseMove(targetHandle, localPos.x - targetHandle.width / 2, localPos.y - targetHandle.height / 2)
+ verify(control.resizing)
+ compareSizes(control, data.expectedGeometriesAfterDrag, "after drag move")
+
+ // The geometries should remain unchanged after releasing.
+ mouseRelease(targetHandle, localPos.x - targetHandle.width / 2, localPos.y - targetHandle.height / 2, Qt.LeftButton)
+ verify(!control.resizing)
+ compareSizes(control, data.expectedGeometriesAfterDrag, "after drag release")
+ }
+
+ function test_splitViewGeometryChanges_data() {
+ var defaultSplitViewWidth = testCase.width
+ var defaultSplitViewHeight = testCase.height
+
+ var data = [
+ {
+ tag: "growWidth",
+ orientation: Qt.Horizontal,
+ splitViewWidth: 800,
+ expectedGeometries: [
+ { x: 0, y: 0, width: 25, height: defaultSplitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: defaultSplitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: defaultSplitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: defaultSplitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: 800 - 25 - 100 - defaultHorizontalHandleWidth * 2, height: defaultSplitViewHeight }
+ ]
+ },
+ {
+ // Same as above except vertical.
+ tag: "growHeight",
+ orientation: Qt.Vertical,
+ splitViewHeight: 800,
+ expectedGeometries: [
+ { x: 0, y: 0, width: defaultSplitViewWidth, height: 25 },
+ { x: 0, y: 25, width: defaultSplitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: defaultSplitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight, width: defaultSplitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight * 2, width: defaultSplitViewWidth,
+ height: 800 - 25 - 100 - defaultVerticalHandleHeight * 2 }
+ ]
+ },
+ {
+ tag: "shrinkWidth",
+ orientation: Qt.Horizontal,
+ splitViewWidth: 200,
+ expectedGeometries: [
+ { x: 0, y: 0, width: 25, height: defaultSplitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: defaultSplitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: defaultSplitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: defaultSplitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: 200 - 25 - 100 - defaultHorizontalHandleWidth * 2, height: defaultSplitViewHeight }
+ ]
+ },
+ {
+ // Same as above except vertical.
+ tag: "shrinkHeight",
+ orientation: Qt.Vertical,
+ splitViewHeight: 200,
+ expectedGeometries: [
+ { x: 0, y: 0, width: defaultSplitViewWidth, height: 25 },
+ { x: 0, y: 25, width: defaultSplitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + defaultVerticalHandleHeight, width: defaultSplitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight, width: defaultSplitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + 100 + defaultVerticalHandleHeight * 2, width: defaultSplitViewWidth,
+ height: 200 - 25 - 100 - defaultVerticalHandleHeight * 2 }
+ ]
+ },
+ ]
+ return data
+ }
+
+ function test_splitViewGeometryChanges(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase,
+ { "handle": handleComponent, "anchors.fill": undefined, "orientation": data.orientation })
+ verify(control)
+
+ if (data.hasOwnProperty("splitViewWidth"))
+ control.width = data.splitViewWidth
+ else
+ control.width = testCase.width
+
+ if (data.hasOwnProperty("splitViewHeight"))
+ control.height = data.splitViewHeight
+ else
+ control.height = testCase.height
+
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometries)
+ }
+
+ function test_splitItemImplicitSizeChanges_data() {
+ var defaultSplitViewWidth = testCase.width
+ var defaultSplitViewHeight = testCase.height
+
+ var data = [
+ {
+ tag: "growImplicitWidth",
+ orientation: Qt.Horizontal,
+ splitItemImplicitWidth: 50,
+ expectedGeometries: [
+ { x: 0, y: 0, width: 50, height: defaultSplitViewHeight },
+ { x: 50, y: 0, width: defaultHorizontalHandleWidth, height: defaultSplitViewHeight },
+ { x: 50 + defaultHorizontalHandleWidth, y: 0, width: 100, height: defaultSplitViewHeight },
+ { x: 50 + 100 + defaultHorizontalHandleWidth, y: 0, width: defaultHorizontalHandleWidth,
+ height: defaultSplitViewHeight },
+ { x: 50 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: defaultSplitViewWidth - 50 - 100 - defaultHorizontalHandleWidth * 2, height: defaultSplitViewHeight }
+ ]
+ },
+ {
+ tag: "growImplicitHeight",
+ orientation: Qt.Vertical,
+ splitItemImplicitHeight: 50,
+ expectedGeometries: [
+ { x: 0, y: 0, width: defaultSplitViewWidth, height: 50 },
+ { x: 0, y: 50, width: defaultSplitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 50 + defaultVerticalHandleHeight, width: defaultSplitViewWidth, height: 100 },
+ { x: 0, y: 50 + 100 + defaultVerticalHandleHeight, width: defaultSplitViewWidth,
+ height: defaultVerticalHandleHeight },
+ { x: 0, y: 50 + 100 + defaultVerticalHandleHeight * 2, width: defaultSplitViewWidth,
+ height: defaultSplitViewHeight - 50 - 100 - defaultVerticalHandleHeight * 2 }
+ ]
+ }
+ ]
+ return data
+ }
+
+ // Tests that implicitWidth/Height changes in items are noticed by SplitView.
+ function test_splitItemImplicitSizeChanges(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase,
+ { "handle": handleComponent, "orientation": data.orientation })
+ verify(control)
+
+ var firstItem = control.itemAt(0)
+
+ if (data.hasOwnProperty("splitItemImplicitWidth"))
+ firstItem.implicitWidth = data.splitItemImplicitWidth
+
+ if (data.hasOwnProperty("splitItemImplicitHeight"))
+ firstItem.implicitHeight = data.splitItemImplicitHeight
+
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometries)
+ }
+
+ Component {
+ id: largerHandle
+ Rectangle {
+ objectName: "largerHandle"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: "#444"
+ }
+ }
+
+ Component {
+ id: smallerHandle
+ Rectangle {
+ objectName: "smallerHandle"
+ implicitWidth: 5
+ implicitHeight: 5
+ color: "#444"
+ }
+ }
+
+ function test_handleChanges_data() {
+ var splitViewWidth = testCase.width
+ var splitViewHeight = testCase.height
+
+ var data = [
+ {
+ tag: "growHandleWidth",
+ orientation: Qt.Horizontal,
+ handleComponent: largerHandle,
+ expectedGeometries: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: 20, height: splitViewHeight },
+ { x: 25 + 20, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + 20, y: 0, width: 20, height: splitViewHeight },
+ { x: 25 + 100 + 20 * 2, y: 0, width: splitViewWidth - 25 - 100 - 20 * 2,
+ height: splitViewHeight }
+ ]
+ },
+ {
+ // Same as above except vertical.
+ tag: "growHandleHeight",
+ orientation: Qt.Vertical,
+ handleComponent: largerHandle,
+ expectedGeometries: [
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ { x: 0, y: 25, width: splitViewWidth, height: 20 },
+ { x: 0, y: 25 + 20, width: splitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + 20, width: splitViewWidth, height: 20 },
+ { x: 0, y: 25 + 100 + 20 * 2, width: splitViewWidth,
+ height: splitViewHeight - 25 - 100 - 20 * 2 }
+ ]
+ },
+ {
+ tag: "shrinkHandleWidth",
+ orientation: Qt.Horizontal,
+ handleComponent: smallerHandle,
+ expectedGeometries: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: 5, height: splitViewHeight },
+ { x: 25 + 5, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + 5, y: 0, width: 5, height: splitViewHeight },
+ { x: 25 + 100 + 5 * 2, y: 0, width: splitViewWidth - 25 - 100 - 5 * 2,
+ height: splitViewHeight }
+ ]
+ },
+ {
+ // Same as above except vertical.
+ tag: "shrinkHandleHeight",
+ orientation: Qt.Vertical,
+ handleComponent: smallerHandle,
+ expectedGeometries: [
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ { x: 0, y: 25, width: splitViewWidth, height: 5 },
+ { x: 0, y: 25 + 5, width: splitViewWidth, height: 100 },
+ { x: 0, y: 25 + 100 + 5, width: splitViewWidth, height: 5 },
+ { x: 0, y: 25 + 100 + 5 * 2, width: splitViewWidth,
+ height: splitViewHeight - 25 - 100 - 5 * 2 }
+ ]
+ }
+ ]
+ return data
+ }
+
+ function test_handleChanges(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase,
+ { "orientation": data.orientation })
+ verify(control)
+
+ control.handle = data.handleComponent
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometries)
+ }
+
+ function test_insertRemoveItems_data() {
+ var splitViewWidth = testCase.width
+ var splitViewHeight = testCase.height
+
+ var data = [
+ {
+ tag: "insertItemAtHorizontalEnd",
+ orientation: Qt.Horizontal,
+ insertItemAtIndex: 3,
+ expectedGeometries: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 + 100 + defaultHorizontalHandleWidth, y: 0,
+ width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // This was the fill item originally, but since no fill item is explicitly
+ // specified, and we added an item to the right of it, it is no longer the fill item
+ // because it's no longer last.
+ { x: 25 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: 200, height: splitViewHeight },
+ // Handle for newly added item.
+ { x: 25 + 100 + 200 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // Newly added item.
+ { x: 25 + 100 + 200 + defaultHorizontalHandleWidth * 3, y: 0,
+ width: splitViewWidth - 25 - 100 - 200 - defaultHorizontalHandleWidth * 3,
+ height: splitViewHeight },
+ ]
+ },
+ {
+ tag: "insertItemAtHorizontalBeginning",
+ orientation: Qt.Horizontal,
+ insertItemAtIndex: 0,
+ expectedGeometries: [
+ // Newly added item.
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0, width: 25, height: splitViewHeight },
+ { x: 25 * 2 + defaultHorizontalHandleWidth, y: 0,
+ width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 * 2 + defaultHorizontalHandleWidth * 2, y: 0, width: 100, height: splitViewHeight },
+ { x: 25 * 2 + 100 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // Fill item doesn't change.
+ { x: 25 * 2 + 100 + defaultHorizontalHandleWidth * 3, y: 0,
+ width: splitViewWidth - 25 * 2 - 100 - defaultHorizontalHandleWidth * 3,
+ height: splitViewHeight },
+ ]
+ },
+ {
+ tag: "removeItemFromHorizontalEnd",
+ orientation: Qt.Horizontal,
+ removeItemAtIndex: 2,
+ expectedGeometries: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0,
+ width: splitViewWidth - 25 - defaultHorizontalHandleWidth, height: splitViewHeight },
+ ]
+ },
+ {
+ tag: "removeItemFromHorizontalBeginning",
+ orientation: Qt.Horizontal,
+ removeItemAtIndex: 0,
+ expectedGeometries: [
+ { x: 0, y: 0, width: 100, height: splitViewHeight },
+ { x: 100, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 100 + defaultHorizontalHandleWidth, y: 0,
+ width: splitViewWidth - 100 - defaultHorizontalHandleWidth, height: splitViewHeight },
+ ]
+ }
+ ]
+ return data
+ }
+
+ Component {
+ id: smallRectComponent
+
+ Rectangle {
+ objectName: "darkseagreen"
+ color: objectName
+ implicitWidth: 25
+ implicitHeight: 25
+ }
+ }
+
+ function test_insertRemoveItems(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase,
+ { "orientation": data.orientation })
+ verify(control)
+
+ if (data.hasOwnProperty("removeItemAtIndex")) {
+ var itemToRemove = control.itemAt(data.removeItemAtIndex)
+ verify(itemToRemove)
+
+ control.removeItem(itemToRemove)
+ } else if (data.hasOwnProperty("insertItemAtIndex")) {
+ var itemToAdd = smallRectComponent.createObject(control)
+ control.insertItem(data.insertItemAtIndex, itemToAdd)
+ }
+
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometries)
+ }
+
+ function test_removeAllItems() {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase)
+ verify(control)
+
+ while (control.count > 0)
+ var itemToRemove = control.removeItem(control.itemAt(0))
+ // Shouldn't crash.
+ }
+
+ function test_hideItems_data() {
+ var splitViewWidth = testCase.width
+ var splitViewHeight = testCase.height
+
+ var data = [
+ {
+ tag: "hideItemAtHorizontalEnd",
+ orientation: Qt.Horizontal,
+ hideIndices: [2],
+ expectedGeometries: [
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0,
+ width: splitViewWidth - 25 - defaultHorizontalHandleWidth, height: splitViewHeight },
+ { hidden: true }, // Handle for second item should be hidden.
+ { hidden: true } // Last item should be hidden.
+ ]
+ },
+ {
+ tag: "hideItemAtHorizontalBeginning",
+ orientation: Qt.Horizontal,
+ hideIndices: [0],
+ expectedGeometries: [
+ { hidden: true }, // First item should be hidden.
+ { hidden: true }, // Handle for first item should be hidden.
+ { x: 0, y: 0, width: 100, height: splitViewHeight },
+ { x: 100, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 100 + defaultHorizontalHandleWidth, y: 0,
+ width: splitViewWidth - 100 - defaultHorizontalHandleWidth, height: splitViewHeight }
+ ]
+ },
+ {
+ tag: "hideItemAtVerticalEnd",
+ orientation: Qt.Vertical,
+ hideIndices: [2],
+ expectedGeometries: [
+ { x: 0, y: 0, width: splitViewWidth, height: 25 },
+ { x: 0, y: 25, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 25 + defaultVerticalHandleHeight,
+ width: splitViewWidth, height: splitViewHeight - 25 - defaultVerticalHandleHeight },
+ { hidden: true }, // Handle for second item should be hidden.
+ { hidden: true } // Last item should be hidden.
+ ]
+ },
+ {
+ tag: "hideItemAtVerticalBeginning",
+ orientation: Qt.Vertical,
+ hideIndices: [0],
+ expectedGeometries: [
+ { hidden: true }, // First item should be hidden.
+ { hidden: true }, // Handle for first item should be hidden.
+ { x: 0, y: 0, width: splitViewWidth, height: 100 },
+ { x: 0, y: 100, width: splitViewWidth, height: defaultVerticalHandleHeight },
+ { x: 0, y: 100 + defaultVerticalHandleHeight,
+ width: splitViewWidth, height: splitViewHeight - 100 - defaultVerticalHandleHeight }
+ ]
+ },
+ {
+ // No handles should be visible when there's only one item.
+ tag: "hideLastTwoHorizontalItems",
+ orientation: Qt.Horizontal,
+ hideIndices: [1, 2],
+ expectedGeometries: [
+ { x: 0, y: 0, width: splitViewWidth, height: splitViewHeight },
+ { hidden: true }, // Handle for first item should be hidden.
+ { hidden: true }, // Second item should be hidden.
+ { hidden: true }, // Handle for second item should be hidden.
+ { hidden: true } // Third item should be hidden.
+ ]
+ }
+ ]
+ return data
+ }
+
+ function test_hideItems(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase,
+ { "orientation": data.orientation })
+ verify(control)
+
+ for (var i = 0; i < data.hideIndices.length; ++i) {
+ var itemToHide = control.itemAt(data.hideIndices[i])
+ verify(itemToHide)
+ itemToHide.visible = false
+ }
+
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometries)
+ }
+
+ function test_hideAndShowItems_data() {
+ var splitViewWidth = testCase.width
+ var splitViewHeight = testCase.height
+
+ var data = [
+ {
+ tag: "hideLastTwoHorizontalItems",
+ orientation: Qt.Horizontal,
+ hideIndices: [1, 2],
+ expectedGeometriesAfterHiding: [
+ { x: 0, y: 0, width: splitViewWidth, height: splitViewHeight },
+ { hidden: true }, // Handle for first item should be hidden.
+ { hidden: true }, // Second item should be hidden.
+ { hidden: true }, // Handle for second item should be hidden.
+ { hidden: true } // Third item should be hidden.
+ ],
+ showIndices: [1],
+ expectedGeometriesAfterShowing: [
+ // First item should be visible with its implicit size.
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ // Handle for first item should be visible.
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // Second item should be visible and fill.
+ { x: 25 + defaultHorizontalHandleWidth, y: 0,
+ width: splitViewWidth - 25 - defaultHorizontalHandleWidth, height: splitViewHeight },
+ { hidden: true }, // Handle for second item should be hidden.
+ { hidden: true } // Third item should be hidden.
+ ]
+ }
+ ]
+ return data
+ }
+
+ function test_hideAndShowItems(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase,
+ { "orientation": data.orientation })
+ verify(control)
+
+ for (var i = 0; i < data.hideIndices.length; ++i) {
+ var itemToHide = control.itemAt(data.hideIndices[i])
+ verify(itemToHide)
+ itemToHide.visible = false
+ }
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometriesAfterHiding, "after hiding")
+
+ for (i = 0; i < data.showIndices.length; ++i) {
+ var itemToShow = control.itemAt(data.showIndices[i])
+ verify(itemToShow)
+ itemToShow.visible = true
+ }
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometriesAfterShowing, "after showing")
+ }
+
+ function test_moveHiddenItems_data() {
+ var splitViewWidth = testCase.width
+ var splitViewHeight = testCase.height
+
+ var data = [
+ {
+ tag: "hideSecondItemAndMoveItToFirst",
+ orientation: Qt.Horizontal,
+ hideIndices: [1],
+ moveFromIndex: 1,
+ moveToIndex: 0,
+ expectedGeometriesAfterMoving: [
+ { hidden: true }, // First item (was second) should be hidden.
+ { hidden: true }, // Handle for first item should be hidden.
+ // Second item (was first) should get its implicit size.
+ { x: 0, y: 0, width: 25, height: splitViewHeight },
+ { x: 25, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 25 + defaultHorizontalHandleWidth, y: 0,
+ width: splitViewWidth - 25 - defaultHorizontalHandleWidth, height: splitViewHeight },
+ ],
+ showIndices: [0],
+ expectedGeometriesAfterShowing: [
+ // First item (was second) should be visible with its implicit size.
+ { x: 0, y: 0, width: 100, height: splitViewHeight },
+ // Handle for first item (was second) should be visible.
+ { x: 100, y: 0, width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ // Second item (was first) should be visible with its implicit size.
+ { x: 100 + defaultHorizontalHandleWidth, y: 0,
+ width: 25, height: splitViewHeight },
+ { x: 100 + 25 + defaultHorizontalHandleWidth, y: 0,
+ width: defaultHorizontalHandleWidth, height: splitViewHeight },
+ { x: 100 + 25 + defaultHorizontalHandleWidth * 2, y: 0,
+ width: splitViewWidth - 100 - 25 - defaultHorizontalHandleWidth * 2, height: splitViewHeight }
+ ]
+ }
+ ]
+ return data
+ }
+
+ function test_moveHiddenItems(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase,
+ { "orientation": data.orientation })
+ verify(control)
+
+ for (var i = 0; i < data.hideIndices.length; ++i) {
+ var itemToHide = control.itemAt(data.hideIndices[i])
+ verify(itemToHide)
+ itemToHide.visible = false
+ }
+
+ control.moveItem(data.moveFromIndex, data.moveToIndex)
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometriesAfterMoving, "after moving")
+
+ for (i = 0; i < data.showIndices.length; ++i) {
+ var itemToShow = control.itemAt(data.showIndices[i])
+ verify(itemToShow)
+ itemToShow.visible = true
+ }
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compareSizes(control, data.expectedGeometriesAfterShowing, "after showing")
+ }
+
+ Component {
+ id: flickableComponent
+
+ Flickable {
+ anchors.fill: parent
+ anchors.margins: 100
+ }
+ }
+
+ function test_draggingHandleInFlickable() {
+ var flickable = createTemporaryObject(flickableComponent, testCase)
+ verify(flickable)
+
+ var control = threeSizedItemsComponent.createObject(flickable.contentItem)
+ verify(control)
+
+ control.anchors.fill = undefined
+ control.width = 400
+ control.height = control.parent.height - 100
+ flickable.contentWidth = control.width
+ flickable.contentHeight = control.height
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+
+ var contentXSpy = signalSpyComponent.createObject(flickable,
+ { target: flickable, signalName: "contentXChanged" })
+ verify(contentXSpy.valid)
+ var contentYSpy = signalSpyComponent.createObject(flickable,
+ { target: flickable, signalName: "contentYChanged" })
+ verify(contentYSpy.valid)
+
+ // Drag the first handle to the right;
+ // the flickable's contentX and contentY shouldn't change.
+ var firstItem = control.itemAt(0)
+ var firstItemOriginalWidth = firstItem.width
+ var handles = findHandles(control)
+ var firstHandle = handles[0]
+ // Add some vertical movement in there as well.
+ mouseDrag(firstHandle, firstHandle.width / 2, firstHandle.height / 2, 100, 50)
+ compare(contentXSpy.count, 0)
+ compare(contentYSpy.count, 0)
+ verify(firstItem.width > firstItemOriginalWidth)
+
+ // Now do the same except vertically.
+ control.orientation = Qt.Vertical
+ control.width = control.parent.width - 100
+ control.height = 400
+ var firstItemOriginalHeight = firstItem.height
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+
+ // Add some horizontal movement in there as well.
+ mouseDrag(firstHandle, firstHandle.width / 2, firstHandle.height / 2, 50, 100)
+ compare(contentXSpy.count, 0)
+ compare(contentYSpy.count, 0)
+ verify(firstItem.height > firstItemOriginalHeight)
+ }
+
+ Component {
+ id: splitViewHandleContainmentMaskComponent
+
+ MouseArea {
+ property alias mouseArea1: mouseArea1
+ property alias mouseArea2: mouseArea2
+ property alias splitView: splitView
+
+ anchors.fill: parent
+ hoverEnabled: true
+ acceptedButtons: Qt.LeftButton
+
+ Rectangle {
+ anchors.fill: parent
+ color: 'green'
+ opacity: 0.3
+ }
+
+ SplitView {
+ id: splitView
+
+ anchors {
+ fill: parent
+ margins: 100
+ }
+
+ handle: Rectangle {
+ id: handleRoot
+
+ readonly property bool containsMouse: SplitHandle.hovered
+ readonly property int defaultSize: 2
+
+ implicitWidth: splitView.orientation === Qt.Horizontal ? handleRoot.defaultSize : splitView.width
+ implicitHeight: splitView.orientation === Qt.Vertical ? handleRoot.defaultSize : splitView.height
+
+ color: 'red'
+ objectName: "handle"
+
+ Text {
+ objectName: "handleText_" + text
+ text: parent.x + "," + parent.y + " " + parent.width + "x" + parent.height
+ color: "black"
+ anchors.centerIn: parent
+ rotation: 90
+ }
+
+ containmentMask: Item {
+ readonly property real extraOverflow: 20
+
+ x: splitView.orientation === Qt.Horizontal ? -extraOverflow : 0
+ y: splitView.orientation === Qt.Horizontal ? 0 : -extraOverflow
+ width: splitView.orientation === Qt.Horizontal ? handleRoot.defaultSize + (extraOverflow * 2): handleRoot.width
+ height: splitView.orientation === Qt.Horizontal ? handleRoot.height : handleRoot.defaultSize + (extraOverflow * 2)
+ }
+ }
+
+ MouseArea {
+ id: mouseArea1
+
+ SplitView.fillHeight: splitView.orientation === Qt.Horizontal
+ SplitView.fillWidth: splitView.orientation === Qt.Vertical
+ SplitView.preferredWidth: splitView.orientation === Qt.Horizontal ? parent.width / 2 : undefined
+ SplitView.preferredHeight: splitView.orientation === Qt.Vertical ? parent.height / 2 : undefined
+ hoverEnabled: true
+
+ Rectangle {
+ anchors.fill: parent
+ color: 'cyan'
+ opacity: 0.3
+ }
+ }
+
+ MouseArea {
+ id: mouseArea2
+
+ SplitView.fillHeight: splitView.orientation === Qt.Horizontal
+ SplitView.fillWidth: splitView.orientation === Qt.Vertical
+ SplitView.preferredWidth: splitView.orientation === Qt.Horizontal ? parent.width / 2 : undefined
+ SplitView.preferredHeight: splitView.orientation === Qt.Vertical ? parent.height / 2 : undefined
+ hoverEnabled: true
+
+ Rectangle {
+ anchors.fill: parent
+ color: 'cyan'
+ opacity: 0.3
+ }
+ }
+ }
+ }
+ }
+
+ function test_handleContainmentMask_data() {
+ const data = [
+ {
+ tag: "handleContainmentMaskHorizontalLeftEdgeDragRight",
+ orientation: Qt.Horizontal,
+ press: {
+ x: (handle) => handle.containmentMask.x,
+ y: (handle) => handle.height / 2
+ },
+ dx: 25,
+ dy: 0,
+ },
+ {
+ tag: "handleContainmentMaskHorizontalRightEdgeDragLeft",
+ orientation: Qt.Horizontal,
+ press: {
+ x: (handle) => handle.containmentMask.x,
+ y: (handle) => handle.height / 2
+ },
+ dx: -50,
+ dy: 0
+ },
+ {
+ tag: "handleContainmentMaskHorizontalTopEdgeDragRight",
+ orientation: Qt.Horizontal,
+ press: {
+ x: (handle) => handle.containmentMask.x + handle.containmentMask.width - 1,
+ y: (handle) => handle.height / 2
+ },
+ dx: 25,
+ dy: 0,
+ },
+ {
+ tag: "handleContainmentMaskHorizontalBottomEdgeDragLeft",
+ orientation: Qt.Horizontal,
+ press: {
+ x: (handle) => handle.containmentMask.x + handle.containmentMask.width - 1,
+ y: (handle) => handle.containmentMask.y
+ },
+ dx: -50,
+ dy: 0
+ },
+ {
+ tag: "handleContainmentMaskVerticalTopEdgeDragUp",
+ orientation: Qt.Vertical,
+ press: {
+ x: (handle) => handle.width / 2,
+ y: (handle) => handle.containmentMask.y
+ },
+ dx: 0,
+ dy: -40,
+ },
+ {
+ tag: "handleContainmentMaskVerticalTopEdgeDragDown",
+ orientation: Qt.Vertical,
+ press: {
+ x: (handle) => handle.width / 2,
+ y: (handle) => handle.containmentMask.y
+ },
+ dx: 0,
+ dy: 70
+ },
+ {
+ tag: "handleContainmentMaskVerticalBottomEdgeDragUp",
+ orientation: Qt.Vertical,
+ press: {
+ x: (handle) => handle.width / 2,
+ y: (handle) => handle.containmentMask.y + handle.containmentMask.height - 1
+ },
+ dx: 0,
+ dy: -40,
+ },
+ {
+ tag: "handleContainmentMaskVerticalBottomEdgeDragDown",
+ orientation: Qt.Vertical,
+ press: {
+ x: (handle) => handle.width / 2,
+ y: (handle) => handle.containmentMask.y + handle.containmentMask.height - 1
+ },
+ dx: 0,
+ dy: 70
+ }
+ ]
+
+ return data
+ }
+
+ function test_handleContainmentMask(data) {
+ const control = createTemporaryObject(splitViewHandleContainmentMaskComponent, testCase)
+ verify(control)
+ const splitView = control.splitView
+ splitView.orientation = data.orientation
+
+ const handle = findHandles(splitView)[0]
+ if (splitView.orientation === Qt.Vertical)
+ handle.height = handle.defaultHeight
+
+ verify(isPolishScheduled(splitView))
+ verify(waitForItemPolished(splitView))
+
+ const firstItem = control.mouseArea1
+ const secondItem = control.mouseArea2
+
+ const backgroundMouseAreaPress = signalSpyComponent.createObject(control,
+ { target: control, signalName: "onPressed" })
+
+ const mouseArea1Press = signalSpyComponent.createObject(firstItem,
+ { target: firstItem, signalName: "onPressed" })
+
+ const mouseArea2Press = signalSpyComponent.createObject(secondItem,
+ { target: secondItem, signalName: "onPressed" })
+
+ verify(backgroundMouseAreaPress.valid)
+ verify(mouseArea1Press.valid)
+ verify(mouseArea2Press.valid)
+
+ const firstItemWidthBeforeDrag = firstItem.width
+ const secondItemWidthBeforeDrag = secondItem.width
+ const firstItemHeightBeforeDrag = firstItem.height
+ const secondItemHeightBeforeDrag = secondItem.height
+
+ const dx = data.dx
+ const dy = data.dy
+ const pressX = data.press.x(handle)
+ const pressY = data.press.y(handle)
+
+ mousePress(handle, pressX, pressY, Qt.LeftButton)
+ mouseMove(handle, pressX + dx, pressY + dy, -1, Qt.LeftButton)
+ mouseRelease(handle, pressX + dx, pressY + dy, Qt.LeftButton)
+
+ compare(firstItem.width, firstItemWidthBeforeDrag + dx)
+ compare(secondItem.width, secondItemWidthBeforeDrag - dx)
+ compare(firstItem.height, firstItemHeightBeforeDrag + dy)
+ compare(secondItem.height, secondItemHeightBeforeDrag - dy)
+
+ compare(backgroundMouseAreaPress.count, 0)
+ compare(mouseArea1Press.count, 0)
+ compare(mouseArea2Press.count, 0)
+ }
+
+ function test_handleContainmentMaskHovered_data() {
+ const data = [
+ {
+ tag: "firstItemHorizontalHover",
+ orientation: Qt.Horizontal,
+ press: {
+ "x": (item) => item.width / 2,
+ "y": (item) => item.height / 2
+ },
+ hoverItem: "firstItem",
+ expectedHover: {
+ "firstItem": true,
+ "handle": false,
+ "secondItem": false
+ }
+ },
+ {
+ tag: "handleHorizontalHoverOnTheLeft",
+ orientation: Qt.Horizontal,
+ press: {
+ "x": (item) => item.containmentMask.x,
+ "y": (item) => item.height / 2
+ },
+ hoverItem: "handle",
+ expectedHover: {
+ "firstItem": true,
+ "handle": true,
+ "secondItem": false
+ }
+ },
+ {
+ tag: "handleHorizontalHoverOnTheCenter",
+ orientation: Qt.Horizontal,
+ press: {
+ "x": (item) => item.width / 2,
+ "y": (item) => item.height / 2
+ },
+ hoverItem: "handle",
+ expectedHover: {
+ "firstItem": false,
+ "handle": true,
+ "secondItem": false
+ }
+ },
+ {
+ tag: "handleHorizontalHoverOnTheRight",
+ orientation: Qt.Horizontal,
+ press: {
+ "x": (item) => item.containmentMask.x + item.containmentMask.width - 1,
+ "y": (item) => item.height / 2
+ },
+ hoverItem: "handle",
+ expectedHover: {
+ "firstItem": false,
+ "handle": true,
+ "secondItem": true
+ }
+ },
+ {
+ tag: "secondItemHorizontalHover",
+ orientation: Qt.Horizontal,
+ press: {
+ "x": (item) => item.width / 2,
+ "y": (item) => item.height / 2
+ },
+ hoverItem: "secondItem",
+ expectedHover: {
+ "firstItem": false,
+ "handle": false,
+ "secondItem": true
+ }
+ },
+ {
+ tag: "firstItemVerticalHover",
+ orientation: Qt.Vertical,
+ press: {
+ "x": (item) => item.width / 2,
+ "y": (item) => item.height / 2
+ },
+ hoverItem: "firstItem",
+ expectedHover: {
+ "firstItem": true,
+ "handle": false,
+ "secondItem": false
+ }
+ },
+ {
+ tag: "handleVerticalHoverOnTheTop",
+ orientation: Qt.Vertical,
+ press: {
+ "x": (item) => item.width / 2,
+ "y": (item) => item.containmentMask.y
+ },
+ hoverItem: "handle",
+ expectedHover: {
+ "firstItem": true,
+ "handle": true,
+ "secondItem": false
+ }
+ },
+ {
+ tag: "handleVerticalHoverOnTheCenter",
+ orientation: Qt.Vertical,
+ press: {
+ "x": (item) => item.width / 2,
+ "y": (item) => item.height / 2
+ },
+ hoverItem: "handle",
+ expectedHover: {
+ "firstItem": false,
+ "handle": true,
+ "secondItem": false
+ }
+ },
+ {
+ tag: "handleVerticalHoverOnTheBottom",
+ orientation: Qt.Vertical,
+ press: {
+ "x": (item) => item.width / 2,
+ "y": (item) => item.containmentMask.y + item.containmentMask.height - 1
+ },
+ hoverItem: "handle",
+ expectedHover: {
+ "firstItem": false,
+ "handle": true,
+ "secondItem": true
+ }
+ },
+ {
+ tag: "secondItemVerticalHover",
+ orientation: Qt.Vertical,
+ press: {
+ "x": (item) => item.width / 2,
+ "y": (item) => item.height / 2
+ },
+ hoverItem: "secondItem",
+ expectedHover: {
+ "firstItem": false,
+ "handle": false,
+ "secondItem": true
+ }
+ }
+ ]
+
+ return data
+ }
+
+ function test_handleContainmentMaskHovered(data) {
+ if ((Qt.platform.pluginName === "offscreen") || (Qt.platform.pluginName === "minimal"))
+ skip("Mouse hovering not functional on offscreen/minimal platforms")
+
+ const control = createTemporaryObject(splitViewHandleContainmentMaskComponent, testCase)
+ verify(control)
+ const splitView = control.splitView
+ splitView.orientation = data.orientation
+
+ const handle = findHandles(splitView)[0]
+ if (splitView.orientation === Qt.Vertical)
+ handle.height = handle.defaultHeight
+
+ verify(isPolishScheduled(splitView))
+ verify(waitForItemPolished(splitView))
+
+ const firstItem = control.mouseArea1
+ const secondItem = control.mouseArea2
+
+ verify(!firstItem.containsMouse)
+ verify(!secondItem.containsMouse)
+ verify(!handle.containsMouse)
+
+ const actualItem = {
+ "firstItem": firstItem,
+ "secondItem": secondItem,
+ "handle": handle
+ }[data.hoverItem]
+
+ const pressX = data.press.x(actualItem)
+ const pressY = data.press.y(actualItem)
+
+ // Test fails if we don't do two moves for some reason...
+ mouseMove(actualItem, pressX, pressY)
+ mouseMove(actualItem, pressX, pressY)
+
+ compare(firstItem.containsMouse, data.expectedHover.firstItem)
+ compare(secondItem.containsMouse, data.expectedHover.secondItem)
+ compare(handle.containsMouse, data.expectedHover.handle)
+
+ // Hide SplitView, then all children shouldn't be hovered
+ control.visible = false
+
+ verify(isPolishScheduled(splitView))
+ verify(waitForItemPolished(splitView))
+
+ verify(!control.containsMouse)
+ verify(!firstItem.containsMouse)
+ verify(!secondItem.containsMouse)
+ verify(!handle.containsMouse)
+ }
+
+ function test_hoveredPressed() {
+ if ((Qt.platform.pluginName === "offscreen") || (Qt.platform.pluginName === "minimal"))
+ skip("Mouse hovering not functional on offscreen/minimal platforms")
+
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase)
+ verify(control)
+ control.anchors.margins = 50
+
+ var handles = findHandles(control)
+ var firstHandle = handles[0]
+
+ var handleCenter = control.mapFromItem(firstHandle, firstHandle.width / 2, firstHandle.height / 2)
+ // Test fails if we don't do two moves for some reason...
+ mouseMove(control, handleCenter.x, handleCenter.y)
+ mouseMove(control, handleCenter.x, handleCenter.y)
+ verify(firstHandle.SplitHandle.hovered)
+ verify(!firstHandle.SplitHandle.pressed)
+
+ mousePress(control, handleCenter.x, handleCenter.y)
+ verify(firstHandle.SplitHandle.hovered)
+ verify(firstHandle.SplitHandle.pressed)
+
+ mouseRelease(control, handleCenter.x, handleCenter.y)
+ verify(firstHandle.SplitHandle.hovered)
+ verify(!firstHandle.SplitHandle.pressed)
+
+ mouseMove(control, 0, 0)
+ verify(!firstHandle.SplitHandle.hovered)
+ verify(!firstHandle.SplitHandle.pressed)
+ }
+
+ // Tests removing/adding/moving an item while it's pressed.
+ function test_modifyWhileHoveredPressed() {
+ if ((Qt.platform.pluginName === "offscreen") || (Qt.platform.pluginName === "minimal"))
+ skip("Mouse hovering not functional on offscreen/minimal platforms")
+
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase)
+ verify(control)
+ control.anchors.margins = 50
+
+ var handles = findHandles(control)
+ var firstHandle = handles[0]
+
+ // First, ensure that the handle is hovered + pressed.
+ var handleCenter = control.mapFromItem(firstHandle, firstHandle.width / 2, firstHandle.height / 2)
+ // Test fails if we don't do two moves for some reason...
+ mouseMove(control, handleCenter.x, handleCenter.y)
+ mouseMove(control, handleCenter.x, handleCenter.y)
+ verify(firstHandle.SplitHandle.hovered)
+ verify(!firstHandle.SplitHandle.pressed)
+
+ mousePress(control, handleCenter.x, handleCenter.y)
+ verify(firstHandle.SplitHandle.hovered)
+ verify(firstHandle.SplitHandle.pressed)
+
+ // Then, remove it by removing the first item.
+ control.removeItem(control.itemAt(0))
+ handles = findHandles(control)
+ firstHandle = null
+ compare(handles.length, 1)
+
+ // No handles should be hovered/pressed.
+ for (var i = 0; i < handles.length; ++i) {
+ var handle = handles[i]
+ verify(!handle.SplitHandle.hovered, "handle at index " + i + " should not be hovered")
+ verify(!handle.SplitHandle.pressed, "handle at index " + i + " should not be hovered")
+ }
+
+ mouseRelease(control, handleCenter.x, handleCenter.y)
+ }
+
+ Component {
+ id: settingsComponent
+ Settings {
+ id: settings
+ }
+ }
+
+ function test_saveAndRestoreState_data() {
+ return [
+ { tag: "Horizontal", orientation: Qt.Horizontal, propertyName: "preferredWidth", propertyValue: 123 },
+ { tag: "Vertical", orientation: Qt.Vertical, propertyName: "preferredHeight", propertyValue: 234 }
+ ]
+ }
+
+ function test_saveAndRestoreState(data) {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase, { orientation: data.orientation })
+ verify(control)
+ compare(control.orientation, data.orientation)
+
+ var lastItem = control.itemAt(2)
+ verify(lastItem)
+ lastItem.SplitView[data.propertyName] = data.propertyValue
+
+ // Save the state.
+ var settings = createTemporaryObject(settingsComponent, testCase)
+ verify(settings)
+ settings.setValue("splitView", control.saveState())
+
+ // Recreate the item to restore it to its "default" values.
+ control = createTemporaryObject(threeSizedItemsComponent, testCase)
+ lastItem = control.itemAt(2)
+ verify(lastItem)
+ compare(lastItem.SplitView[data.propertyName], -1)
+
+ settings = createTemporaryObject(settingsComponent, testCase)
+ verify(settings)
+
+ // Restore the state.
+ control.restoreState(settings.value("splitView"))
+ compare(lastItem.SplitView[data.propertyName], data.propertyValue)
+ }
+
+ function test_changePreferredSizeDuringLayout() {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase)
+ verify(control)
+
+ var firstItem = control.itemAt(0)
+ var secondItem = control.itemAt(1)
+ secondItem.widthChanged.connect(function() {
+ if (secondItem.width < 10)
+ firstItem.SplitView.preferredWidth = 50
+ })
+
+ // Change the size of the item so that a layout happens, but
+ // make the size small enough that the item's onWidthChanged handler gets triggered.
+ // The onWidthChanged handler will set the preferredWidth of another item during the
+ // layout, so we need to make sure the assignment isn't lost since we return early in that case.
+ secondItem.implicitWidth = 5
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(secondItem.width, 5)
+ compare(firstItem.width, 50)
+
+ // Now do the same for height.
+ control.orientation = Qt.Vertical
+ secondItem.heightChanged.connect(function() {
+ if (secondItem.height < 10)
+ firstItem.SplitView.preferredHeight = 50
+ })
+ // Get the polishes for the orientation out of the way so that they
+ // don't intefere with our results.
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+
+ secondItem.implicitHeight = 5
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+ compare(secondItem.height, 5)
+ compare(firstItem.height, 50)
+ }
+
+ // When the user drags a handle, we internally set preferredWidth/Height
+ // to reflect the new value. However, we also have to make sure that when
+ // we do so, it doesn't trigger a delayed layout. This is why we have
+ // m_ignoreNextDelayedLayoutRequest. This test checks that
+ // m_ignoreNextDelayedLayoutRequest doesn't interfere with any action from
+ // the user that results in a delayed layout.
+ function test_changePreferredSizeDuringLayoutWhileDraggingHandle() {
+ var control = createTemporaryObject(threeSizedItemsComponent, testCase)
+ verify(control)
+
+ var firstItem = control.itemAt(0)
+ var secondItem = control.itemAt(1)
+ firstItem.widthChanged.connect(function() {
+ if (firstItem.width === 0)
+ secondItem.SplitView.preferredWidth = 50
+ })
+
+ // Start dragging the handle.
+ var handles = findHandles(control)
+ var targetHandle = handles[0]
+ mousePress(targetHandle)
+ verify(control.resizing)
+ var localPos = testCase.mapToItem(targetHandle, 15, testCase.height / 2)
+
+ // Move the handle to the very left, so that the item's width becomes zero.
+ mouseMove(targetHandle, -100, targetHandle.height / 2)
+ verify(control.resizing)
+ compare(firstItem.width, 0)
+ compare(secondItem.SplitView.preferredWidth, 50)
+ compare(secondItem.width, 50)
+ mouseRelease(targetHandle, -100, targetHandle.height / 2, Qt.LeftButton)
+ verify(!control.resizing)
+ }
+
+ Component {
+ id: oneItemComponent
+
+ SplitView {
+ Item {}
+ }
+ }
+
+ // QTBUG-79270
+ function test_hideSplitViewWithOneItem() {
+ var control = createTemporaryObject(oneItemComponent, testCase)
+ verify(control)
+ // Shouldn't be an assertion failure.
+ control.visible = false
+ }
+
+ // QTBUG-79302: ensure that the Repeater's items are actually generated.
+ // test_dragHandle:repeater tests dragging behavior with a Repeater.
+ function test_repeater(data) {
+ var control = createTemporaryObject(repeaterSplitViewComponent, testCase)
+ verify(control)
+ compare(control.repeater.count, 3)
+ compare(control.contentChildren.length, 3)
+ }
+
+ Component {
+ id: hoverableChildrenSplitViewComponent
+
+ SplitView {
+ handle: handleComponent
+ anchors.fill: parent
+
+ MouseArea {
+ objectName: "mouseArea1"
+ hoverEnabled: true
+
+ SplitView.preferredWidth: 200
+ }
+ MouseArea {
+ objectName: "mouseArea2"
+ hoverEnabled: true
+ }
+ }
+ }
+
+ function test_hoverableChilden() {
+ if (Qt.platform.pluginName === "offscreen" || Qt.platform.pluginName === "minimal")
+ skip("Mouse hovering not functional on offscreen/minimal platforms")
+
+ var control = createTemporaryObject(hoverableChildrenSplitViewComponent, testCase)
+ verify(control)
+
+ verify(isPolishScheduled(control))
+ verify(waitForItemPolished(control))
+
+ // Move the mouse over the handle.
+ var handles = findHandles(control)
+ var targetHandle = handles[0]
+ // Test fails if we don't do two moves for some reason... QTBUG-94968
+ mouseMove(targetHandle, targetHandle.width / 2, targetHandle.height / 2)
+ mouseMove(targetHandle, targetHandle.width / 2, targetHandle.height / 2)
+ verify(targetHandle.SplitHandle.hovered)
+
+ // Move the mouse to the MouseArea on the left. The handle should no longer be hovered.
+ mouseMove(control, 100, control.height / 2)
+ verify(!targetHandle.SplitHandle.hovered)
+
+ // Move the mouse back over the handle.
+ mouseMove(targetHandle, targetHandle.width / 2, targetHandle.height / 2)
+ mouseMove(targetHandle, targetHandle.width / 2, targetHandle.height / 2)
+ verify(targetHandle.SplitHandle.hovered)
+
+ // Move the mouse to the MouseArea on the right. The handle should no longer be hovered.
+ mouseMove(control, control.width - 100, control.height / 2)
+ verify(!targetHandle.SplitHandle.hovered)
+ }
+
+ function test_touch() {
+ let control = createTemporaryObject(threeSizedItemsComponent, testCase)
+ verify(control)
+
+ let touch = touchEvent(control)
+
+ let handles = findHandles(control)
+ let firstHandle = handles[0]
+ let handleCenter = control.mapFromItem(firstHandle, firstHandle.width / 2, firstHandle.height / 2)
+ touch.press(0, control, handleCenter.x, handleCenter.y).commit()
+ verify(firstHandle.SplitHandle.pressed)
+
+ touch.move(0, control, handleCenter.x + 100, handleCenter.y).commit()
+ verify(firstHandle.SplitHandle.pressed)
+ let firstItem = control.itemAt(0)
+ compare(firstItem.width, 125)
+
+ touch.release(0, control, handleCenter.x + 100, handleCenter.y).commit()
+ verify(!firstHandle.SplitHandle.pressed)
+ compare(firstItem.width, 125)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_stackview.qml b/tests/auto/quickcontrols2/controls/data/tst_stackview.qml
new file mode 100644
index 0000000000..c925e68a36
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_stackview.qml
@@ -0,0 +1,1616 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "StackView"
+
+ Item { id: item }
+ Component { id: textField; TextField { } }
+ Component { id: component; Item { } }
+
+ Component {
+ id: stackView
+ StackView { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component { id: withRequired; Item { required property int i }}
+
+ function test_initialItem() {
+ var control1 = createTemporaryObject(stackView, testCase)
+ verify(control1)
+ compare(control1.currentItem, null)
+ control1.destroy()
+
+ var control2 = createTemporaryObject(stackView, testCase, {initialItem: item})
+ verify(control2)
+ compare(control2.currentItem, item)
+ control2.destroy()
+
+ var control3 = createTemporaryObject(stackView, testCase, {initialItem: component})
+ verify(control3)
+ verify(control3.currentItem)
+ control3.destroy()
+ }
+
+ function test_currentItem() {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: item})
+ verify(control)
+ compare(control.currentItem, item)
+ control.push(component)
+ verify(control.currentItem !== item)
+ control.pop(StackView.Immediate)
+ compare(control.currentItem, item)
+ }
+
+ function test_busy() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+ compare(control.busy, false)
+
+ var busyCount = 0
+ var busySpy = signalSpy.createObject(control, {target: control, signalName: "busyChanged"})
+ verify(busySpy.valid)
+
+ control.push(component)
+ compare(control.busy, false)
+ compare(busySpy.count, busyCount)
+
+ control.push(component)
+ compare(control.busy, true)
+ compare(busySpy.count, ++busyCount)
+ tryCompare(control, "busy", false)
+ compare(busySpy.count, ++busyCount)
+
+ control.replace(component)
+ compare(control.busy, true)
+ compare(busySpy.count, ++busyCount)
+ tryCompare(control, "busy", false)
+ compare(busySpy.count, ++busyCount)
+
+ control.pop()
+ compare(control.busy, true)
+ compare(busySpy.count, ++busyCount)
+ tryCompare(control, "busy", false)
+ compare(busySpy.count, ++busyCount)
+
+ control.pushEnter = null
+ control.pushExit = null
+
+ control.push(component)
+ compare(control.busy, false)
+ compare(busySpy.count, busyCount)
+
+ control.replaceEnter = null
+ control.replaceExit = null
+
+ control.replace(component)
+ compare(control.busy, false)
+ compare(busySpy.count, busyCount)
+
+ control.popEnter = null
+ control.popExit = null
+
+ control.pop()
+ compare(control.busy, false)
+ compare(busySpy.count, busyCount)
+ }
+
+ function test_status() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var item1 = component.createObject(control)
+ compare(item1.StackView.status, StackView.Inactive)
+ control.push(item1)
+ compare(item1.StackView.status, StackView.Active)
+
+ var item2 = component.createObject(control)
+ compare(item2.StackView.status, StackView.Inactive)
+ control.push(item2)
+ compare(item2.StackView.status, StackView.Activating)
+ compare(item1.StackView.status, StackView.Deactivating)
+ tryCompare(item2.StackView, "status", StackView.Active)
+ tryCompare(item1.StackView, "status", StackView.Inactive)
+
+ control.pop()
+ compare(item2.StackView.status, StackView.Deactivating)
+ compare(item1.StackView.status, StackView.Activating)
+ tryCompare(item2.StackView, "status", StackView.Inactive)
+ tryCompare(item1.StackView, "status", StackView.Active)
+ }
+
+ function test_index() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var item1 = component.createObject(control)
+ compare(item1.StackView.index, -1)
+ control.push(item1, StackView.Immediate)
+ compare(item1.StackView.index, 0)
+
+ var item2 = component.createObject(control)
+ compare(item2.StackView.index, -1)
+ control.push(item2, StackView.Immediate)
+ compare(item2.StackView.index, 1)
+ compare(item1.StackView.index, 0)
+
+ control.pop(StackView.Immediate)
+ compare(item2.StackView.index, -1)
+ compare(item1.StackView.index, 0)
+ }
+
+ function test_view() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var item1 = component.createObject(control)
+ compare(item1.StackView.view, null)
+ control.push(item1, StackView.Immediate)
+ compare(item1.StackView.view, control)
+
+ var item2 = component.createObject(control)
+ compare(item2.StackView.view, null)
+ control.push(item2, StackView.Immediate)
+ compare(item2.StackView.view, control)
+ compare(item1.StackView.view, control)
+
+ control.pop(StackView.Immediate)
+ compare(item2.StackView.view, null)
+ compare(item1.StackView.view, control)
+ }
+
+ function test_depth() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var depthChanges = 0
+ var emptyChanges = 0
+ var depthSpy = signalSpy.createObject(control, {target: control, signalName: "depthChanged"})
+ var emptySpy = signalSpy.createObject(control, {target: control, signalName: "emptyChanged"})
+ verify(depthSpy.valid)
+ verify(emptySpy.valid)
+ compare(control.depth, 0)
+ compare(control.empty, true)
+
+ control.push(item, StackView.Immediate)
+ compare(control.depth, 1)
+ compare(depthSpy.count, ++depthChanges)
+ compare(control.empty, false)
+ compare(emptySpy.count, ++emptyChanges)
+
+ control.clear()
+ compare(control.depth, 0)
+ compare(depthSpy.count, ++depthChanges)
+ compare(control.empty, true)
+ compare(emptySpy.count, ++emptyChanges)
+
+ control.push(component, StackView.Immediate)
+ compare(control.depth, 1)
+ compare(depthSpy.count, ++depthChanges)
+ compare(control.empty, false)
+ compare(emptySpy.count, ++emptyChanges)
+
+ control.push(component, StackView.Immediate)
+ compare(control.depth, 2)
+ compare(depthSpy.count, ++depthChanges)
+ compare(control.empty, false)
+ compare(emptySpy.count, emptyChanges)
+
+ control.replace(component, StackView.Immediate)
+ compare(control.depth, 2)
+ compare(depthSpy.count, depthChanges)
+ compare(control.empty, false)
+ compare(emptySpy.count, emptyChanges)
+
+ control.replace([component, component], StackView.Immediate)
+ compare(control.depth, 3)
+ compare(depthSpy.count, ++depthChanges)
+ compare(control.empty, false)
+ compare(emptySpy.count, emptyChanges)
+
+ control.pop(null, StackView.Immediate)
+ compare(control.depth, 1)
+ compare(depthSpy.count, ++depthChanges)
+ compare(control.empty, false)
+ compare(emptySpy.count, emptyChanges)
+
+ control.pop(StackView.Immediate) // ignored
+ compare(control.depth, 1)
+ compare(depthSpy.count, depthChanges)
+ compare(control.empty, false)
+ compare(emptySpy.count, emptyChanges)
+
+ control.clear()
+ compare(control.depth, 0)
+ compare(depthSpy.count, ++depthChanges)
+ compare(control.empty, true)
+ compare(emptySpy.count, ++emptyChanges)
+
+ control.clear()
+ compare(control.depth, 0)
+ compare(depthSpy.count, depthChanges)
+ compare(control.empty, true)
+ compare(emptySpy.count, emptyChanges)
+ }
+
+ function test_size() {
+ var container = createTemporaryObject(component, testCase, {width: 200, height: 200})
+ verify(container)
+ var control = stackView.createObject(container, {width: 100, height: 100})
+ verify(control)
+
+ container.width += 10
+ container.height += 20
+ compare(control.width, 100)
+ compare(control.height, 100)
+
+ control.push(item, StackView.Immediate)
+ compare(item.width, control.width)
+ compare(item.height, control.height)
+
+ control.width = 200
+ control.height = 200
+ compare(item.width, control.width)
+ compare(item.height, control.height)
+
+ control.clear()
+ control.width += 10
+ control.height += 20
+ verify(item.width !== control.width)
+ verify(item.height !== control.height)
+
+ control.push(item, StackView.Immediate)
+ compare(item.width, control.width)
+ compare(item.height, control.height)
+ }
+
+ function test_focus_data() {
+ return [
+ { tag: "true", focus: true, forceActiveFocus: false },
+ { tag: "false", focus: false, forceActiveFocus: false },
+ { tag: "forceActiveFocus()", focus: false, forceActiveFocus: true },
+ ]
+ }
+
+ function test_focus(data) {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: item, width: 200, height: 200})
+ verify(control)
+
+ if (data.focus)
+ control.focus = true
+ if (data.forceActiveFocus)
+ control.forceActiveFocus()
+ compare(control.activeFocus, data.focus || data.forceActiveFocus)
+
+ var page = control.push(textField, StackView.Immediate)
+ verify(page)
+ compare(control.currentItem, page)
+ compare(page.activeFocus, control.activeFocus)
+
+ control.pop(StackView.Immediate)
+ compare(control.currentItem, item)
+ compare(item.activeFocus, data.focus || data.forceActiveFocus)
+ verify(!page.activeFocus)
+ }
+
+ function test_find() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var item1 = component.createObject(control, {objectName: "1"})
+ var item2 = component.createObject(control, {objectName: "2"})
+ var item3 = component.createObject(control, {objectName: "3"})
+
+ control.push(item1, StackView.Immediate)
+ control.push(item2, StackView.Immediate)
+ control.push(item3, StackView.Immediate)
+
+ compare(control.find(function(item, index) { return index === 0 }), item1)
+ compare(control.find(function(item) { return item.objectName === "1" }), item1)
+
+ compare(control.find(function(item, index) { return index === 1 }), item2)
+ compare(control.find(function(item) { return item.objectName === "2" }), item2)
+
+ compare(control.find(function(item, index) { return index === 2 }), item3)
+ compare(control.find(function(item) { return item.objectName === "3" }), item3)
+
+ compare(control.find(function() { return false }), null)
+ compare(control.find(function() { return true }), item3)
+ }
+
+ function test_get() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ control.push([item, component, component], StackView.Immediate)
+
+ verify(control.get(0, StackView.DontLoad))
+ compare(control.get(0, StackView.ForceLoad), item)
+
+ verify(!control.get(1, StackView.DontLoad))
+
+ verify(control.get(2, StackView.DontLoad))
+ verify(control.get(2, StackView.ForceLoad))
+ }
+
+ function test_push() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ // missing arguments
+ ignoreWarning(/QML StackView: push: missing arguments/)
+ compare(control.push(), null)
+
+ // nothing to push
+ ignoreWarning(/QML StackView: push: nothing to push/)
+ compare(control.push(StackView.Immediate), null)
+
+ // unsupported type
+ ignoreWarning(/QML StackView: push: QtObject is not supported. Must be Item or Component./)
+ control.push(Qt.createQmlObject('import QtQml; QtObject { }', control))
+
+ // push(item)
+ var item1 = component.createObject(control, {objectName:"1"})
+ compare(control.push(item1, StackView.Immediate), item1)
+ compare(control.depth, 1)
+ compare(control.currentItem, item1)
+
+ // push([item])
+ var item2 = component.createObject(control, {objectName:"2"})
+ compare(control.push([item2], StackView.Immediate), item2)
+ compare(control.depth, 2)
+ compare(control.currentItem, item2)
+
+ // push(item, {properties})
+ var item3 = component.createObject(control)
+ compare(control.push(item3, {objectName:"3"}, StackView.Immediate), item3)
+ compare(item3.objectName, "3")
+ compare(control.depth, 3)
+ compare(control.currentItem, item3)
+
+ // push([item, {properties}])
+ var item4 = component.createObject(control)
+ compare(control.push([item4, {objectName:"4"}], StackView.Immediate), item4)
+ compare(item4.objectName, "4")
+ compare(control.depth, 4)
+ compare(control.currentItem, item4)
+
+ // push(component, {properties})
+ var item5 = control.push(component, {objectName:"5"}, StackView.Immediate)
+ compare(item5.objectName, "5")
+ compare(control.depth, 5)
+ compare(control.currentItem, item5)
+
+ // push([component, {properties}])
+ var item6 = control.push([component, {objectName:"6"}], StackView.Immediate)
+ compare(item6.objectName, "6")
+ compare(control.depth, 6)
+ compare(control.currentItem, item6)
+ }
+
+ // Escape special Regexp characters with a '\' (backslash) prefix so that \a str can be
+ // used as a Regexp pattern.
+ function escapeRegExp(str) {
+ // "$&" is the last matched substring
+ return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+ }
+
+ function test_pop() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var items = []
+ for (var i = 0; i < 7; ++i)
+ items.push(component.createObject(control, {objectName:i}))
+
+ control.push(items, StackView.Immediate)
+
+ ignoreWarning(/QML StackView: pop: too many arguments/)
+ compare(control.pop(1, 2, 3), null)
+
+ // pop the top most item
+ compare(control.pop(StackView.Immediate), items[6])
+ compare(control.depth, 6)
+ compare(control.currentItem, items[5])
+
+ // pop down to the current item
+ compare(control.pop(control.currentItem, StackView.Immediate), null)
+ compare(control.depth, 6)
+ compare(control.currentItem, items[5])
+
+ // pop down to (but not including) the Nth item
+ compare(control.pop(items[3], StackView.Immediate), items[5])
+ compare(control.depth, 4)
+ compare(control.currentItem, items[3])
+
+ // pop the top most item
+ compare(control.pop(undefined, StackView.Immediate), items[3])
+ compare(control.depth, 3)
+ compare(control.currentItem, items[2])
+
+ // don't pop non-existent item
+ ignoreWarning(new RegExp(".*QML StackView: pop: unknown argument: " + escapeRegExp(testCase.toString())))
+ compare(control.pop(testCase, StackView.Immediate), null)
+ compare(control.depth, 3)
+ compare(control.currentItem, items[2])
+
+ // pop all items down to (but not including) the 1st item
+ control.pop(null, StackView.Immediate)
+ compare(control.depth, 1)
+ compare(control.currentItem, items[0])
+ }
+
+ function test_replace() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ // missing arguments
+ ignoreWarning(/QML StackView: replace: missing arguments/)
+ compare(control.replace(), null)
+
+ // nothing to push
+ ignoreWarning(/QML StackView: replace: nothing to push/)
+ compare(control.replace(StackView.Immediate), null)
+
+ // unsupported type
+ ignoreWarning(/QML StackView: replace: QtObject is not supported. Must be Item or Component./)
+ compare(control.replace(Qt.createQmlObject('import QtQml; QtObject { }', control)), null)
+
+ // replace(item)
+ var item1 = component.createObject(control, {objectName:"1"})
+ compare(control.replace(item1, StackView.Immediate), item1)
+ compare(control.depth, 1)
+ compare(control.currentItem, item1)
+
+ // replace([item])
+ var item2 = component.createObject(control, {objectName:"2"})
+ compare(control.replace([item2], StackView.Immediate), item2)
+ compare(control.depth, 1)
+ compare(control.currentItem, item2)
+
+ // replace(item, {properties})
+ var item3 = component.createObject(control)
+ compare(control.replace(item3, {objectName:"3"}, StackView.Immediate), item3)
+ compare(item3.objectName, "3")
+ compare(control.depth, 1)
+ compare(control.currentItem, item3)
+
+ // replace([item, {properties}])
+ var item4 = component.createObject(control)
+ compare(control.replace([item4, {objectName:"4"}], StackView.Immediate), item4)
+ compare(item4.objectName, "4")
+ compare(control.depth, 1)
+ compare(control.currentItem, item4)
+
+ // replace(component, {properties})
+ var item5 = control.replace(component, {objectName:"5"}, StackView.Immediate)
+ compare(item5.objectName, "5")
+ compare(control.depth, 1)
+ compare(control.currentItem, item5)
+
+ // replace([component, {properties}])
+ var item6 = control.replace([component, {objectName:"6"}], StackView.Immediate)
+ compare(item6.objectName, "6")
+ compare(control.depth, 1)
+ compare(control.currentItem, item6)
+
+ // replace the topmost item
+ control.push(component)
+ compare(control.depth, 2)
+ var item7 = control.replace(control.get(1), component, StackView.Immediate)
+ compare(control.depth, 2)
+ compare(control.currentItem, item7)
+
+ // replace the item in the middle
+ control.push(component)
+ control.push(component)
+ control.push(component)
+ compare(control.depth, 5)
+ var item8 = control.replace(control.get(2), component, StackView.Immediate)
+ compare(control.depth, 3)
+ compare(control.currentItem, item8)
+ }
+
+ function test_clear() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ control.push(component, StackView.Immediate)
+
+ control.clear()
+ compare(control.depth, 0)
+ compare(control.busy, false)
+
+ control.push(component, StackView.Immediate)
+
+ control.clear(StackView.PopTransition)
+ compare(control.depth, 0)
+ compare(control.busy, true)
+ tryCompare(control, "busy", false)
+ }
+
+ function test_visibility_data() {
+ return [
+ {tag:"default transitions", properties: {}},
+ {tag:"null transitions", properties: {pushEnter: null, pushExit: null, popEnter: null, popExit: null}}
+ ]
+ }
+
+ function test_visibility(data) {
+ var control = createTemporaryObject(stackView, testCase, data.properties)
+ verify(control)
+
+ var item1 = component.createObject(control)
+ control.push(item1, StackView.Immediate)
+ verify(item1.visible)
+
+ var item2 = component.createObject(control)
+ control.push(item2)
+ tryCompare(item1, "visible", false)
+ verify(item2.visible)
+
+ control.pop()
+ verify(item1.visible)
+ tryCompare(item2, "visible", false)
+ }
+
+ Component {
+ id: transitionView
+ StackView {
+ property int popEnterRuns
+ property int popExitRuns
+ property int pushEnterRuns
+ property int pushExitRuns
+ property int replaceEnterRuns
+ property int replaceExitRuns
+ popEnter: Transition {
+ PauseAnimation { duration: 1 }
+ onRunningChanged: if (!running) ++popEnterRuns
+ }
+ popExit: Transition {
+ PauseAnimation { duration: 1 }
+ onRunningChanged: if (!running) ++popExitRuns
+ }
+ pushEnter: Transition {
+ PauseAnimation { duration: 1 }
+ onRunningChanged: if (!running) ++pushEnterRuns
+ }
+ pushExit: Transition {
+ PauseAnimation { duration: 1 }
+ onRunningChanged: if (!running) ++pushExitRuns
+ }
+ replaceEnter: Transition {
+ PauseAnimation { duration: 1 }
+ onRunningChanged: if (!running) ++replaceEnterRuns
+ }
+ replaceExit: Transition {
+ PauseAnimation { duration: 1 }
+ onRunningChanged: if (!running) ++replaceExitRuns
+ }
+ }
+ }
+
+ function test_transitions_data() {
+ return [
+ { tag: "undefined", operation: undefined,
+ pushEnterRuns: [1,2,2,2], pushExitRuns: [0,1,1,1], replaceEnterRuns: [0,0,1,1], replaceExitRuns: [0,0,1,1], popEnterRuns: [0,0,0,1], popExitRuns: [0,0,0,1] },
+ { tag: "immediate", operation: StackView.Immediate,
+ pushEnterRuns: [1,2,2,2], pushExitRuns: [0,1,1,1], replaceEnterRuns: [0,0,1,1], replaceExitRuns: [0,0,1,1], popEnterRuns: [0,0,0,1], popExitRuns: [0,0,0,1] },
+ { tag: "push", operation: StackView.PushTransition,
+ pushEnterRuns: [1,2,3,4], pushExitRuns: [0,1,2,3], replaceEnterRuns: [0,0,0,0], replaceExitRuns: [0,0,0,0], popEnterRuns: [0,0,0,0], popExitRuns: [0,0,0,0] },
+ { tag: "pop", operation: StackView.PopTransition,
+ pushEnterRuns: [0,0,0,0], pushExitRuns: [0,0,0,0], replaceEnterRuns: [0,0,0,0], replaceExitRuns: [0,0,0,0], popEnterRuns: [1,2,3,4], popExitRuns: [0,1,2,3] },
+ { tag: "replace", operation: StackView.ReplaceTransition,
+ pushEnterRuns: [0,0,0,0], pushExitRuns: [0,0,0,0], replaceEnterRuns: [1,2,3,4], replaceExitRuns: [0,1,2,3], popEnterRuns: [0,0,0,0], popExitRuns: [0,0,0,0] },
+ ]
+ }
+
+ function test_transitions(data) {
+ var control = createTemporaryObject(transitionView, testCase)
+ verify(control)
+
+ control.push(component, data.operation)
+ tryCompare(control, "busy", false)
+ compare(control.pushEnterRuns, data.pushEnterRuns[0])
+ compare(control.pushExitRuns, data.pushExitRuns[0])
+ compare(control.replaceEnterRuns, data.replaceEnterRuns[0])
+ compare(control.replaceExitRuns, data.replaceExitRuns[0])
+ compare(control.popEnterRuns, data.popEnterRuns[0])
+ compare(control.popExitRuns, data.popExitRuns[0])
+
+ control.push(component, data.operation)
+ tryCompare(control, "busy", false)
+ compare(control.pushEnterRuns, data.pushEnterRuns[1])
+ compare(control.pushExitRuns, data.pushExitRuns[1])
+ compare(control.replaceEnterRuns, data.replaceEnterRuns[1])
+ compare(control.replaceExitRuns, data.replaceExitRuns[1])
+ compare(control.popEnterRuns, data.popEnterRuns[1])
+ compare(control.popExitRuns, data.popExitRuns[1])
+
+ control.replace(component, data.operation)
+ tryCompare(control, "busy", false)
+ compare(control.pushEnterRuns, data.pushEnterRuns[2])
+ compare(control.pushExitRuns, data.pushExitRuns[2])
+ compare(control.replaceEnterRuns, data.replaceEnterRuns[2])
+ compare(control.replaceExitRuns, data.replaceExitRuns[2])
+ compare(control.popEnterRuns, data.popEnterRuns[2])
+ compare(control.popExitRuns, data.popExitRuns[2])
+
+ control.pop(data.operation)
+ tryCompare(control, "busy", false)
+ compare(control.pushEnterRuns, data.pushEnterRuns[3])
+ compare(control.pushExitRuns, data.pushExitRuns[3])
+ compare(control.replaceEnterRuns, data.replaceEnterRuns[3])
+ compare(control.replaceExitRuns, data.replaceExitRuns[3])
+ compare(control.popEnterRuns, data.popEnterRuns[3])
+ compare(control.popExitRuns, data.popExitRuns[3])
+ }
+
+ TestItem {
+ id: indestructibleItem
+ }
+
+ Component {
+ id: destructibleComponent
+ TestItem { }
+ }
+
+ function test_ownership_data() {
+ return [
+ {tag:"item, transition", arg: indestructibleItem, operation: StackView.Transition, destroyed: false},
+ {tag:"item, immediate", arg: indestructibleItem, operation: StackView.Immediate, destroyed: false},
+ {tag:"component, transition", arg: destructibleComponent, operation: StackView.Transition, destroyed: true},
+ {tag:"component, immediate", arg: destructibleComponent, operation: StackView.Immediate, destroyed: true},
+ {tag:"url, transition", arg: Qt.resolvedUrl("TestItem.qml"), operation: StackView.Transition, destroyed: true},
+ {tag:"url, immediate", arg: Qt.resolvedUrl("TestItem.qml"), operation: StackView.Immediate, destroyed: true}
+ ]
+ }
+
+ function test_ownership(data) {
+ var control = createTemporaryObject(transitionView, testCase, {initialItem: component})
+ verify(control)
+
+ // push-pop
+ control.push(data.arg, StackView.Immediate)
+ verify(control.currentItem)
+ verify(control.currentItem.hasOwnProperty("destroyedCallback"))
+ var destroyed = false
+ control.currentItem.destroyedCallback = function() { destroyed = true }
+ control.pop(data.operation)
+ tryCompare(control, "busy", false)
+ wait(0) // deferred delete
+ compare(destroyed, data.destroyed)
+
+ // push-replace
+ control.push(data.arg, StackView.Immediate)
+ verify(control.currentItem)
+ verify(control.currentItem.hasOwnProperty("destroyedCallback"))
+ destroyed = false
+ control.currentItem.destroyedCallback = function() { destroyed = true }
+ control.replace(component, data.operation)
+ tryCompare(control, "busy", false)
+ wait(0) // deferred delete
+ compare(destroyed, data.destroyed)
+ }
+
+ Component {
+ id: removeComponent
+
+ Item {
+ objectName: "removeItem"
+ StackView.onRemoved: destroy()
+ }
+ }
+
+ function test_destroyOnRemoved() {
+ var control = createTemporaryObject(stackView, testCase, { initialItem: component })
+ verify(control)
+
+ var item = removeComponent.createObject(control)
+ verify(item)
+
+ var removedSpy = signalSpy.createObject(control, { target: item.StackView, signalName: "removed" })
+ verify(removedSpy)
+ verify(removedSpy.valid)
+
+ var destructionSpy = signalSpy.createObject(control, { target: item.Component, signalName: "destruction" })
+ verify(destructionSpy)
+ verify(destructionSpy.valid)
+
+ // push-pop
+ control.push(item, StackView.Immediate)
+ compare(control.currentItem, item)
+ control.pop(StackView.Transition)
+ item = null
+ tryCompare(removedSpy, "count", 1)
+ tryCompare(destructionSpy, "count", 1)
+ compare(control.busy, false)
+
+ item = removeComponent.createObject(control)
+ verify(item)
+
+ removedSpy.target = item.StackView
+ verify(removedSpy.valid)
+
+ destructionSpy.target = item.Component
+ verify(destructionSpy.valid)
+
+ // push-replace
+ control.push(item, StackView.Immediate)
+ compare(control.currentItem, item)
+ control.replace(component, StackView.Transition)
+ item = null
+ tryCompare(removedSpy, "count", 2)
+ tryCompare(destructionSpy, "count", 2)
+ compare(control.busy, false)
+ }
+
+ function test_pushOnRemoved() {
+ var control = createTemporaryObject(stackView, testCase, { initialItem: component })
+ verify(control)
+
+ var item = control.push(component, StackView.Immediate)
+ verify(item)
+
+ item.StackView.onRemoved.connect(function() {
+ ignoreWarning(/.*QML StackView: cannot push while already in the process of completing a pop/)
+ control.push(component, StackView.Immediate)
+ })
+
+ // don't crash (QTBUG-62153)
+ control.pop(StackView.Immediate)
+ }
+
+ Component {
+ id: attachedItem
+ Item {
+ property int index: StackView.index
+ property StackView view: StackView.view
+ property int status: StackView.status
+ }
+ }
+
+ function test_attached() {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: attachedItem})
+
+ compare(control.get(0).index, 0)
+ compare(control.get(0).view, control)
+ compare(control.get(0).status, StackView.Active)
+
+ control.push(attachedItem, StackView.Immediate)
+
+ compare(control.get(0).index, 0)
+ compare(control.get(0).view, control)
+ compare(control.get(0).status, StackView.Inactive)
+
+ compare(control.get(1).index, 1)
+ compare(control.get(1).view, control)
+ compare(control.get(1).status, StackView.Active)
+
+ control.pop(StackView.Immediate)
+
+ compare(control.get(0).index, 0)
+ compare(control.get(0).view, control)
+ compare(control.get(0).status, StackView.Active)
+ }
+
+ Component {
+ id: testButton
+ Button {
+ property int clicks: 0
+ onClicked: ++clicks
+ }
+ }
+
+ function test_interaction() {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: testButton, width: testCase.width, height: testCase.height})
+ verify(control)
+
+ var firstButton = control.currentItem
+ verify(firstButton)
+
+ var firstClicks = 0
+ var secondClicks = 0
+ var thirdClicks = 0
+
+ // push - default transition
+ var secondButton = control.push(testButton)
+ compare(control.busy, true)
+ mouseClick(firstButton) // filtered while busy
+ mouseClick(secondButton) // filtered while busy
+ compare(firstButton.clicks, firstClicks)
+ compare(secondButton.clicks, secondClicks)
+ tryCompare(control, "busy", false)
+ mouseClick(secondButton)
+ compare(secondButton.clicks, ++secondClicks)
+
+ // replace - default transition
+ var thirdButton = control.replace(testButton)
+ compare(control.busy, true)
+ mouseClick(secondButton) // filtered while busy
+ mouseClick(thirdButton) // filtered while busy
+ compare(secondButton.clicks, secondClicks)
+ compare(thirdButton.clicks, thirdClicks)
+ tryCompare(control, "busy", false)
+ secondButton = null
+ secondClicks = 0
+ mouseClick(thirdButton)
+ compare(thirdButton.clicks, ++thirdClicks)
+
+ // pop - default transition
+ control.pop()
+ compare(control.busy, true)
+ mouseClick(firstButton) // filtered while busy
+ mouseClick(thirdButton) // filtered while busy
+ compare(firstButton.clicks, firstClicks)
+ compare(thirdButton.clicks, thirdClicks)
+ tryCompare(control, "busy", false)
+ thirdButton = null
+ thirdClicks = 0
+ mouseClick(firstButton)
+ compare(firstButton.clicks, ++firstClicks)
+
+ // push - immediate operation
+ secondButton = control.push(testButton, StackView.Immediate)
+ compare(control.busy, false)
+ mouseClick(secondButton)
+ compare(secondButton.clicks, ++secondClicks)
+
+ // replace - immediate operation
+ thirdButton = control.replace(testButton, StackView.Immediate)
+ compare(control.busy, false)
+ secondButton = null
+ secondClicks = 0
+ mouseClick(thirdButton)
+ compare(thirdButton.clicks, ++thirdClicks)
+
+ // pop - immediate operation
+ control.pop(StackView.Immediate)
+ compare(control.busy, false)
+ thirdButton = null
+ thirdClicks = 0
+ mouseClick(firstButton)
+ compare(firstButton.clicks, ++firstClicks)
+
+ // push - null transition
+ control.pushEnter = null
+ control.pushExit = null
+ secondButton = control.push(testButton)
+ compare(control.busy, false)
+ mouseClick(secondButton)
+ compare(secondButton.clicks, ++secondClicks)
+
+ // replace - null transition
+ control.replaceEnter = null
+ control.replaceExit = null
+ thirdButton = control.replace(testButton)
+ compare(control.busy, false)
+ secondButton = null
+ secondClicks = 0
+ mouseClick(thirdButton)
+ compare(thirdButton.clicks, ++thirdClicks)
+
+ // pop - null transition
+ control.popEnter = null
+ control.popExit = null
+ control.pop()
+ compare(control.busy, false)
+ thirdButton = null
+ thirdClicks = 0
+ mouseClick(firstButton)
+ compare(firstButton.clicks, ++firstClicks)
+ }
+
+ Component {
+ id: mouseArea
+ MouseArea {
+ property int presses: 0
+ property int releases: 0
+ property int clicks: 0
+ property int doubleClicks: 0
+ property int cancels: 0
+ onPressed: ++presses
+ onReleased: ++releases
+ onClicked: ++clicks
+ onDoubleClicked: ++doubleClicks
+ onCanceled: ++cancels
+ }
+ }
+
+ // QTBUG-50305
+ function test_events() {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: mouseArea, width: testCase.width, height: testCase.height})
+ verify(control)
+
+ var testItem = control.currentItem
+ verify(testItem)
+
+ testItem.doubleClicked.connect(function() {
+ control.push(mouseArea) // ungrab -> cancel
+ })
+
+ mouseDoubleClickSequence(testItem)
+ compare(testItem.presses, 2)
+ compare(testItem.releases, 2)
+ compare(testItem.clicks, 1)
+ compare(testItem.doubleClicks, 1)
+ compare(testItem.pressed, false)
+ compare(testItem.cancels, 0)
+ }
+
+ function test_ungrab() {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: mouseArea, width: testCase.width, height: testCase.height})
+ verify(control)
+
+ var testItem = control.currentItem
+ verify(testItem)
+
+ mousePress(testItem)
+ control.push(mouseArea)
+ tryCompare(control, "busy", false)
+ mouseRelease(testItem)
+
+ compare(testItem.presses, 1)
+ compare(testItem.releases, 0)
+ compare(testItem.clicks, 0)
+ compare(testItem.doubleClicks, 0)
+ compare(testItem.pressed, false)
+ compare(testItem.cancels, 1)
+ }
+
+ function test_failures() {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: component})
+ verify(control)
+
+ ignoreWarning("QQmlComponent: Component is not ready")
+ ignoreWarning(/QML StackView: push: .*non-existent.qml:-1 No such file or directory/)
+ control.push(Qt.resolvedUrl("non-existent.qml"))
+
+ ignoreWarning("QQmlComponent: Component is not ready")
+ ignoreWarning(/QML StackView: replace: .*non-existent.qml:-1 No such file or directory/)
+ control.replace(Qt.resolvedUrl("non-existent.qml"))
+
+ ignoreWarning(/QML StackView: push: invalid url: x:\/\/\[v\]/)
+ control.push("x://[v]")
+
+ ignoreWarning(/QML StackView: replace: invalid url: x:\/\/\[v\]/)
+ control.replace("x://[v]")
+
+ control.pop()
+ }
+
+ Component {
+ id: rectangle
+ Rectangle {
+ property color initialColor
+ Component.onCompleted: initialColor = color
+ }
+ }
+
+ function test_properties() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var rect = control.push(rectangle, {color: "#ff0000"})
+ compare(rect.color, "#ff0000")
+ compare(rect.initialColor, "#ff0000")
+ }
+
+ Component {
+ id: signalTest
+ Control {
+ id: ctrl
+ property SignalSpy activatedSpy: SignalSpy { target: ctrl.StackView; signalName: "activated" }
+ property SignalSpy activatingSpy: SignalSpy { target: ctrl.StackView; signalName: "activating" }
+ property SignalSpy deactivatedSpy: SignalSpy { target: ctrl.StackView; signalName: "deactivated" }
+ property SignalSpy deactivatingSpy: SignalSpy { target: ctrl.StackView; signalName: "deactivating" }
+ }
+ }
+
+ function test_signals() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var item1 = signalTest.createObject(control)
+ compare(item1.StackView.status, StackView.Inactive)
+ control.push(item1)
+ compare(item1.StackView.status, StackView.Active)
+ compare(item1.activatedSpy.count, 1)
+ compare(item1.activatingSpy.count, 1)
+ compare(item1.deactivatedSpy.count, 0)
+ compare(item1.deactivatingSpy.count, 0)
+
+ var item2 = signalTest.createObject(control)
+ compare(item2.StackView.status, StackView.Inactive)
+ control.push(item2)
+ compare(item2.StackView.status, StackView.Activating)
+ compare(item2.activatedSpy.count, 0)
+ compare(item2.activatingSpy.count, 1)
+ compare(item2.deactivatedSpy.count, 0)
+ compare(item2.deactivatingSpy.count, 0)
+ compare(item1.StackView.status, StackView.Deactivating)
+ compare(item1.activatedSpy.count, 1)
+ compare(item1.activatingSpy.count, 1)
+ compare(item1.deactivatedSpy.count, 0)
+ compare(item1.deactivatingSpy.count, 1)
+ tryCompare(item2.activatedSpy, "count", 1)
+ tryCompare(item1.deactivatedSpy, "count", 1)
+
+ control.pop()
+ compare(item2.StackView.status, StackView.Deactivating)
+ compare(item2.activatedSpy.count, 1)
+ compare(item2.activatingSpy.count, 1)
+ compare(item2.deactivatedSpy.count, 0)
+ compare(item2.deactivatingSpy.count, 1)
+ compare(item1.StackView.status, StackView.Activating)
+ compare(item1.activatedSpy.count, 1)
+ compare(item1.activatingSpy.count, 2)
+ compare(item1.deactivatedSpy.count, 1)
+ compare(item1.deactivatingSpy.count, 1)
+ tryCompare(item1.activatedSpy, "count", 2)
+ }
+
+ // QTBUG-56158
+ function test_repeatedPop() {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: component, width: testCase.width, height: testCase.height})
+ verify(control)
+
+ for (var i = 0; i < 12; ++i)
+ control.push(component)
+ tryCompare(control, "busy", false)
+
+ while (control.depth > 1) {
+ control.pop()
+ wait(50)
+ }
+ tryCompare(control, "busy", false)
+ }
+
+ function test_pushSameItem() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ control.push(item, StackView.Immediate)
+ compare(control.currentItem, item)
+ compare(control.depth, 1)
+
+ // Pushing the same Item should do nothing.
+ ignoreWarning(/QML StackView: push: nothing to push/)
+ control.push(item, StackView.Immediate)
+ compare(control.currentItem, item)
+ compare(control.depth, 1)
+
+ // Push a component so that it becomes current.
+ var current = control.push(component, StackView.Immediate)
+ compare(control.currentItem, current)
+ compare(control.depth, 2)
+
+ // Push a bunch of stuff. "item" is already in the stack, so it should be ignored.
+ current = control.push(component, item, StackView.Immediate)
+ verify(current !== item)
+ compare(control.currentItem, current)
+ compare(control.depth, 3)
+ }
+
+ function test_visible() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var item1 = component.createObject(control)
+ control.push(item1, StackView.Immediate)
+ compare(item1.visible, true)
+ compare(item1.StackView.visible, item1.visible)
+
+ var item2 = component.createObject(control)
+ control.push(item2, StackView.Immediate)
+ compare(item1.visible, false)
+ compare(item2.visible, true)
+ compare(item1.StackView.visible, false)
+ compare(item2.StackView.visible, true)
+
+ // keep explicitly visible
+ item2.StackView.visible = true
+ control.push(component, StackView.Immediate)
+ compare(item2.visible, true)
+ compare(item2.StackView.visible, true)
+
+ // show underneath
+ item1.StackView.visible = true
+ compare(item1.visible, true)
+ compare(item1.StackView.visible, true)
+
+ control.pop(StackView.Immediate)
+ compare(item2.visible, true)
+ compare(item2.StackView.visible, true)
+
+ // hide the top-most
+ item2.StackView.visible = false
+ compare(item2.visible, false)
+ compare(item2.StackView.visible, false)
+
+ // reset the top-most
+ item2.StackView.visible = undefined
+ compare(item2.visible, true)
+ compare(item2.StackView.visible, true)
+
+ // reset underneath
+ item1.StackView.visible = undefined
+ compare(item1.visible, false)
+ compare(item1.StackView.visible, false)
+
+ control.pop(StackView.Immediate)
+ compare(item1.visible, true)
+ compare(item1.StackView.visible, true)
+ }
+
+ function test_resolveInitialItem() {
+ var control = createTemporaryObject(stackView, testCase, {initialItem: "TestItem.qml"})
+ verify(control)
+ verify(control.currentItem)
+ }
+
+ function test_resolve() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+
+ var item = control.push("TestItem.qml")
+ compare(control.depth, 1)
+ verify(item)
+ }
+
+ // QTBUG-65084
+ function test_mouseArea() {
+ var ma = createTemporaryObject(mouseArea, testCase, {width: testCase.width, height: testCase.height})
+ verify(ma)
+
+ var control = stackView.createObject(ma, {width: testCase.width, height: testCase.height})
+ verify(control)
+
+ mousePress(control)
+ verify(ma.pressed)
+
+ mouseRelease(control)
+ verify(!ma.pressed)
+
+ var touch = touchEvent(control)
+ touch.press(0, control).commit()
+ verify(ma.pressed)
+
+ touch.release(0, control).commit()
+ verify(!ma.pressed)
+ }
+
+ // Separate function to ensure that the temporary value created to hold the return value of the Qt.createComponent()
+ // call is out of scope when the caller calls gc().
+ function stackViewFactory()
+ {
+ return createTemporaryObject(stackView, testCase, {initialItem: Qt.createComponent("TestItem.qml")})
+ }
+
+ function test_initalItemOwnership()
+ {
+ var control = stackViewFactory()
+ verify(control)
+ gc()
+ verify(control.initialItem)
+ }
+
+ // Need to use this specific structure in order to reproduce the crash.
+ Component {
+ id: clearUponDestructionContainerComponent
+
+ Item {
+ id: container
+ objectName: "container"
+
+ property alias control: stackView
+ property var onDestructionCallback
+
+ property Component clearUponDestructionComponent: Component {
+ id: clearUponDestructionComponent
+
+ Item {
+ objectName: "clearUponDestructionItem"
+ Component.onDestruction: container.onDestructionCallback(stackView)
+ }
+ }
+
+ StackView {
+ id: stackView
+ initialItem: Item {
+ objectName: "initialItem"
+ }
+ }
+ }
+ }
+
+ // QTBUG-80353
+ // Tests that calling clear() in Component.onDestruction in response to that
+ // item being removed (e.g. via an earlier call to clear()) results in a warning and not a crash.
+ function test_recursiveClearClear() {
+ let container = createTemporaryObject(clearUponDestructionContainerComponent, testCase,
+ { onDestructionCallback: function(stackView) { stackView.clear(StackView.Immediate) }})
+ verify(container)
+
+ let control = container.control
+ control.push(container.clearUponDestructionComponent, StackView.Immediate)
+
+ // Shouldn't crash.
+ ignoreWarning(/.*cannot clear while already in the process of completing a clear/)
+ control.clear(StackView.Immediate)
+ }
+
+ function test_recursivePopClear() {
+ let container = createTemporaryObject(clearUponDestructionContainerComponent, testCase,
+ { onDestructionCallback: function(stackView) { stackView.clear(StackView.Immediate) }})
+ verify(container)
+
+ let control = container.control
+ control.push(container.clearUponDestructionComponent, StackView.Immediate)
+
+ // Pop all items except the first, removing the second item we pushed in the process.
+ // Shouldn't crash.
+ ignoreWarning(/.*cannot clear while already in the process of completing a pop/)
+ control.pop(null, StackView.Immediate)
+ }
+
+ function test_recursivePopPop() {
+ let container = createTemporaryObject(clearUponDestructionContainerComponent, testCase,
+ { onDestructionCallback: function(stackView) { stackView.pop(null, StackView.Immediate) }})
+ verify(container)
+
+ let control = container.control
+ // Push an extra item so that we can call pop(null) and reproduce the conditions for the crash.
+ control.push(component, StackView.Immediate)
+ control.push(container.clearUponDestructionComponent, StackView.Immediate)
+
+ // Pop the top item, then pop down to the first item in response.
+ ignoreWarning(/.*cannot pop while already in the process of completing a pop/)
+ control.pop(StackView.Immediate)
+ }
+
+ function test_recursiveReplaceClear() {
+ let container = createTemporaryObject(clearUponDestructionContainerComponent, testCase,
+ { onDestructionCallback: function(stackView) { stackView.clear(StackView.Immediate) }})
+ verify(container)
+
+ let control = container.control
+ control.push(container.clearUponDestructionComponent, StackView.Immediate)
+
+ // Replace the top item, then clear in response.
+ ignoreWarning(/.*cannot clear while already in the process of completing a replace/)
+ control.replace(component, StackView.Immediate)
+ }
+
+ function test_recursiveClearReplace() {
+ let container = createTemporaryObject(clearUponDestructionContainerComponent, testCase,
+ { onDestructionCallback: function(stackView) { stackView.replace(component, StackView.Immediate) }})
+ verify(container)
+
+ let control = container.control
+ control.push(container.clearUponDestructionComponent, StackView.Immediate)
+
+ // Replace the top item, then clear in response.
+ ignoreWarning(/.*cannot replace while already in the process of completing a clear/)
+ control.clear(StackView.Immediate)
+ }
+
+ Component {
+ id: rectangleComponent
+ Rectangle {}
+ }
+
+ Component {
+ id: qtbug57267_StackViewComponent
+
+ StackView {
+ id: stackView
+
+ popEnter: Transition {
+ XAnimator { from: (stackView.mirrored ? -1 : 1) * -stackView.width; to: 0; duration: 400; easing.type: Easing.Linear }
+ }
+ popExit: Transition {
+ XAnimator { from: 0; to: (stackView.mirrored ? -1 : 1) * stackView.width; duration: 400; easing.type: Easing.Linear }
+ }
+ pushEnter: Transition {
+ XAnimator { from: (stackView.mirrored ? -1 : 1) * stackView.width; to: 0; duration: 400; easing.type: Easing.Linear }
+ }
+ pushExit: Transition {
+ XAnimator { from: 0; to: (stackView.mirrored ? -1 : 1) * -stackView.width; duration: 400; easing.type: Easing.Linear }
+ }
+ replaceEnter: Transition {
+ XAnimator { from: (stackView.mirrored ? -1 : 1) * stackView.width; to: 0; duration: 400; easing.type: Easing.Linear }
+ }
+ replaceExit: Transition {
+ XAnimator { from: 0; to: (stackView.mirrored ? -1 : 1) * -stackView.width; duration: 400; easing.type: Easing.Linear }
+ }
+ }
+ }
+
+ function test_qtbug57267() {
+ let redRect = createTemporaryObject(rectangleComponent, testCase, { color: "red" })
+ verify(redRect)
+ let blueRect = createTemporaryObject(rectangleComponent, testCase, { color: "blue" })
+ verify(blueRect)
+ let control = createTemporaryObject(qtbug57267_StackViewComponent, testCase,
+ { "anchors.fill": testCase, initialItem: redRect })
+ verify(control)
+
+ control.replace(blueRect)
+ compare(control.currentItem, blueRect)
+ compare(control.depth, 1)
+
+ // Wait until the animation has started and then interrupt it by pushing the redRect.
+ tryCompare(control, "busy", true)
+ control.replace(redRect)
+ // The blue rect shouldn't be visible since we replaced it and therefore interrupted its animation.
+ tryCompare(blueRect, "visible", false)
+ // We did the replace very early on, so the transition for the redRect should still be happening.
+ compare(control.busy, true)
+ compare(redRect.visible, true)
+
+ // After finishing the transition, the red rect should still be visible.
+ tryCompare(control, "busy", false)
+ compare(redRect.visible, true)
+ }
+
+ // QTBUG-84381
+ function test_clearAndPushAfterDepthChange() {
+ var control = createTemporaryObject(stackView, testCase, {
+ popEnter: null, popExit: null, pushEnter: null,
+ pushExit: null, replaceEnter: null, replaceExit: null
+ })
+ verify(control)
+
+ control.depthChanged.connect(function() {
+ if (control.depth === 2) {
+ // Shouldn't assert.
+ ignoreWarning(/.*QML StackView: cannot clear while already in the process of completing a push/)
+ control.clear()
+ // Shouldn't crash.
+ ignoreWarning(/.*QML StackView: cannot push while already in the process of completing a push/)
+ control.push(component)
+ }
+ })
+
+ control.push(component)
+ control.push(component)
+ }
+
+ // QTBUG-96966
+ // Generate a stack view with complex transition animations and make sure
+ // that the item's state is restored correctly when StackView.Immediate
+ // operation is used
+ Component {
+ id: qtbug96966_stackViewComponent
+ StackView {
+ id: qtbug96966_stackView
+ pushEnter: Transition {
+ ParallelAnimation {
+ NumberAnimation {
+ property: "x"
+ from: qtbug96966_stackView.width
+ to: 0
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ NumberAnimation {
+ property: "opacity"
+ from: 0
+ to: 1
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ }
+ }
+ pushExit: Transition {
+ ParallelAnimation {
+ NumberAnimation {
+ property: "x"
+ from: 0
+ to: -qtbug96966_stackView.width
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ NumberAnimation {
+ property: "opacity"
+ from: 1
+ to: 0
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ }
+ }
+
+ popExit: Transition {
+ ParallelAnimation {
+ NumberAnimation {
+ property: "x"
+ from: 0
+ to: qtbug96966_stackView.width
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ NumberAnimation {
+ property: "opacity"
+ from: 1
+ to: 0
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ }
+ }
+ popEnter: Transition {
+ ParallelAnimation {
+ NumberAnimation {
+ property: "x"
+ from: -qtbug96966_stackView.width
+ to: 0
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ NumberAnimation {
+ property: "opacity"
+ from: 0
+ to: 1
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ }
+ }
+ }
+ }
+
+ function test_immediateTransitionPropertiesApplied() {
+ let redRect = createTemporaryObject(rectangleComponent, testCase, { color: "red" })
+ verify(redRect)
+ let blueRect = createTemporaryObject(rectangleComponent, testCase, { color: "blue" })
+ verify(blueRect)
+ let control = createTemporaryObject(qtbug96966_stackViewComponent, testCase,
+ { "anchors.fill": testCase, initialItem: redRect })
+ verify(control)
+
+ control.push(blueRect)
+ // wait until the animation is finished
+ tryCompare(control, "busy", true)
+ tryCompare(control, "busy", false)
+ // Now the red rectangle should become invisible and move to the left
+ compare(redRect.x, -200) // the window width is 200
+ compare(redRect.opacity, 0)
+
+ control.pop(null, StackView.Immediate)
+ // The red rectangle immediately restores its initial state (both
+ // position and opacity).
+ compare(redRect.x, 0)
+ compare(redRect.opacity, 1)
+ // Blue rectangle is moved to the right and becomes invisible
+ compare(blueRect.x, 200)
+ compare(blueRect.opacity, 0)
+ }
+
+ function test_requiredProperties() {
+ var control = createTemporaryObject(stackView, testCase)
+ verify(control)
+ let failedPush = control.push(withRequired)
+ compare(failedPush, null);
+ control.push(withRequired, {"i": 42})
+ verify(control.currentItem.i === 42)
+ control.pop(StackView.Immediate)
+ }
+
+ // QTBUG-104491
+ // Tests that correctly set a busy state when the transition is stolen(canceled)
+ function test_continuousTransition() {
+ let redRect = createTemporaryObject(rectangleComponent, testCase, { color: "red" })
+ verify(redRect)
+ let blueRect = createTemporaryObject(rectangleComponent, testCase, { color: "blue" })
+ verify(blueRect)
+ let greenRect = createTemporaryObject(rectangleComponent, testCase, { color: "green" })
+ verify(greenRect)
+ let yellowRect = createTemporaryObject(rectangleComponent, testCase, { color: "yellow" })
+ verify(yellowRect)
+ let control = createTemporaryObject(qtbug96966_stackViewComponent, testCase,
+ { "anchors.fill": testCase, initialItem: redRect })
+ verify(control)
+
+ control.push(blueRect)
+ control.pop()
+ tryCompare(control, "busy", true)
+ tryCompare(control, "busy", false)
+
+ control.push(blueRect)
+ control.push(greenRect)
+ control.push(yellowRect)
+ tryCompare(control, "busy", true)
+ tryCompare(control, "busy", false)
+
+ control.pop()
+ control.pop()
+ control.pop()
+ tryCompare(control, "busy", true)
+ tryCompare(control, "busy", false)
+ }
+
+ Component {
+ id: noProperties
+ Item {}
+ }
+
+ Component {
+ id: invalidProperties
+
+ StackView {
+ anchors.fill: parent
+ }
+ }
+
+ function test_invalidProperties() {
+ let control = createTemporaryObject(invalidProperties, testCase)
+ verify(control)
+ verify(control.empty)
+ ignoreWarning(/Cannot resolve property "unknownProperty.test"/)
+ control.push(noProperties, { "unknownProperty.test": "crashes" })
+ verify(!control.empty)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_swipedelegate.qml b/tests/auto/quickcontrols2/controls/data/tst_swipedelegate.qml
new file mode 100644
index 0000000000..42b23b3614
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_swipedelegate.qml
@@ -0,0 +1,1746 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "SwipeDelegate"
+
+ readonly property int dragDistance: Math.max(20, Qt.styleHints.startDragDistance + 5)
+
+ Component {
+ id: backgroundFillComponent
+ SwipeDelegate {
+ background: Item { anchors.fill: parent }
+ }
+ }
+
+ Component {
+ id: backgroundCenterInComponent
+ SwipeDelegate {
+ background: Item { anchors.centerIn: parent }
+ }
+ }
+
+ Component {
+ id: backgroundLeftComponent
+ SwipeDelegate {
+ background: Item { anchors.left: parent.left }
+ }
+ }
+
+ Component {
+ id: backgroundRightComponent
+ SwipeDelegate {
+ background: Item { anchors.right: parent.right }
+ }
+ }
+
+ Component {
+ id: contentItemFillComponent
+ SwipeDelegate {
+ contentItem: Item { anchors.fill: parent }
+ }
+ }
+
+ Component {
+ id: contentItemCenterInComponent
+ SwipeDelegate {
+ contentItem: Item { anchors.centerIn: parent }
+ }
+ }
+
+ Component {
+ id: contentItemLeftComponent
+ SwipeDelegate {
+ contentItem: Item { anchors.left: parent.left }
+ }
+ }
+
+ Component {
+ id: contentItemRightComponent
+ SwipeDelegate {
+ contentItem: Item { anchors.right: parent.right }
+ }
+ }
+
+ function test_horizontalAnchors_data() {
+ return [
+ { tag: "background, fill", component: backgroundFillComponent, itemName: "background", warningLocation: ":69:25" },
+ { tag: "background, centerIn", component: backgroundCenterInComponent, itemName: "background", warningLocation: ":76:25" },
+ { tag: "background, left", component: backgroundLeftComponent, itemName: "background", warningLocation: ":83:25" },
+ { tag: "background, right", component: backgroundRightComponent, itemName: "background", warningLocation: ":90:25" },
+ { tag: "contentItem, fill", component: contentItemFillComponent, itemName: "contentItem", warningLocation: ":97:26" },
+ { tag: "contentItem, centerIn", component: contentItemCenterInComponent, itemName: "contentItem", warningLocation: ":104:26" },
+ { tag: "contentItem, left", component: contentItemLeftComponent, itemName: "contentItem", warningLocation: ":111:26" },
+ { tag: "contentItem, right", component: contentItemRightComponent, itemName: "contentItem", warningLocation: ":118:26" }
+ ];
+ }
+
+ function test_horizontalAnchors(data) {
+ var warningMessage = Qt.resolvedUrl("tst_swipedelegate.qml") + data.warningLocation
+ + ": QML QQuickItem: SwipeDelegate: cannot use horizontal anchors with " + data.itemName + "; unable to layout the item."
+
+ ignoreWarning(warningMessage);
+
+ var control = createTemporaryObject(data.component, testCase);
+ verify(control.contentItem);
+ }
+
+ Component {
+ id: greenLeftComponent
+
+ Rectangle {
+ objectName: "leftItem"
+ anchors.fill: parent
+ color: "green"
+ }
+ }
+
+ Component {
+ id: redRightComponent
+
+ Rectangle {
+ objectName: "rightItem"
+ anchors.fill: parent
+ color: "red"
+ }
+ }
+
+ Component {
+ id: swipeDelegateComponent
+
+ SwipeDelegate {
+ id: swipeDelegate
+ text: "SwipeDelegate"
+ width: 150
+ swipe.left: greenLeftComponent
+ swipe.right: redRightComponent
+ }
+ }
+
+ Component {
+ id: signalSpyComponent
+
+ SignalSpy {}
+ }
+
+ Component {
+ id: itemComponent
+
+ Item {}
+ }
+
+ // Assumes that the delegate is smaller than the width of the control.
+ function swipe(control, from, to) {
+ // Sanity check.
+ compare(control.swipe.position, from);
+
+ var distance = (to - from) * control.width;
+
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width / 2 + distance, control.height / 2);
+ mouseRelease(control, control.width / 2 + distance, control.height / 2, Qt.LeftButton);
+ compare(control.swipe.position, to, "Expected swipe.position to be " + to
+ + " after swiping from " + from + ", but it's " + control.swipe.position);
+
+ if (control.swipe.position === -1.0) {
+ if (control.swipe.right)
+ verify(control.swipe.rightItem);
+ else if (control.swipe.behind)
+ verify(control.swipe.behindItem);
+ } else if (control.swipe.position === 1.0) {
+ if (control.swipe.left)
+ verify(control.swipe.leftItem);
+ else if (control.swipe.behind)
+ verify(control.swipe.behindItem);
+ }
+ }
+
+ function test_settingDelegates() {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase);
+ verify(control);
+
+ ignoreWarning(/QML SwipeDelegate: cannot set both behind and left\/right properties/)
+ control.swipe.behind = itemComponent;
+
+ // Shouldn't be any warnings when unsetting delegates.
+ control.swipe.left = null;
+ compare(control.swipe.leftItem, null);
+
+ // right is still set.
+ ignoreWarning(/QML SwipeDelegate: cannot set both behind and left\/right properties/)
+ control.swipe.behind = itemComponent;
+
+ control.swipe.right = null;
+ compare(control.swipe.rightItem, null);
+
+ control.swipe.behind = itemComponent;
+
+ ignoreWarning(/QML SwipeDelegate: cannot set both behind and left\/right properties/)
+ control.swipe.left = itemComponent;
+
+ ignoreWarning(/QML SwipeDelegate: cannot set both behind and left\/right properties/)
+ control.swipe.right = itemComponent;
+
+ control.swipe.behind = null;
+ control.swipe.left = greenLeftComponent;
+ control.swipe.right = redRightComponent;
+
+ // Test that the user is warned when attempting to set or unset left or
+ // right item while they're exposed.
+ // First, try the left item.
+ swipe(control, 0.0, 1.0);
+
+ var oldLeft = control.swipe.left;
+ var oldLeftItem = control.swipe.leftItem;
+ ignoreWarning(/QML SwipeDelegate: left\/right\/behind properties may only be set when swipe.position is 0/)
+ control.swipe.left = null;
+ compare(control.swipe.left, oldLeft);
+ compare(control.swipe.leftItem, oldLeftItem);
+
+ // Try the same thing with the right item.
+ swipe(control, 1.0, -1.0);
+
+ var oldRight = control.swipe.right;
+ var oldRightItem = control.swipe.rightItem;
+ ignoreWarning(/QML SwipeDelegate: left\/right\/behind properties may only be set when swipe.position is 0/)
+ control.swipe.right = null;
+ compare(control.swipe.right, oldRight);
+ compare(control.swipe.rightItem, oldRightItem);
+
+ // Return to the default position.
+ swipe(control, -1.0, 0.0);
+
+ tryCompare(control.background, "x", 0, 1000);
+
+ // Try the same thing with the behind item.
+ control.swipe.left = null;
+ verify(!control.swipe.left);
+ verify(!control.swipe.leftItem);
+ control.swipe.right = null;
+ verify(!control.swipe.right);
+ verify(!control.swipe.rightItem);
+ control.swipe.behind = greenLeftComponent;
+ verify(control.swipe.behind);
+ verify(!control.swipe.behindItem);
+
+ swipe(control, 0.0, 1.0);
+
+ var oldBehind = control.swipe.behind;
+ var oldBehindItem = control.swipe.behindItem;
+ ignoreWarning(/QML SwipeDelegate: left\/right\/behind properties may only be set when swipe.position is 0/)
+ control.swipe.behind = null;
+ compare(control.swipe.behind, oldBehind);
+ compare(control.swipe.behindItem, oldBehindItem);
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase);
+ verify(control);
+
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset);
+ compare(control.swipe.position, 0);
+ verify(!control.pressed);
+ verify(!control.swipe.complete);
+ }
+
+ SignalSequenceSpy {
+ id: mouseSignalSequenceSpy
+ signals: ["pressed", "released", "canceled", "clicked", "doubleClicked", "pressedChanged", "pressAndHold"]
+ }
+
+ function test_swipe() {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase);
+ verify(control);
+
+ var overDragDistance = Math.round(dragDistance * 1.1);
+
+ var completedSpy = signalSpyComponent.createObject(control, { target: control.swipe, signalName: "completed" });
+ verify(completedSpy);
+ verify(completedSpy.valid);
+
+ var openedSpy = signalSpyComponent.createObject(control, { target: control.swipe, signalName: "opened" });
+ verify(openedSpy);
+ verify(openedSpy.valid);
+
+ var closedSpy = signalSpyComponent.createObject(control, { target: control.swipe, signalName: "closed" });
+ verify(closedSpy);
+ verify(closedSpy.valid);
+
+ mouseSignalSequenceSpy.target = control;
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed"];
+ mousePress(control, control.width / 2, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 0.0);
+ verify(!control.swipe.complete);
+ compare(completedSpy.count, 0);
+ compare(openedSpy.count, 0);
+ compare(closedSpy.count, 0);
+ verify(mouseSignalSequenceSpy.success);
+ verify(!control.swipe.leftItem);
+ verify(!control.swipe.rightItem);
+
+ // Drag to the right so that leftItem is created and visible.
+ mouseMove(control, control.width / 2 + overDragDistance, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, overDragDistance / control.width);
+ verify(!control.swipe.complete);
+ compare(completedSpy.count, 0);
+ compare(openedSpy.count, 0);
+ compare(closedSpy.count, 0);
+ verify(control.swipe.leftItem);
+ verify(control.swipe.leftItem.visible);
+ compare(control.swipe.leftItem.parent, control);
+ compare(control.swipe.leftItem.objectName, "leftItem");
+ verify(!control.swipe.rightItem);
+
+ // Go back to 0.
+ mouseMove(control, control.width / 2, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 0.0);
+ verify(!control.swipe.complete);
+ compare(completedSpy.count, 0);
+ compare(openedSpy.count, 0);
+ compare(closedSpy.count, 0);
+ verify(control.swipe.leftItem);
+ verify(control.swipe.leftItem.visible);
+ compare(control.swipe.leftItem.parent, control);
+ compare(control.swipe.leftItem.objectName, "leftItem");
+ verify(!control.swipe.rightItem);
+
+ // Try the other direction. The right item should be created and visible,
+ // and the left item should be hidden.
+ mouseMove(control, control.width / 2 - overDragDistance, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, -overDragDistance / control.width);
+ verify(!control.swipe.complete);
+ compare(completedSpy.count, 0);
+ compare(openedSpy.count, 0);
+ compare(closedSpy.count, 0);
+ verify(control.swipe.leftItem);
+ verify(!control.swipe.leftItem.visible);
+ verify(control.swipe.rightItem);
+ verify(control.swipe.rightItem.visible);
+ compare(control.swipe.rightItem.parent, control);
+ compare(control.swipe.rightItem.objectName, "rightItem");
+
+ // Now release outside the right edge of the control.
+ mouseMove(control, control.width * 1.1, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 0.6);
+ verify(!control.swipe.complete);
+ compare(completedSpy.count, 0);
+ compare(openedSpy.count, 0);
+ compare(closedSpy.count, 0);
+ verify(control.swipe.leftItem);
+ verify(control.swipe.leftItem.visible);
+ verify(control.swipe.rightItem);
+ verify(!control.swipe.rightItem.visible);
+
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }], "canceled"];
+ mouseRelease(control, control.width / 2, control.height / 2);
+ verify(!control.pressed);
+ tryCompare(control.swipe, "position", 1.0);
+ tryCompare(control.swipe, "complete", true);
+ compare(completedSpy.count, 1);
+ compare(openedSpy.count, 1);
+ compare(closedSpy.count, 0);
+ verify(mouseSignalSequenceSpy.success);
+ verify(control.swipe.leftItem);
+ verify(control.swipe.leftItem.visible);
+ verify(control.swipe.rightItem);
+ verify(!control.swipe.rightItem.visible);
+ tryCompare(control.contentItem, "x", control.width + control.leftPadding);
+
+ // Swiping from the right and releasing early should return position to 1.0.
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed"];
+ mousePress(control, control.width / 2, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 1.0);
+ // complete should still be true, because we haven't moved yet, and hence
+ // haven't started grabbing behind's mouse events.
+ verify(control.swipe.complete);
+ compare(completedSpy.count, 1);
+ compare(openedSpy.count, 1);
+ compare(closedSpy.count, 0);
+ verify(mouseSignalSequenceSpy.success);
+
+ mouseMove(control, control.width / 2 - overDragDistance, control.height / 2);
+ verify(control.pressed);
+ verify(!control.swipe.complete);
+ compare(completedSpy.count, 1);
+ compare(openedSpy.count, 1);
+ compare(closedSpy.count, 0);
+ compare(control.swipe.position, 1.0 - overDragDistance / control.width);
+
+ // Since we went over the drag distance, we should expect canceled() to be emitted.
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }], "canceled"];
+ mouseRelease(control, control.width * 0.4, control.height / 2);
+ verify(!control.pressed);
+ tryCompare(control.swipe, "position", 1.0);
+ tryCompare(control.swipe, "complete", true);
+ compare(completedSpy.count, 2);
+ compare(openedSpy.count, 2);
+ compare(closedSpy.count, 0);
+ verify(mouseSignalSequenceSpy.success);
+ tryCompare(control.contentItem, "x", control.width + control.leftPadding);
+
+ // Swiping from the right and releasing should return contents to default position.
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed"];
+ mousePress(control, control.width / 2, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 1.0);
+ verify(control.swipe.complete);
+ compare(completedSpy.count, 2);
+ compare(openedSpy.count, 2);
+ compare(closedSpy.count, 0);
+ verify(mouseSignalSequenceSpy.success);
+
+ mouseMove(control, control.width * -0.1, control.height / 2);
+ verify(control.pressed);
+ verify(!control.swipe.complete);
+ compare(completedSpy.count, 2);
+ compare(openedSpy.count, 2);
+ compare(closedSpy.count, 0);
+ compare(control.swipe.position, 0.4);
+
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }], "canceled"];
+ mouseRelease(control, control.width * -0.1, control.height / 2);
+ verify(!control.pressed);
+ tryCompare(control.swipe, "position", 0.0);
+ verify(!control.swipe.complete);
+ compare(completedSpy.count, 2);
+ compare(openedSpy.count, 2);
+ tryCompare(closedSpy, "count", 1);
+ verify(mouseSignalSequenceSpy.success);
+ tryCompare(control.contentItem, "x", control.leftPadding);
+ }
+
+ function test_swipeVelocity_data() {
+ return [
+ { tag: "positive velocity", direction: 1 },
+ { tag: "negative velocity", direction: -1 }
+ ];
+ }
+
+ function test_swipeVelocity(data) {
+ skip("QTBUG-52003");
+
+ var control = createTemporaryObject(swipeDelegateComponent, testCase);
+ verify(control);
+
+ var distance = Math.round(dragDistance * 1.1);
+ if (distance >= control.width / 2)
+ skip("This test requires a startDragDistance that is less than half the width of the control");
+
+ distance *= data.direction;
+
+ mouseSignalSequenceSpy.target = control;
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed"];
+ mousePress(control, control.width / 2, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 0.0);
+ verify(!control.swipe.complete);
+ verify(mouseSignalSequenceSpy.success);
+ verify(!control.swipe.leftItem);
+ verify(!control.swipe.rightItem);
+
+ // Swipe quickly to the side over a distance that is longer than the drag threshold,
+ // quicker than the expose velocity threshold, but shorter than the halfway mark.
+ mouseMove(control, control.width / 2 + distance, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, distance / control.width);
+ verify(control.swipe.position < 0.5);
+ verify(!control.swipe.complete);
+
+ var expectedVisibleItem;
+ var expectedVisibleObjectName;
+ var expectedHiddenItem;
+ var expectedContentItemX;
+ if (distance > 0) {
+ expectedVisibleObjectName = "leftItem";
+ expectedVisibleItem = control.swipe.leftItem;
+ expectedHiddenItem = control.swipe.rightItem;
+ expectedContentItemX = control.width + control.leftPadding;
+ } else {
+ expectedVisibleObjectName = "rightItem";
+ expectedVisibleItem = control.swipe.rightItem;
+ expectedHiddenItem = control.swipe.leftItem;
+ expectedContentItemX = -control.width + control.leftPadding;
+ }
+ verify(expectedVisibleItem);
+ verify(expectedVisibleItem.visible);
+ compare(expectedVisibleItem.parent, control);
+ compare(expectedVisibleItem.objectName, expectedVisibleObjectName);
+ verify(!expectedHiddenItem);
+
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }], "released", "clicked"];
+ // Add a delay to ensure that the release event doesn't happen too quickly,
+ // and hence that the second timestamp isn't zero (can happen with e.g. release builds).
+ mouseRelease(control, control.width / 2 + distance, control.height / 2, Qt.LeftButton, Qt.NoModifier, 30);
+ verify(!control.pressed);
+ compare(control.swipe.position, data.direction);
+ verify(control.swipe.complete);
+ verify(mouseSignalSequenceSpy.success);
+ verify(expectedVisibleItem);
+ verify(expectedVisibleItem.visible);
+ verify(!expectedHiddenItem);
+ tryCompare(control.contentItem, "x", expectedContentItemX);
+ }
+
+ Component {
+ id: swipeDelegateWithButtonComponent
+ SwipeDelegate {
+ text: "SwipeDelegate"
+ width: 150
+ swipe.right: Button {
+ width: parent.width
+ height: parent.height
+ text: "Boo!"
+ }
+ }
+ }
+
+ function test_eventsToLeftAndRight() {
+ var control = createTemporaryObject(swipeDelegateWithButtonComponent, testCase);
+ verify(control);
+
+ var closedSpy = signalSpyComponent.createObject(control, { target: control.swipe, signalName: "closed" });
+ verify(closedSpy);
+ verify(closedSpy.valid);
+
+ // The button should be pressed instead of the SwipeDelegate.
+ mouseDrag(control, control.width / 2, 0, -control.width, 0);
+ // Mouse has been released by this stage.
+ verify(!control.pressed);
+ compare(control.swipe.position, -1.0);
+ verify(control.swipe.rightItem);
+ verify(control.swipe.rightItem.visible);
+ compare(control.swipe.rightItem.parent, control);
+
+ var buttonPressedSpy = signalSpyComponent.createObject(control, { target: control.swipe.rightItem, signalName: "pressed" });
+ verify(buttonPressedSpy);
+ verify(buttonPressedSpy.valid);
+ var buttonReleasedSpy = signalSpyComponent.createObject(control, { target: control.swipe.rightItem, signalName: "released" });
+ verify(buttonReleasedSpy);
+ verify(buttonReleasedSpy.valid);
+ var buttonClickedSpy = signalSpyComponent.createObject(control, { target: control.swipe.rightItem, signalName: "clicked" });
+ verify(buttonClickedSpy);
+ verify(buttonClickedSpy.valid);
+
+ // Now press the button.
+ mousePress(control, control.width / 2, control.height / 2);
+ verify(!control.pressed);
+ var button = control.swipe.rightItem;
+ verify(button.pressed);
+ compare(buttonPressedSpy.count, 1);
+ compare(buttonReleasedSpy.count, 0);
+ compare(buttonClickedSpy.count, 0);
+
+ mouseRelease(control, control.width / 2, control.height / 2);
+ verify(!button.pressed);
+ compare(buttonPressedSpy.count, 1);
+ compare(buttonReleasedSpy.count, 1);
+ compare(buttonClickedSpy.count, 1);
+
+ // Returning back to a position of 0 and pressing on the control should
+ // result in the control being pressed.
+ mouseDrag(control, control.width / 2, 0, control.width * 0.6, 0);
+ tryCompare(closedSpy, "count", 1);
+ compare(control.swipe.position, 0);
+ mousePress(control, control.width / 2, control.height / 2);
+ verify(control.pressed);
+ verify(!button.pressed);
+ mouseRelease(control, control.width / 2, control.height / 2);
+ verify(!control.pressed);
+ }
+
+ function test_mouseButtons() {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase);
+ verify(control);
+
+ // click
+ mouseSignalSequenceSpy.target = control;
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed"];
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ compare(control.pressed, true);
+
+ verify(mouseSignalSequenceSpy.success);
+
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": false }], "released", "clicked"];
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ compare(control.pressed, false);
+ verify(mouseSignalSequenceSpy.success);
+
+ // right button
+ mouseSignalSequenceSpy.expectedSequence = [];
+ mousePress(control, control.width / 2, control.height / 2, Qt.RightButton);
+ compare(control.pressed, false);
+
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton);
+ compare(control.pressed, false);
+ verify(mouseSignalSequenceSpy.success);
+
+ // double click
+ mouseSignalSequenceSpy.expectedSequence = [
+ ["pressedChanged", { "pressed": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false }],
+ "released",
+ "clicked",
+ ["pressedChanged", { "pressed": true }],
+ "pressed",
+ "doubleClicked",
+ ["pressedChanged", { "pressed": false }],
+ "released"
+ ];
+ mouseDoubleClickSequence(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ verify(mouseSignalSequenceSpy.success);
+
+ // press and hold
+ var pressAndHoldSpy = signalSpyComponent.createObject(control, { target: control, signalName: "pressAndHold" });
+ verify(pressAndHoldSpy);
+ verify(pressAndHoldSpy.valid);
+
+ mouseSignalSequenceSpy.expectedSequence = [
+ ["pressedChanged", { "pressed": true }],
+ "pressed",
+ "pressAndHold",
+ ["pressedChanged", { "pressed": false }],
+ "released"
+ ];
+ mousePress(control);
+ compare(control.pressed, true);
+ tryCompare(pressAndHoldSpy, "count", 1);
+
+ mouseRelease(control);
+ compare(control.pressed, false);
+ verify(mouseSignalSequenceSpy.success);
+ }
+
+ Component {
+ id: removableDelegatesComponent
+
+ ListView {
+ id: listView
+ width: 100
+ height: 120
+
+ model: ListModel {
+ ListElement { name: "Apple" }
+ ListElement { name: "Orange" }
+ ListElement { name: "Pear" }
+ }
+
+ delegate: SwipeDelegate {
+ id: rootDelegate
+ text: modelData
+ width: listView.width
+
+ property alias removeAnimation: onRemoveAnimation
+
+ ListView.onRemove: SequentialAnimation {
+ id: onRemoveAnimation
+
+ PropertyAction {
+ target: rootDelegate
+ property: "ListView.delayRemove"
+ value: true
+ }
+ NumberAnimation {
+ target: rootDelegate
+ property: "height"
+ to: 0
+ easing.type: Easing.InOutQuad
+ }
+ PropertyAction {
+ target: rootDelegate;
+ property: "ListView.delayRemove";
+ value: false
+ }
+ }
+
+ swipe.left: Rectangle {
+ objectName: "rectangle"
+ color: SwipeDelegate.pressed ? "#333" : "#444"
+ anchors.fill: parent
+
+ SwipeDelegate.onClicked: listView.model.remove(index)
+
+ Label {
+ objectName: "label"
+ text: "Remove"
+ color: "white"
+ anchors.centerIn: parent
+ }
+ }
+ }
+ }
+ }
+
+ function test_removableDelegates() {
+ var listView = createTemporaryObject(removableDelegatesComponent, testCase);
+ verify(listView);
+ compare(listView.count, 3);
+
+ // Expose the remove button.
+ var firstItem = listView.itemAt(0, 0);
+ mousePress(listView, firstItem.width / 2, firstItem.height / 2);
+ verify(firstItem.pressed);
+ compare(firstItem.swipe.position, 0.0);
+ verify(!firstItem.swipe.complete);
+ verify(!firstItem.swipe.leftItem);
+
+ mouseMove(listView, firstItem.width * 1.1, firstItem.height / 2);
+ verify(firstItem.pressed);
+ compare(firstItem.swipe.position, 0.6);
+ verify(!firstItem.swipe.complete);
+ verify(firstItem.swipe.leftItem);
+ verify(!firstItem.swipe.leftItem.SwipeDelegate.pressed);
+
+ mouseRelease(listView, firstItem.width / 2, firstItem.height / 2);
+ verify(!firstItem.pressed);
+ tryCompare(firstItem.swipe, "position", 1.0);
+ tryCompare(firstItem.swipe, "complete", true);
+ compare(listView.count, 3);
+
+ // Wait for it to settle down.
+ tryCompare(firstItem.contentItem, "x", firstItem.leftPadding + firstItem.width);
+
+ var leftClickedSpy = signalSpyComponent.createObject(firstItem.swipe.leftItem,
+ { target: firstItem.swipe.leftItem.SwipeDelegate, signalName: "clicked" });
+ verify(leftClickedSpy);
+ verify(leftClickedSpy.valid);
+
+ // Click the left item to remove the delegate from the list.
+ var contentItemX = firstItem.contentItem.x;
+ mousePress(listView, firstItem.width / 2, firstItem.height / 2);
+ verify(firstItem.swipe.leftItem.SwipeDelegate.pressed);
+ compare(leftClickedSpy.count, 0);
+ verify(firstItem.pressed);
+
+ mouseRelease(listView, firstItem.width / 2, firstItem.height / 2);
+ verify(!firstItem.swipe.leftItem.SwipeDelegate.pressed);
+ compare(leftClickedSpy.count, 1);
+ verify(!firstItem.pressed);
+ leftClickedSpy = null;
+ tryCompare(firstItem.removeAnimation, "running", true);
+ // There was a bug where the resizeContent() would be called because the height
+ // of the control was changing due to the animation. contentItem would then
+ // change x position and hence be visible when it shouldn't be.
+ verify(firstItem.removeAnimation.running);
+ while (1) {
+ wait(10)
+ if (firstItem && firstItem.removeAnimation && firstItem.removeAnimation.running)
+ compare(firstItem.contentItem.x, contentItemX);
+ else
+ break;
+ }
+ compare(listView.count, 2);
+ }
+
+ Component {
+ id: leadingTrailingXComponent
+ SwipeDelegate {
+ id: delegate
+ width: 150
+ text: "SwipeDelegate"
+
+ swipe.left: Rectangle {
+ x: delegate.background.x - width
+ width: delegate.width
+ height: delegate.height
+ color: "green"
+ }
+
+ swipe.right: Rectangle {
+ x: delegate.background.x + delegate.background.width
+ width: delegate.width
+ height: delegate.height
+ color: "red"
+ }
+ }
+ }
+
+ Component {
+ id: leadingTrailingAnchorsComponent
+ SwipeDelegate {
+ id: delegate
+ width: 150
+ text: "SwipeDelegate"
+
+ swipe.left: Rectangle {
+ anchors.right: delegate.background.left
+ width: delegate.width
+ height: delegate.height
+ color: "green"
+ }
+
+ swipe.right: Rectangle {
+ anchors.left: delegate.background.right
+ width: delegate.width
+ height: delegate.height
+ color: "red"
+ }
+ }
+ }
+
+ function test_leadingTrailing_data() {
+ return [
+ { tag: "x", component: leadingTrailingXComponent },
+ { tag: "anchors", component: leadingTrailingAnchorsComponent },
+ ];
+ }
+
+ function test_leadingTrailing(data) {
+ var control = createTemporaryObject(data.component, testCase);
+ verify(control);
+
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width, control.height / 2);
+ verify(control.swipe.leftItem);
+ compare(control.swipe.leftItem.x, -control.width / 2);
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ }
+
+ function test_minMaxPosition() {
+ var control = createTemporaryObject(leadingTrailingXComponent, testCase);
+ verify(control);
+
+ // Should be limited within the range -1.0 to 1.0.
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width * 1.5, control.height / 2);
+ compare(control.swipe.position, 1.0);
+ mouseMove(control, control.width * 1.6, control.height / 2);
+ compare(control.swipe.position, 1.0);
+ mouseMove(control, control.width * -1.6, control.height / 2);
+ compare(control.swipe.position, -1.0);
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ }
+
+ Component {
+ id: emptySwipeDelegateComponent
+
+ SwipeDelegate {
+ text: "SwipeDelegate"
+ width: 150
+ }
+ }
+
+ Component {
+ id: smallLeftComponent
+
+ Rectangle {
+ width: 80
+ height: 40
+ color: "green"
+ }
+ }
+
+ // swipe.position should be scaled to the width of the relevant delegate,
+ // and it shouldn't be possible to drag past the delegate (so that content behind the control is visible).
+ function test_delegateWidth() {
+ var control = createTemporaryObject(emptySwipeDelegateComponent, testCase);
+ verify(control);
+
+ control.swipe.left = smallLeftComponent;
+
+ // Ensure that the position is scaled to the width of the currently visible delegate.
+ var overDragDistance = Math.round(dragDistance * 1.1);
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width / 2 + overDragDistance, control.height / 2);
+ verify(control.swipe.leftItem);
+ compare(control.swipe.position, overDragDistance / control.swipe.leftItem.width);
+
+ mouseMove(control, control.width / 2 + control.swipe.leftItem.width, control.height / 2);
+ compare(control.swipe.position, 1.0);
+
+ // Ensure that it's not possible to drag past the (left) delegate.
+ mouseMove(control, control.width / 2 + control.swipe.leftItem.width + 1, control.height / 2);
+ compare(control.swipe.position, 1.0);
+
+ // Now release over the right side; the position should be 1.0 and the background
+ // should be "anchored" to the right side of the left delegate item.
+ mouseMove(control, control.width / 2 + control.swipe.leftItem.width, control.height / 2);
+ mouseRelease(control, control.width / 2 + control.swipe.leftItem.width, control.height / 2, Qt.LeftButton);
+ compare(control.swipe.position, 1.0);
+ tryCompare(control.background, "x", control.swipe.leftItem.width, 1000);
+ }
+
+ SignalSpy {
+ id: leftVisibleSpy
+ signalName: "visibleChanged"
+ }
+
+ SignalSpy {
+ id: rightVisibleSpy
+ signalName: "visibleChanged"
+ }
+
+ function test_positionAfterSwipeCompleted() {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase);
+ verify(control);
+
+ // Ensure that both delegates are constructed.
+ mousePress(control, 0, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width * 1.1, control.height / 2);
+ verify(control.swipe.leftItem);
+ mouseMove(control, control.width * -0.1, control.height / 2);
+ verify(control.swipe.rightItem);
+
+ // Expose the left delegate.
+ mouseMove(control, control.swipe.leftItem.width, control.height / 2);
+ mouseRelease(control, control.swipe.leftItem.width, control.height / 2);
+ verify(control.swipe.complete);
+ compare(control.swipe.position, 1.0);
+
+ leftVisibleSpy.target = control.swipe.leftItem;
+ rightVisibleSpy.target = control.swipe.rightItem;
+
+ // Swipe from right to left without exposing the right item,
+ // and make sure that the right item never becomes visible
+ // (and hence that the left item never loses visibility).
+ mousePress(control, control.swipe.leftItem.width - 1, control.height / 2, Qt.LeftButton);
+ compare(leftVisibleSpy.count, 0);
+ compare(rightVisibleSpy.count, 0);
+ var newX = control.swipe.leftItem.width - Math.round(dragDistance * 1.1) -1;
+ mouseMove(control, newX, control.height / 2);
+ compare(leftVisibleSpy.count, 0);
+ compare(rightVisibleSpy.count, 0);
+ compare(control.swipe.position, (newX + 1) / control.swipe.leftItem.width);
+
+ mouseMove(control, 0, control.height / 2);
+ compare(control.swipe.position, 1 / control.swipe.leftItem.width);
+ // Because we move from (width - 1) to 0, so one pixel remains
+
+ // Test swiping over a distance that is greater than the width of the left item.
+ mouseMove(control, -1, control.height / 2);
+ verify(control.swipe.rightItem);
+ compare(control.swipe.position, 0);
+
+ // Now go back to 1.0.
+ mouseMove(control, control.swipe.leftItem.width - 1, control.height / 2);
+ compare(control.swipe.position, 1.0);
+ tryCompare(control.background, "x", control.swipe.leftItem.width, 1000);
+ mouseRelease(control, control.swipe.leftItem.width, control.height / 2, Qt.LeftButton);
+ }
+
+ // TODO: this somehow results in the behind item having a negative width
+// Component {
+// id: behindSwipeDelegateComponent
+// SwipeDelegate {
+// anchors.centerIn: parent
+// swipe.behind: Rectangle {
+// onXChanged: print("x changed", x)
+// anchors.left: {
+// print("anchors.left expression", swipe.position)
+// swipe.position < 0 ? parent.background.right : undefined
+// }
+// anchors.right: {
+// print("anchors.right expression", swipe.position)
+// swipe.position > 0 ? parent.background.left : undefined
+// }
+// width: parent.width
+// height: parent.height
+// color: "green"
+// }
+// swipe.left: null
+// swipe.right: null
+// Rectangle {
+// anchors.fill: parent
+// color: "transparent"
+// border.color: "darkorange"
+// }
+// }
+// }
+
+ Component {
+ id: behindSwipeDelegateComponent
+ SwipeDelegate {
+ text: "SwipeDelegate"
+ width: 150
+ anchors.centerIn: parent
+ swipe.behind: Rectangle {
+ x: swipe.position < 0 ? parent.background.x + parent.background.width
+ : (swipe.position > 0 ? parent.background.x - width : 0)
+ width: parent.width
+ height: parent.height
+ color: "green"
+ }
+ swipe.left: null
+ swipe.right: null
+ }
+ }
+
+ function test_leadingTrailingBehindItem() {
+ var control = createTemporaryObject(behindSwipeDelegateComponent, testCase);
+ verify(control);
+
+ swipe(control, 0.0, 1.0);
+ verify(control.swipe.behindItem.visible);
+ compare(control.swipe.behindItem.x, control.background.x - control.background.width);
+
+ swipe(control, 1.0, -1.0);
+ verify(control.swipe.behindItem.visible);
+ compare(control.swipe.behindItem.x, control.background.x + control.background.width);
+
+ swipe(control, -1.0, 1.0);
+ verify(control.swipe.behindItem.visible);
+ compare(control.swipe.behindItem.x, control.background.x - control.background.width);
+
+ // Should be possible to "wrap" with a behind delegate specified.
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width / 2 + control.swipe.behindItem.width * 0.8, control.height / 2);
+ compare(control.swipe.position, -0.2);
+ mouseRelease(control, control.width / 2 + control.swipe.behindItem.width * 0.8, control.height / 2, Qt.LeftButton);
+ tryCompare(control.swipe, "position", 0.0);
+
+ // Try wrapping the other way.
+ swipe(control, 0.0, -1.0);
+ verify(control.swipe.behindItem.visible);
+ compare(control.swipe.behindItem.x, control.background.x + control.background.width);
+
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width / 2 - control.swipe.behindItem.width * 0.8, control.height / 2);
+ compare(control.swipe.position, 0.2);
+ mouseRelease(control, control.width / 2 - control.swipe.behindItem.width * 0.8, control.height / 2, Qt.LeftButton);
+ tryCompare(control.swipe, "position", 0.0);
+ }
+
+ Component {
+ id: closeSwipeDelegateComponent
+
+ SwipeDelegate {
+ text: "SwipeDelegate"
+ width: 150
+
+ swipe.right: Rectangle {
+ color: "green"
+ width: parent.width
+ height: parent.height
+
+ SwipeDelegate.onClicked: swipe.close()
+ }
+ }
+ }
+
+ function test_close() {
+ var control = createTemporaryObject(closeSwipeDelegateComponent, testCase);
+ verify(control);
+
+ var closedSpy = signalSpyComponent.createObject(control, { target: control.swipe, signalName: "closed" });
+ verify(closedSpy);
+ verify(closedSpy.valid);
+
+ swipe(control, 0.0, -1.0);
+ compare(control.swipe.rightItem.visible, true);
+ // Should animate, so it shouldn't change right away.
+ compare(control.swipe.rightItem.x, 0);
+ tryCompare(control.swipe.rightItem, "x", control.background.x + control.background.width);
+
+ mousePress(control);
+ verify(control.swipe.rightItem.SwipeDelegate.pressed);
+
+ mouseRelease(control);
+ verify(!control.swipe.rightItem.SwipeDelegate.pressed);
+ tryCompare(closedSpy, "count", 1);
+ compare(control.swipe.position, 0);
+
+ // Swiping after closing should work as normal.
+ swipe(control, 0.0, -1.0);
+ }
+
+ function test_callCloseWhenAlreadyClosed() {
+ let control = createTemporaryObject(swipeDelegateComponent, testCase)
+ verify(control)
+
+ let closedSpy = signalSpyComponent.createObject(control, { target: control.swipe, signalName: "closed" })
+ verify(closedSpy)
+ verify(closedSpy.valid)
+
+ // Calling close() when it's already closed should have no effect.
+ control.swipe.close()
+ compare(closedSpy.count, 0)
+
+ // The game goes for calling close() in response to a click.
+ control.clicked.connect(function() { control.swipe.close() })
+ mouseClick(control)
+ compare(closedSpy.count, 0)
+ }
+
+ // Can't just connect to pressed in QML, because there is a pressed property
+ // that conflicts with the signal.
+ Component {
+ id: swipeDelegateCloseOnPressedComponent
+
+ SwipeDelegate {
+ text: "SwipeDelegate"
+ width: 150
+ swipe.right: Rectangle {
+ objectName: "rightItem"
+ width: parent.width / 2
+ height: parent.height
+ color: "tomato"
+ }
+
+ onPressed: swipe.close()
+ }
+ }
+
+ /*
+ We don't want to support closing on pressed(); released() or clicked()
+ should be used instead. However, calling swipe.close() in response to
+ a press should still not cause closed() to be emitted.
+ */
+ function test_closeOnPressed() {
+ let control = createTemporaryObject(swipeDelegateCloseOnPressedComponent, testCase)
+ verify(control)
+
+ swipe(control, 0.0, -1.0)
+
+ let closedSpy = signalSpyComponent.createObject(control, { target: control.swipe, signalName: "closed" })
+ verify(closedSpy)
+ verify(closedSpy.valid)
+
+ mousePress(control, control.width * 0.1)
+ compare(closedSpy.count, 0)
+ compare(control.swipe.position, -1.0)
+
+ // Simulate a somewhat realistic delay between press and release
+ // to ensure that the bug is triggered.
+ wait(100)
+ mouseRelease(control, control.width * 0.1)
+ compare(closedSpy.count, 0)
+ compare(control.swipe.position, -1.0)
+ }
+
+ Component {
+ id: multiActionSwipeDelegateComponent
+
+ SwipeDelegate {
+ text: "SwipeDelegate"
+ width: 150
+
+ swipe.right: Item {
+ objectName: "rightItemRoot"
+ width: parent.width
+ height: parent.height
+
+ property alias firstAction: firstAction
+ property alias secondAction: secondAction
+
+ property int firstClickCount: 0
+ property int secondClickCount: 0
+
+ Row {
+ anchors.fill: parent
+ anchors.margins: 5
+
+ Rectangle {
+ id: firstAction
+ width: parent.width / 2
+ height: parent.height
+ color: "tomato"
+
+ SwipeDelegate.onClicked: ++firstClickCount
+ }
+ Rectangle {
+ id: secondAction
+ width: parent.width / 2
+ height: parent.height
+ color: "navajowhite"
+
+ SwipeDelegate.onClicked: ++secondClickCount
+ }
+ }
+ }
+ }
+ }
+
+ // Tests that it's possible to have multiple non-interactive items in one delegate
+ // (e.g. left/right/behind) that can each receive clicks.
+ function test_multipleClickableActions() {
+ var control = createTemporaryObject(multiActionSwipeDelegateComponent, testCase);
+ verify(control);
+
+ swipe(control, 0.0, -1.0);
+ verify(control.swipe.rightItem);
+ tryCompare(control.swipe, "complete", true);
+
+ var firstClickedSpy = signalSpyComponent.createObject(control,
+ { target: control.swipe.rightItem.firstAction.SwipeDelegate, signalName: "clicked" });
+ verify(firstClickedSpy);
+ verify(firstClickedSpy.valid);
+
+ // Clicked within rightItem, but not within an item using the attached properties.
+ mousePress(control, 2, 2);
+ compare(control.swipe.rightItem.firstAction.SwipeDelegate.pressed, false);
+ compare(firstClickedSpy.count, 0);
+
+ mouseRelease(control, 2, 2);
+ compare(control.swipe.rightItem.firstAction.SwipeDelegate.pressed, false);
+ compare(firstClickedSpy.count, 0);
+
+ // Click within the first item.
+ mousePress(control.swipe.rightItem.firstAction, 0, 0);
+ compare(control.swipe.rightItem.firstAction.SwipeDelegate.pressed, true);
+ compare(firstClickedSpy.count, 0);
+
+ mouseRelease(control.swipe.rightItem.firstAction, 0, 0);
+ compare(control.swipe.rightItem.firstAction.SwipeDelegate.pressed, false);
+ compare(firstClickedSpy.count, 1);
+ compare(control.swipe.rightItem.firstClickCount, 1);
+
+ var secondClickedSpy = signalSpyComponent.createObject(control,
+ { target: control.swipe.rightItem.secondAction.SwipeDelegate, signalName: "clicked" });
+ verify(secondClickedSpy);
+ verify(secondClickedSpy.valid);
+
+ // Click within the second item.
+ mousePress(control.swipe.rightItem.secondAction, 0, 0);
+ compare(control.swipe.rightItem.secondAction.SwipeDelegate.pressed, true);
+ compare(secondClickedSpy.count, 0);
+
+ mouseRelease(control.swipe.rightItem.secondAction, 0, 0);
+ compare(control.swipe.rightItem.secondAction.SwipeDelegate.pressed, false);
+ compare(secondClickedSpy.count, 1);
+ compare(control.swipe.rightItem.secondClickCount, 1);
+ }
+
+ // Pressing on a "side action" and then dragging should eventually
+ // cause the ListView to grab the mouse and start changing its contentY.
+ // When this happens, it will grab the mouse and hence we must clear
+ // that action's pressed state so that it doesn't stay pressed after releasing.
+ function test_dragSideAction() {
+ var listView = createTemporaryObject(removableDelegatesComponent, testCase);
+ verify(listView);
+
+ var control = listView.itemAt(0, 0);
+ verify(control);
+
+ // Expose the side action.
+ swipe(control, 0.0, 1.0);
+ verify(control.swipe.leftItem);
+ tryCompare(control.swipe, "complete", true);
+
+ var pressedSpy = signalSpyComponent.createObject(control,
+ { target: control.swipe.leftItem.SwipeDelegate, signalName: "pressedChanged" });
+ verify(pressedSpy);
+ verify(pressedSpy.valid);
+
+ mouseDrag(listView, 20, 20, 0, listView.height);
+ compare(pressedSpy.count, 2);
+ verify(listView.contentY !== 0);
+
+ compare(control.swipe.leftItem.SwipeDelegate.pressed, false);
+ }
+
+ // When the width of a SwipeDelegate changes (as it does upon portrait => landscape
+ // rotation, for example), the positions of the contentItem and background items
+ // should be updated accordingly.
+ function test_contentItemPosOnWidthChanged() {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase);
+ verify(control);
+
+ swipe(control, 0.0, 1.0);
+
+ var oldContentItemX = control.contentItem.x;
+ var oldBackgroundX = control.background.x;
+ control.width += 100;
+ compare(control.contentItem.x, oldContentItemX + 100);
+ compare(control.background.x, oldBackgroundX + 100);
+ }
+
+ function test_contentItemHeightOnHeightChanged() {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase);
+ verify(control);
+
+ // Try when swipe.complete is false.
+ var originalHeight = control.height;
+ var originalContentItemHeight = control.contentItem.height;
+ verify(control.height !== 10);
+ control.height = 10;
+ compare(control.contentItem.height, control.availableHeight);
+ verify(control.contentItem.height < originalContentItemHeight);
+ compare(control.contentItem.y, control.topPadding);
+
+ // Try when swipe.complete is true.
+ control.height = originalHeight;
+ swipe(control, 0.0, 1.0);
+ control.height = 10;
+ compare(control.contentItem.height, control.availableHeight);
+ verify(control.contentItem.height < originalContentItemHeight);
+ compare(control.contentItem.y, control.topPadding);
+ }
+
+ function test_releaseOutside_data() {
+ return [
+ { tag: "no delegates", component: emptySwipeDelegateComponent },
+ { tag: "delegates", component: swipeDelegateComponent },
+ ];
+ }
+
+ function test_releaseOutside(data) {
+ var control = createTemporaryObject(data.component, testCase);
+ verify(control);
+
+ // Press and then release below the control.
+ mouseSignalSequenceSpy.target = control;
+ mouseSignalSequenceSpy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed", ["pressedChanged", { "pressed": false }]];
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width / 2, control.height + 10);
+ verify(mouseSignalSequenceSpy.success);
+
+ mouseSignalSequenceSpy.expectedSequence = ["canceled"];
+ mouseRelease(control, control.width / 2, control.height + 10, Qt.LeftButton);
+ verify(mouseSignalSequenceSpy.success);
+
+ // Press and then release to the right of the control.
+ var hasDelegates = control.swipe.left || control.swipe.right || control.swipe.behind;
+ mouseSignalSequenceSpy.target = control;
+ mouseSignalSequenceSpy.expectedSequence = hasDelegates
+ ? [["pressedChanged", { "pressed": true }], "pressed"]
+ : [["pressedChanged", { "pressed": true }], "pressed", ["pressedChanged", { "pressed": false }]];
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width + 10, control.height / 2);
+ if (hasDelegates)
+ verify(control.swipe.position > 0);
+ verify(mouseSignalSequenceSpy.success);
+
+ mouseSignalSequenceSpy.expectedSequence = hasDelegates ? [["pressedChanged", { "pressed": false }], "canceled"] : ["canceled"];
+ mouseRelease(control, control.width + 10, control.height / 2, Qt.LeftButton);
+ verify(mouseSignalSequenceSpy.success);
+ }
+
+ Component {
+ id: leftRightWithLabelsComponent
+
+ SwipeDelegate {
+ id: delegate
+ text: "SwipeDelegate"
+ width: 150
+
+ background.opacity: 0.5
+
+ swipe.left: Rectangle {
+ width: parent.width
+ height: parent.height
+ color: SwipeDelegate.pressed ? Qt.darker("green") : "green"
+
+ property alias label: label
+
+ Label {
+ id: label
+ text: "Left"
+ color: "white"
+ anchors.margins: 10
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ SwipeDelegate.onClicked: delegate.swipe.close()
+ }
+
+ swipe.right: Rectangle {
+ width: parent.width
+ height: parent.height
+ anchors.right: parent.right
+ color: SwipeDelegate.pressed ? Qt.darker("green") : "red"
+
+ property alias label: label
+
+ Label {
+ id: label
+ text: "Right"
+ color: "white"
+ anchors.margins: 10
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ SwipeDelegate.onClicked: delegate.swipe.close()
+ }
+ }
+ }
+
+ function test_beginSwipeOverRightItem() {
+ var control = createTemporaryObject(leftRightWithLabelsComponent, testCase);
+ verify(control);
+
+ // Swipe to the left, exposing the right item.
+ swipe(control, 0.0, -1.0);
+
+ // Click to close it and go back to a position of 0.
+ mouseClick(control);
+
+ // TODO: Swipe to the left, with the mouse over the Label in the right item.
+ // The left item should not become visible at any point.
+ var rightLabel = control.swipe.rightItem.label;
+ var overDragDistance = Math.round(dragDistance * 1.1);
+ mousePress(rightLabel, rightLabel.width / 2, rightLabel.height / 2, Qt.rightButton);
+ mouseMove(rightLabel, rightLabel.width / 2 - overDragDistance, rightLabel.height / 2);
+ verify(!control.swipe.leftItem);
+
+ mouseRelease(rightLabel, rightLabel.width / 2 - overDragDistance, control.height / 2, Qt.LeftButton);
+ verify(!control.swipe.leftItem);
+ }
+
+ Component {
+ id: swipeDelegateDisabledComponent
+
+ SwipeDelegate {
+ id: swipeDelegate
+ text: "SwipeDelegate"
+ width: parent.width
+ height: checked ? implicitHeight * 2 : implicitHeight
+ checkable: true
+
+ swipe.enabled: false
+ swipe.right: Label {
+ text: swipeDelegate.checked ? qsTr("Expanded") : qsTr("Collapsed")
+ width: parent.width
+ height: parent.height
+ padding: 12
+ color: "white"
+ verticalAlignment: Label.AlignVCenter
+ horizontalAlignment: Label.AlignRight
+ }
+ }
+ }
+
+ function test_swipeEnabled() {
+ var control = createTemporaryObject(swipeDelegateDisabledComponent, testCase);
+
+ mousePress(control, control.width / 2, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 0.0);
+ verify(!control.swipe.complete);
+ verify(!control.swipe.leftItem);
+ verify(!control.swipe.rightItem);
+
+ // It shouldn't be possible to swipe.
+ var overDragDistance = Math.round(dragDistance * 1.1);
+ mouseMove(control, control.width / 2 - overDragDistance, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 0.0);
+ verify(!control.swipe.complete);
+ verify(!control.swipe.leftItem);
+ verify(!control.swipe.rightItem);
+
+ // Now move outside the right edge of the control and release.
+ mouseMove(control, control.width * 1.1, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, 0.0);
+ verify(!control.swipe.complete);
+ verify(!control.swipe.leftItem);
+ verify(!control.swipe.rightItem);
+
+ mouseRelease(control, control.width / 2, control.height / 2);
+ verify(!control.pressed);
+ compare(control.swipe.position, 0.0);
+ verify(!control.swipe.complete);
+ verify(!control.swipe.leftItem);
+ verify(!control.swipe.rightItem);
+
+ // Now enabled swiping so that we can swipe to the left.
+ control.swipe.enabled = true;
+ swipe(control, 0, -1);
+ verify(control.swipe.complete);
+
+ // Now that the swipe is complete, disable swiping and then try to swipe again.
+ // It should stay at its position of -1.
+ control.swipe.enabled = false;
+
+ mousePress(control, control.width / 2, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, -1.0);
+
+ mouseMove(control, control.width / 2 + overDragDistance, control.height / 2);
+ verify(control.pressed);
+ compare(control.swipe.position, -1.0);
+ verify(control.swipe.complete);
+
+ mouseRelease(control, control.width / 2 + overDragDistance, control.height / 2);
+ verify(!control.pressed);
+ compare(control.swipe.position, -1.0);
+ verify(control.swipe.complete);
+ }
+
+ function test_side() {
+ compare(SwipeDelegate.Left, 1.0);
+ compare(SwipeDelegate.Right, -1.0);
+ }
+
+ function test_open_side_data() {
+ return [
+ { tag: "left", side: SwipeDelegate.Left, position: 1, complete: true, left: greenLeftComponent, right: null, behind: null },
+ { tag: "right", side: SwipeDelegate.Right, position: -1, complete: true, left: null, right: redRightComponent, behind: null },
+ { tag: "behind,left", side: SwipeDelegate.Left, position: 1, complete: true, left: null, right: null, behind: greenLeftComponent },
+ { tag: "behind,right", side: SwipeDelegate.Right, position: -1, complete: true, left: null, right: null, behind: redRightComponent },
+ { tag: "left,behind", side: SwipeDelegate.Left, position: 1, complete: true, left: null, right: null, behind: greenLeftComponent },
+ { tag: "right,behind", side: SwipeDelegate.Right, position: -1, complete: true, left: null, right: null, behind: redRightComponent },
+ { tag: "left,null", side: SwipeDelegate.Left, position: 0, complete: false, left: null, right: null, behind: null },
+ { tag: "right,null", side: SwipeDelegate.Right, position: 0, complete: false, left: null, right: null, behind: null },
+ { tag: "invalid", side: 0, position: 0, complete: false, left: greenLeftComponent, right: null, behind: null }
+ ]
+ }
+
+ function test_open_side(data) {
+ var control = createTemporaryObject(emptySwipeDelegateComponent, testCase,
+ {"swipe.left": data.left, "swipe.right": data.right, "swipe.behind": data.behind});
+ verify(control);
+
+ control.swipe.open(data.side);
+ tryCompare(control.swipe, "position", data.position);
+ tryCompare(control.swipe, "complete", data.complete);
+ }
+
+ Component {
+ id: openSwipeDelegateComponent
+
+ SwipeDelegate {
+ text: "SwipeDelegate"
+ width: 150
+
+ onClicked: swipe.open(SwipeDelegate.Right)
+
+ swipe.right: Item {
+ width: parent.width
+ height: parent.height
+ }
+ }
+ }
+
+ function test_open() {
+ var control = createTemporaryObject(openSwipeDelegateComponent, testCase);
+ verify(control);
+
+ mouseClick(control);
+ tryCompare(control.swipe, "position", SwipeDelegate.Right);
+ tryCompare(control.background, "x", -control.background.width);
+
+ // Swiping after opening should work as normal.
+ swipe(control, SwipeDelegate.Right, 0.0);
+ tryCompare(control.swipe, "position", 0.0);
+ tryCompare(control.background, "x", 0);
+ }
+
+ Component {
+ id: animationSwipeDelegateComponent
+
+ SwipeDelegate {
+ id: control
+ text: "SwipeDelegate"
+ width: 150
+ swipe.left: greenLeftComponent
+ swipe.right: redRightComponent
+ swipe.transition: null
+
+ property alias behavior: xBehavior
+ property alias animation: numberAnimation
+
+ background: Rectangle {
+ color: control.down ? "#ccc" : "#fff"
+
+ Behavior on x {
+ id: xBehavior
+ enabled: !control.down
+
+ NumberAnimation {
+ id: numberAnimation
+ easing.type: Easing.InOutCubic
+ duration: 400
+ }
+ }
+ }
+ }
+ }
+
+ function test_animations() {
+ // Test that animations are run when releasing from a drag.
+ var control = createTemporaryObject(animationSwipeDelegateComponent, testCase);
+ verify(control);
+
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton);
+ mouseMove(control, control.width - 1, control.height / 2);
+ verify(control.down);
+ verify(!control.behavior.enabled);
+ verify(!control.animation.running);
+
+ mouseRelease(control, control.width - 1, control.height / 2, Qt.LeftButton);
+ verify(!control.down);
+ verify(control.behavior.enabled);
+ verify(control.animation.running);
+ }
+
+ function test_spacing() {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase, { text: "Some long, long, long text" })
+ verify(control)
+ verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
+
+ var textLabel = findChild(control.contentItem, "label")
+ verify(textLabel)
+
+ // The implicitWidth of the IconLabel that all buttons use as their contentItem
+ // should be equal to the implicitWidth of the Text while no icon is set.
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // That means that spacing shouldn't affect it.
+ control.spacing += 100
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // The implicitWidth of the SwipeDelegate itself should, therefore, also never include spacing while no icon is set.
+ compare(control.implicitWidth, textLabel.implicitWidth + control.leftPadding + control.rightPadding)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: SwipeDelegate.IconOnly },
+ { "tag": "TextOnly", display: SwipeDelegate.TextOnly },
+ { "tag": "TextUnderIcon", display: SwipeDelegate.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: SwipeDelegate.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: SwipeDelegate.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: SwipeDelegate.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: SwipeDelegate.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: SwipeDelegate.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(swipeDelegateComponent, testCase, {
+ text: "SwipeDelegate",
+ display: data.display,
+ width: 400,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ switch (control.display) {
+ case SwipeDelegate.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case SwipeDelegate.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, control.mirrored ? control.availableWidth - textLabel.width : 0)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case SwipeDelegate.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case SwipeDelegate.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+
+ function test_resizeParent() {
+ let container = createTemporaryObject(itemComponent, testCase, { objectName: "container", width: 100, height: 200 })
+ verify(container)
+
+ let control = swipeDelegateComponent.createObject(container, { width: Qt.binding(function() { return container.width }) })
+ verify(control)
+
+ // Resize while closed.
+ container.width = 200
+ compare(container.width, 200)
+ compare(control.width, 200)
+ compare(control.background.width, 200)
+ compare(control.contentItem.width, 200 - control.leftPadding - control.rightPadding)
+
+ // Return to original size.
+ container.width = 100
+ compare(control.width, 100)
+ compare(control.background.width, 100)
+ compare(control.contentItem.width, 100 - control.leftPadding - control.rightPadding)
+
+ // Swipe to the left to open.
+ swipe(control, 0, -1.0)
+ // Nothing should have changed except positions.
+ compare(control.width, 100)
+ compare(control.background.width, 100)
+ compare(control.contentItem.width, 100 - control.leftPadding - control.rightPadding)
+
+ // Resize while open.
+ container.width = 200
+ // The items should fill the width as usual.
+ compare(control.width, 200)
+ compare(control.background.width, 200)
+ compare(control.contentItem.width, 200 - control.leftPadding - control.rightPadding)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_swipeview.qml b/tests/auto/quickcontrols2/controls/data/tst_swipeview.qml
new file mode 100644
index 0000000000..254c876f08
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_swipeview.qml
@@ -0,0 +1,719 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "SwipeView"
+
+ Component {
+ id: swipeView
+ SwipeView { }
+ }
+
+ Component {
+ id: page
+ Text { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_current() {
+ var control = createTemporaryObject(swipeView, testCase)
+
+ var currentItemChangedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "currentItemChanged"})
+ verify(currentItemChangedSpy.valid)
+
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentItem, null)
+
+ var item0 = page.createObject(control, {text: "0"})
+ control.addItem(item0)
+ compare(control.count, 1)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "0")
+ compare(currentItemChangedSpy.count, 1);
+ compare(control.contentWidth, item0.implicitWidth)
+ compare(control.contentHeight, item0.implicitHeight)
+
+ var item1 = page.createObject(control, {text: "11"})
+ control.addItem(item1)
+ compare(control.count, 2)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "0")
+ compare(currentItemChangedSpy.count, 1);
+ compare(control.contentWidth, item0.implicitWidth)
+ compare(control.contentHeight, item0.implicitHeight)
+
+ var item2 = page.createObject(control, {text: "222"})
+ control.addItem(item2)
+ compare(control.count, 3)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "0")
+ compare(currentItemChangedSpy.count, 1);
+ compare(control.contentWidth, item0.implicitWidth)
+ compare(control.contentHeight, item0.implicitHeight)
+
+ control.currentIndex = 1
+ compare(control.currentIndex, 1)
+ compare(control.currentItem.text, "11")
+ compare(currentItemChangedSpy.count, 2);
+ compare(control.contentWidth, item1.implicitWidth)
+ compare(control.contentHeight, item1.implicitHeight)
+
+ control.currentIndex = 2
+ compare(control.currentIndex, 2)
+ compare(control.currentItem.text, "222")
+ compare(currentItemChangedSpy.count, 3);
+ compare(control.contentWidth, item2.implicitWidth)
+ compare(control.contentHeight, item2.implicitHeight)
+
+ control.decrementCurrentIndex()
+ compare(control.currentIndex, 1)
+ compare(control.currentItem.text, "11")
+ compare(currentItemChangedSpy.count, 4);
+ compare(control.contentWidth, item1.implicitWidth)
+ compare(control.contentHeight, item1.implicitHeight)
+
+ control.incrementCurrentIndex()
+ compare(control.currentIndex, 2)
+ compare(control.currentItem.text, "222")
+ compare(currentItemChangedSpy.count, 5);
+ compare(control.contentWidth, item2.implicitWidth)
+ compare(control.contentHeight, item2.implicitHeight)
+ }
+
+ Component {
+ id: initialCurrentSwipeView
+ SwipeView {
+ currentIndex: 1
+
+ property alias item0: item0
+ property alias item1: item1
+
+ Item {
+ id: item0
+ }
+ Item {
+ id: item1
+ }
+ }
+ }
+
+ function test_initialCurrent() {
+ var control = createTemporaryObject(initialCurrentSwipeView, testCase)
+
+ compare(control.count, 2)
+ compare(control.currentIndex, 1)
+ compare(control.currentItem, control.item1)
+ }
+
+ function test_addRemove() {
+ var control = createTemporaryObject(swipeView, testCase)
+
+ function verifyCurrentIndexCountDiff() {
+ verify(control.currentIndex < control.count)
+ }
+ control.currentIndexChanged.connect(verifyCurrentIndexCountDiff)
+ control.countChanged.connect(verifyCurrentIndexCountDiff)
+
+ var currentItemChangedSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "currentItemChanged"})
+ verify(currentItemChangedSpy.valid)
+
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentItem, null)
+ control.addItem(page.createObject(control, {text: "1"}))
+ compare(control.count, 1)
+ compare(control.currentIndex, 0)
+ compare(currentItemChangedSpy.count, 1)
+ compare(control.currentItem.text, "1")
+ control.addItem(page.createObject(control, {text: "2"}))
+ compare(control.count, 2)
+ compare(control.currentIndex, 0)
+ compare(currentItemChangedSpy.count, 1)
+ compare(control.currentItem.text, "1")
+ compare(control.itemAt(0).text, "1")
+ compare(control.itemAt(1).text, "2")
+
+ control.currentIndex = 1
+ compare(currentItemChangedSpy.count, 2)
+
+ control.insertItem(1, page.createObject(control, {text: "3"}))
+ compare(control.count, 3)
+ compare(control.currentIndex, 2)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "1")
+ compare(control.itemAt(1).text, "3")
+ compare(control.itemAt(2).text, "2")
+
+ control.insertItem(0, page.createObject(control, {text: "4"}))
+ compare(control.count, 4)
+ compare(control.currentIndex, 3)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "4")
+ compare(control.itemAt(1).text, "1")
+ compare(control.itemAt(2).text, "3")
+ compare(control.itemAt(3).text, "2")
+
+ control.insertItem(control.count, page.createObject(control, {text: "5"}))
+ compare(control.count, 5)
+ compare(control.currentIndex, 3)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "4")
+ compare(control.itemAt(1).text, "1")
+ compare(control.itemAt(2).text, "3")
+ compare(control.itemAt(3).text, "2")
+ compare(control.itemAt(4).text, "5")
+
+ control.removeItem(control.itemAt(control.count - 1))
+ compare(control.count, 4)
+ compare(control.currentIndex, 3)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "4")
+ compare(control.itemAt(1).text, "1")
+ compare(control.itemAt(2).text, "3")
+ compare(control.itemAt(3).text, "2")
+
+ control.removeItem(control.itemAt(0))
+ compare(control.count, 3)
+ compare(control.currentIndex, 2)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "1")
+ compare(control.itemAt(1).text, "3")
+ compare(control.itemAt(2).text, "2")
+
+ control.removeItem(control.itemAt(1))
+ compare(control.count, 2)
+ compare(control.currentIndex, 1)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "1")
+ compare(control.itemAt(1).text, "2")
+
+ currentItemChangedSpy.clear()
+
+ control.removeItem(control.itemAt(1))
+ compare(control.count, 1)
+ compare(control.currentIndex, 0)
+ compare(currentItemChangedSpy.count, 1)
+ compare(control.currentItem.text, "1")
+ compare(control.itemAt(0).text, "1")
+
+ control.removeItem(control.itemAt(0))
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(currentItemChangedSpy.count, 2)
+ }
+
+ Component {
+ id: contentView
+ SwipeView {
+ QtObject { objectName: "object" }
+ Item { objectName: "page1" }
+ Timer { objectName: "timer" }
+ Item { objectName: "page2" }
+ Component { Item { } }
+ }
+ }
+
+ function test_content() {
+ var control = createTemporaryObject(contentView, testCase)
+
+ function compareObjectNames(content, names) {
+ if (content.length !== names.length)
+ return false
+ for (var i = 0; i < names.length; ++i) {
+ if (content[i].objectName !== names[i])
+ return false
+ }
+ return true
+ }
+
+ verify(compareObjectNames(control.contentData, ["object", "page1", "timer", "page2", ""]))
+ verify(compareObjectNames(control.contentChildren, ["page1", "page2"]))
+
+ control.addItem(page.createObject(control, {objectName: "page3"}))
+ verify(compareObjectNames(control.contentData, ["object", "page1", "timer", "page2", "", "page3"]))
+ verify(compareObjectNames(control.contentChildren, ["page1", "page2", "page3"]))
+
+ control.insertItem(0, page.createObject(control, {objectName: "page4"}))
+ verify(compareObjectNames(control.contentData, ["object", "page1", "timer", "page2", "", "page3", "page4"]))
+ verify(compareObjectNames(control.contentChildren, ["page4", "page1", "page2", "page3"]))
+
+ control.moveItem(1, 2)
+ verify(compareObjectNames(control.contentData, ["object", "page1", "timer", "page2", "", "page3", "page4"]))
+ verify(compareObjectNames(control.contentChildren, ["page4", "page2", "page1", "page3"]))
+
+ control.removeItem(control.itemAt(0))
+ verify(compareObjectNames(control.contentData, ["object", "page1", "timer", "page2", "", "page3"]))
+ verify(compareObjectNames(control.contentChildren, ["page2", "page1", "page3"]))
+ }
+
+ Component {
+ id: repeated
+ SwipeView {
+ property alias repeater: repeater
+ Repeater {
+ id: repeater
+ model: 5
+ Item { property int idx: index }
+ }
+ }
+ }
+
+ function test_repeater() {
+ var control = createTemporaryObject(repeated, testCase)
+ verify(control)
+
+ var model = control.contentModel
+ verify(model)
+
+ var repeater = control.repeater
+ verify(repeater)
+
+ compare(repeater.count, 5)
+ compare(model.count, 5)
+
+ for (var i = 0; i < 5; ++i) {
+ var item1 = control.itemAt(i)
+ verify(item1)
+ compare(item1.idx, i)
+ compare(model.get(i), item1)
+ compare(repeater.itemAt(i), item1)
+ }
+
+ repeater.model = 3
+ compare(repeater.count, 3)
+ compare(model.count, 3)
+
+ for (var j = 0; j < 3; ++j) {
+ var item2 = control.itemAt(j)
+ verify(item2)
+ compare(item2.idx, j)
+ compare(model.get(j), item2)
+ compare(repeater.itemAt(j), item2)
+ }
+ }
+
+ Component {
+ id: ordered
+ SwipeView {
+ id: oview
+ property alias repeater: repeater
+ Text { text: "static_1" }
+ Repeater {
+ id: repeater
+ model: 2
+ Text { text: "repeated_" + (index + 2) }
+ }
+ Text { text: "static_4" }
+ Component.onCompleted: {
+ addItem(page.createObject(oview, {text: "dynamic_5"}))
+ addItem(page.createObject(oview.contentItem, {text: "dynamic_6"}))
+ insertItem(0, page.createObject(oview, {text: "dynamic_0"}))
+ }
+ }
+ }
+
+ function test_order() {
+ var control = createTemporaryObject(ordered, testCase)
+ verify(control)
+
+ compare(control.count, 7)
+ compare(control.itemAt(0).text, "dynamic_0")
+ compare(control.itemAt(1).text, "static_1")
+ compare(control.itemAt(2).text, "repeated_2")
+ compare(control.itemAt(3).text, "repeated_3")
+ compare(control.itemAt(4).text, "static_4")
+ compare(control.itemAt(5).text, "dynamic_5")
+ compare(control.itemAt(6).text, "dynamic_6")
+ }
+
+ function test_move_data() {
+ return [
+ {tag:"0->1 (0)", from: 0, to: 1, currentBefore: 0, currentAfter: 1},
+ {tag:"0->1 (1)", from: 0, to: 1, currentBefore: 1, currentAfter: 0},
+ {tag:"0->1 (2)", from: 0, to: 1, currentBefore: 2, currentAfter: 2},
+
+ {tag:"0->2 (0)", from: 0, to: 2, currentBefore: 0, currentAfter: 2},
+ {tag:"0->2 (1)", from: 0, to: 2, currentBefore: 1, currentAfter: 0},
+ {tag:"0->2 (2)", from: 0, to: 2, currentBefore: 2, currentAfter: 1},
+
+ {tag:"1->0 (0)", from: 1, to: 0, currentBefore: 0, currentAfter: 1},
+ {tag:"1->0 (1)", from: 1, to: 0, currentBefore: 1, currentAfter: 0},
+ {tag:"1->0 (2)", from: 1, to: 0, currentBefore: 2, currentAfter: 2},
+
+ {tag:"1->2 (0)", from: 1, to: 2, currentBefore: 0, currentAfter: 0},
+ {tag:"1->2 (1)", from: 1, to: 2, currentBefore: 1, currentAfter: 2},
+ {tag:"1->2 (2)", from: 1, to: 2, currentBefore: 2, currentAfter: 1},
+
+ {tag:"2->0 (0)", from: 2, to: 0, currentBefore: 0, currentAfter: 1},
+ {tag:"2->0 (1)", from: 2, to: 0, currentBefore: 1, currentAfter: 2},
+ {tag:"2->0 (2)", from: 2, to: 0, currentBefore: 2, currentAfter: 0},
+
+ {tag:"2->1 (0)", from: 2, to: 1, currentBefore: 0, currentAfter: 0},
+ {tag:"2->1 (1)", from: 2, to: 1, currentBefore: 1, currentAfter: 2},
+ {tag:"2->1 (2)", from: 2, to: 1, currentBefore: 2, currentAfter: 1},
+
+ {tag:"0->0", from: 0, to: 0, currentBefore: 0, currentAfter: 0},
+ {tag:"-1->0", from: 0, to: 0, currentBefore: 1, currentAfter: 1},
+ {tag:"0->-1", from: 0, to: 0, currentBefore: 2, currentAfter: 2},
+ {tag:"1->10", from: 0, to: 0, currentBefore: 0, currentAfter: 0},
+ {tag:"10->2", from: 0, to: 0, currentBefore: 1, currentAfter: 1},
+ {tag:"10->-1", from: 0, to: 0, currentBefore: 2, currentAfter: 2}
+ ]
+ }
+
+ Component {
+ id: pageAttached
+
+ Text {
+ property int index: SwipeView.index
+ property SwipeView view: SwipeView.view
+ property bool isCurrentItem: SwipeView.isCurrentItem
+ property bool isNextItem: SwipeView.isNextItem
+ property bool isPreviousItem: SwipeView.isPreviousItem
+ }
+ }
+
+ function test_move(data) {
+ var control = createTemporaryObject(swipeView, testCase)
+
+ compare(control.count, 0)
+ var titles = ["1", "2", "3"]
+
+ var i = 0;
+ for (i = 0; i < titles.length; ++i) {
+ var item = pageAttached.createObject(control, {text: titles[i]})
+ control.addItem(item)
+ }
+
+ compare(control.count, titles.length)
+ for (i = 0; i < control.count; ++i) {
+ compare(control.itemAt(i).text, titles[i])
+ compare(control.itemAt(i).SwipeView.index, i)
+ compare(control.itemAt(i).SwipeView.isCurrentItem, i === 0)
+ compare(control.itemAt(i).SwipeView.isNextItem, i === 1)
+ compare(control.itemAt(i).SwipeView.isPreviousItem, false)
+ }
+
+ control.currentIndex = data.currentBefore
+ for (i = 0; i < control.count; ++i) {
+ compare(control.itemAt(i).SwipeView.isCurrentItem, i === data.currentBefore)
+ compare(control.itemAt(i).SwipeView.isNextItem, i === data.currentBefore + 1)
+ compare(control.itemAt(i).SwipeView.isPreviousItem, i === data.currentBefore - 1)
+ }
+
+ control.moveItem(data.from, data.to)
+
+ compare(control.count, titles.length)
+ compare(control.currentIndex, data.currentAfter)
+
+ var title = titles[data.from]
+ titles.splice(data.from, 1)
+ titles.splice(data.to, 0, title)
+
+ compare(control.count, titles.length)
+ for (i = 0; i < control.count; ++i) {
+ compare(control.itemAt(i).text, titles[i])
+ compare(control.itemAt(i).SwipeView.index, i);
+ compare(control.itemAt(i).SwipeView.isCurrentItem, i === data.currentAfter)
+ compare(control.itemAt(i).SwipeView.isNextItem, i === data.currentAfter + 1)
+ compare(control.itemAt(i).SwipeView.isPreviousItem, i === data.currentAfter - 1)
+ }
+ }
+
+ Component {
+ id: dynamicView
+ SwipeView {
+ id: dview
+ Text { text: "static" }
+ Component.onCompleted: {
+ addItem(page.createObject(dview, {text: "added"}))
+ insertItem(0, page.createObject(dview, {text: "inserted"}))
+ page.createObject(dview, {text: "dynamic"})
+ }
+ }
+ }
+
+ function test_dynamic() {
+ var control = createTemporaryObject(dynamicView, testCase)
+
+ // insertItem(), addItem(), createObject() and static page {}
+ compare(control.count, 4)
+ compare(control.itemAt(0).text, "inserted")
+
+ var tab = page.createObject(control, {text: "dying"})
+ compare(control.count, 5)
+ compare(control.itemAt(4).text, "dying")
+
+ // TODO: fix crash in QQuickItemView
+// tab.destroy()
+// wait(0)
+// compare(control.count, 4)
+ }
+
+ function test_attachedParent() {
+ var control = createTemporaryObject(swipeView, testCase);
+
+ var page = createTemporaryObject(pageAttached, testCase);
+ compare(page.view, null);
+ compare(page.index, -1);
+ compare(page.isCurrentItem, false);
+ compare(page.isNextItem, false);
+ compare(page.isPreviousItem, false);
+ page.destroy();
+
+ page = createTemporaryObject(pageAttached, null);
+ compare(page.view, null);
+ compare(page.index, -1);
+ compare(page.isCurrentItem, false);
+ compare(page.isNextItem, false);
+ compare(page.isPreviousItem, false);
+
+ control.insertItem(0, page);
+ compare(control.count, 1);
+ compare(page.parent, control.contentItem.contentItem);
+ compare(page.view, control);
+ compare(page.index, 0);
+ compare(page.isCurrentItem, true);
+ compare(page.isNextItem, false);
+ compare(page.isPreviousItem, false);
+
+ control.removeItem(control.itemAt(0));
+ compare(control.count, 0);
+ compare(page.parent, null);
+ compare(page.view, null);
+ compare(page.index, -1);
+ compare(page.isCurrentItem, false);
+ compare(page.isNextItem, false);
+ compare(page.isPreviousItem, false);
+ }
+
+ function test_orientation() {
+ var control = createTemporaryObject(swipeView, testCase, {width: 200, height: 200})
+ verify(control)
+
+ for (var i = 0; i < 3; ++i)
+ control.addItem(page.createObject(control, {text: i}))
+
+ compare(control.orientation, Qt.Horizontal)
+ compare(control.horizontal, true)
+ compare(control.vertical, false)
+
+ for (i = 0; i < control.count; ++i) {
+ control.currentIndex = i
+ compare(control.itemAt(i).y, 0)
+ }
+
+ control.orientation = Qt.Vertical
+ compare(control.orientation, Qt.Vertical)
+ compare(control.horizontal, false)
+ compare(control.vertical, true)
+
+ for (i = 0; i < control.count; ++i) {
+ control.currentIndex = i
+ compare(control.itemAt(i).x, 0)
+ }
+ }
+
+ Component {
+ id: focusSwipeViewComponent
+
+ SwipeView {
+ id: swipeView
+ anchors.fill: parent
+ focus: true
+
+ property int pressCount
+ property int releaseCount
+ property int rectanglePressCount
+ property int rectangleReleaseCount
+
+ Rectangle {
+ focus: true
+
+ Keys.onPressed: ++swipeView.rectanglePressCount
+ Keys.onReleased: ++swipeView.rectangleReleaseCount
+ }
+
+ Keys.onPressed: ++pressCount
+ Keys.onReleased: ++releaseCount
+ }
+ }
+
+ function test_focus() {
+ if (Qt.styleHints.tabFocusBehavior !== Qt.TabFocusAllControls)
+ skip("This platform only allows tab focus for text controls")
+
+ var control = createTemporaryObject(focusSwipeViewComponent, testCase)
+ verify(control)
+ compare(control.focus, true)
+ compare(control.contentItem.focus, true)
+ compare(control.itemAt(0).focus, true)
+ compare(control.itemAt(0).activeFocus, true)
+
+ keyPress(Qt.Key_A)
+ compare(control.pressCount, 1)
+ compare(control.releaseCount, 0)
+ compare(control.rectanglePressCount, 1)
+ compare(control.rectangleReleaseCount, 0)
+
+ keyRelease(Qt.Key_A)
+ compare(control.pressCount, 1)
+ compare(control.releaseCount, 1)
+ compare(control.rectanglePressCount, 1)
+ compare(control.rectangleReleaseCount, 1)
+ }
+
+ // We have a particular customer who came up with this hack to make SwipeView wrap around at the end.
+ // It's not advisible, and perhaps the test can be removed when we add a bool wrap property.
+ Component {
+ id: pathViewWorkaroundComponent
+
+ SwipeView {
+ id: swipeView
+ anchors.left: parent.left
+ width: 100
+ height: 100
+ clip: true
+ Repeater {
+ id: repeater
+ objectName: "peter"
+ delegate: Rectangle {
+ id: rect
+ color: "#ffff00"
+ border.color: "black"
+ width: 100
+ height: 100
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.pixelSize: 24
+ text: model.index
+ }
+ }
+ }
+ contentItem: PathView {
+ id: pathview
+
+ preferredHighlightBegin: 0.5
+ preferredHighlightEnd: 0.5
+ model: swipeView.contentModel
+
+ path: Path {
+ id: path
+ startX: (swipeView.width / 2 * -1) * (swipeView.count - 1)
+ startY: swipeView.height / 2
+ PathLine {
+ relativeX: swipeView.width * swipeView.count
+ relativeY: 0
+ }
+ }
+ }
+ }
+ }
+
+ function test_child_pathview() {
+ const control = createTemporaryObject(pathViewWorkaroundComponent, testCase)
+ verify(control)
+ const repeater = control.children[0].children[0]
+ const spy = signalSpy.createObject(repeater, {target: repeater, signalName: "itemAdded"})
+ repeater.model = 1
+ tryCompare(spy, "count", 1)
+ const rect = repeater.itemAt(0)
+ tryCompare(rect, "visible", true)
+ if (Qt.platform.pluginName === "offscreen")
+ skip("grabImage() is not functional on the offscreen platform (QTBUG-63185)")
+ var image = grabImage(control)
+ compare(image.pixel(3, 3), "#ffff00")
+ }
+
+ Component {
+ id: translucentPages
+ SwipeView {
+ spacing: 10
+ padding: 10
+ Text { text: "page 0" }
+ Text { text: "page 1"; font.pointSize: 16 }
+ Text { text: "page 2"; font.pointSize: 24 }
+ Text { text: "page 3"; font.pointSize: 32 }
+ }
+ }
+
+ function test_initialPositions() { // QTBUG-102487
+ const control = createTemporaryObject(translucentPages, testCase, {width: 320, height: 200})
+ verify(control)
+ compare(control.orientation, Qt.Horizontal)
+ for (var i = 0; i < control.count; ++i) {
+ const page = control.itemAt(i)
+ // control.contentItem.width + control.spacing == 310; except Imagine style has contentItem.width == 320
+ compare(page.x, i * 310)
+ compare(page.y, 0)
+ }
+ control.orientation = Qt.Vertical
+ for (var i = 0; i < control.count; ++i) {
+ const page = control.itemAt(i)
+ compare(page.y, i * (control.contentItem.height + control.spacing))
+ compare(page.x, 0)
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_switch.qml b/tests/auto/quickcontrols2/controls/data/tst_switch.qml
new file mode 100644
index 0000000000..68d9cd78a2
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_switch.qml
@@ -0,0 +1,636 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "Switch"
+
+ Component {
+ id: swtch
+ Switch { }
+ }
+
+ Component {
+ id: signalSequenceSpy
+ SignalSequenceSpy {
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"]
+ }
+ }
+
+ function test_text() {
+ var control = createTemporaryObject(swtch, testCase)
+ verify(control)
+
+ compare(control.text, "")
+ control.text = "Switch"
+ compare(control.text, "Switch")
+ control.text = ""
+ compare(control.text, "")
+ }
+
+ function test_checked() {
+ var control = createTemporaryObject(swtch, testCase)
+ verify(control)
+
+ compare(control.checked, false)
+
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ spy.expectedSequence = [["checkedChanged", { "checked": true }]]
+ control.checked = true
+ compare(control.checked, true)
+ verify(spy.success)
+
+ spy.expectedSequence = [["checkedChanged", { "checked": false }]]
+ control.checked = false
+ compare(control.checked, false)
+ verify(spy.success)
+ }
+
+ function test_pressed_data() {
+ return [
+ { tag: "indicator", x: 15 },
+ { tag: "background", x: 5 }
+ ]
+ }
+
+ function test_pressed(data) {
+ var control = createTemporaryObject(swtch, testCase, {padding: 10})
+ verify(control)
+
+ // stays pressed when dragged outside
+ compare(control.pressed, false)
+ mousePress(control, data.x, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ mouseMove(control, -1, control.height / 2)
+ compare(control.pressed, true)
+ mouseRelease(control, -1, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, false)
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(swtch, testCase)
+ verify(control)
+
+ // check
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // uncheck
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release on the right
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ mouseMove(control, control.width * 2, control.height / 2, 0)
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width * 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release on the left
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ mouseMove(control, -control.width, control.height / 2, 0)
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, -control.width, control.height / 2, Qt.LeftButton)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release in the middle
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, 0, 0, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ mouseMove(control, control.width / 2, control.height / 2, 0, Qt.LeftButton)
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ tryCompare(control, "position", 0) // QTBUG-57944
+ verify(spy.success)
+
+ // right button
+ spy.expectedSequence = []
+ mousePress(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.pressed, false)
+ verify(spy.success)
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+ }
+
+ function test_touch() {
+ var control = createTemporaryObject(swtch, testCase)
+ verify(control)
+
+ var touch = touchEvent(control)
+
+ // check
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // uncheck
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release on the right
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ touch.move(0, control, control.width * 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width * 2, control.height / 2).commit()
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release on the left
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ touch.move(0, control, -control.width, control.height / 2).commit()
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, -control.width, control.height / 2).commit()
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release in the middle
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control, 0, 0).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ touch.move(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ tryCompare(control, "position", 0) // QTBUG-57944
+ verify(spy.success)
+ }
+
+ function test_mouseDrag() {
+ var control = createTemporaryObject(swtch, testCase, {leftPadding: 100, rightPadding: 100})
+ verify(control)
+
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+
+ // press-drag-release inside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control.indicator, 0)
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ mouseMove(control.indicator, control.width - 1)
+ compare(control.position, 1.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control.indicator, control.indicator.width - 1)
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // press-drag-release outside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ mousePress(control, 0)
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ mouseMove(control, control.width - control.rightPadding)
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ mouseMove(control, control.width / 2)
+ compare(control.position, 0.5)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ mouseMove(control, control.leftPadding)
+ compare(control.position, 0.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width - 1)
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // press-drag-release from and to outside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, control.width - 1)
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ mouseMove(control, control.width - control.rightPadding)
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ mouseMove(control, control.width / 2)
+ compare(control.position, 0.5)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ mouseMove(control, control.width - control.rightPadding)
+ compare(control.position, 1.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width - 1)
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+ }
+
+ function test_touchDrag() {
+ var control = createTemporaryObject(swtch, testCase, {leftPadding: 100, rightPadding: 100})
+ verify(control)
+
+ var touch = touchEvent(control)
+
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+
+ // press-drag-release inside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control.indicator, 0).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ touch.move(0, control.indicator, control.width).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control.indicator, control.indicator.width).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // press-drag-release outside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ touch.press(0, control, 0).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ touch.move(0, control, control.width - control.rightPadding).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ touch.move(0, control, control.width / 2).commit()
+ compare(control.position, 0.5)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ touch.move(0, control, control.leftPadding).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // press-drag-release from and to outside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ wait(Qt.styleHints.mouseDoubleClickInterval + 50)
+ touch.press(0, control, control.width - 1).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ touch.move(0, control, control.width - control.rightPadding).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ touch.move(0, control, control.width / 2).commit()
+ compare(control.position, 0.5)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ touch.move(0, control, control.width - control.rightPadding).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+ }
+
+ function test_keys() {
+ var control = createTemporaryObject(swtch, testCase)
+ verify(control)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ // check
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, true)
+ verify(spy.success)
+
+ // uncheck
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed",
+ ["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ keyClick(Qt.Key_Space)
+ compare(control.checked, false)
+ verify(spy.success)
+
+ // no change
+ spy.expectedSequence = []
+ var keys = [Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab]
+ for (var i = 0; i < keys.length; ++i) {
+ keyClick(keys[i])
+ compare(control.checked, false)
+ verify(spy.success)
+ }
+ }
+
+ Component {
+ id: twoSwitches
+ Item {
+ property Switch sw1: Switch { id: sw1 }
+ property Switch sw2: Switch { id: sw2; checked: sw1.checked; enabled: false }
+ }
+ }
+
+ function test_binding() {
+ var container = createTemporaryObject(twoSwitches, testCase)
+ verify(container)
+
+ compare(container.sw1.checked, false)
+ compare(container.sw2.checked, false)
+
+ container.sw1.checked = true
+ compare(container.sw1.checked, true)
+ compare(container.sw2.checked, true)
+
+ container.sw1.checked = false
+ compare(container.sw1.checked, false)
+ compare(container.sw2.checked, false)
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(swtch, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ function test_focus() {
+ var control = createTemporaryObject(swtch, testCase)
+ verify(control)
+
+ verify(!control.activeFocus)
+ mouseClick(control.indicator)
+ // should not get activeFocus on mouseClick on macOS
+ compare(control.activeFocus, Qt.platform.os !== "osx" && Qt.platform.os !== "macos")
+ }
+
+ Component {
+ id: deletionOrder1
+ Item {
+ Image { id: innerImage }
+ Switch { indicator: innerImage }
+ }
+ }
+
+ Component {
+ id: deletionOrder2
+ Item {
+ Switch { indicator: innerImage }
+ Image { id: innerImage }
+ }
+ }
+
+ function test_deletionOrder() {
+ var control1 = createTemporaryObject(deletionOrder1, testCase)
+ verify(control1)
+ var control2 = createTemporaryObject(deletionOrder2, testCase)
+ verify(control2)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_switchdelegate.qml b/tests/auto/quickcontrols2/controls/data/tst_switchdelegate.qml
new file mode 100644
index 0000000000..a1ff9f4a3e
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_switchdelegate.qml
@@ -0,0 +1,608 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "SwitchDelegate"
+
+ Component {
+ id: switchDelegate
+ SwitchDelegate {}
+ }
+
+ Component {
+ id: signalSequenceSpy
+ SignalSequenceSpy {
+ signals: ["pressed", "released", "canceled", "clicked", "toggled", "pressedChanged", "checkedChanged"]
+ }
+ }
+
+ // TODO: data-fy tst_checkbox (rename to tst_check?) so we don't duplicate its tests here?
+
+ function test_defaults() {
+ var control = createTemporaryObject(switchDelegate, testCase);
+ verify(control);
+ verify(!control.checked);
+ }
+
+ function test_checked() {
+ var control = createTemporaryObject(switchDelegate, testCase);
+ verify(control);
+
+ mouseClick(control);
+ verify(control.checked);
+
+ mouseClick(control);
+ verify(!control.checked);
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(switchDelegate, testCase);
+ verify(control);
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset);
+ }
+
+ function test_pressed_data() {
+ return [
+ { tag: "indicator", x: 15 },
+ { tag: "background", x: 5 }
+ ]
+ }
+
+ function test_pressed(data) {
+ var control = createTemporaryObject(switchDelegate, testCase, {padding: 10})
+ verify(control)
+
+ // stays pressed when dragged outside
+ compare(control.pressed, false)
+ mousePress(control, data.x, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ mouseMove(control, -1, control.height / 2)
+ compare(control.pressed, true)
+ mouseRelease(control, -1, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, false)
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(switchDelegate, testCase)
+ verify(control)
+
+ // check
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // uncheck
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release on the right
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ mouseMove(control, control.width * 2, control.height / 2, 0)
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width * 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release on the left
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ mouseMove(control, -control.width, control.height / 2, 0)
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, -control.width, control.height / 2, Qt.LeftButton)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release in the middle
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, 0, 0, Qt.LeftButton)
+ compare(control.pressed, true)
+ verify(spy.success)
+ mouseMove(control, control.width / 2, control.height / 2, 0, Qt.LeftButton)
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ tryCompare(control, "position", 0) // QTBUG-57944
+ verify(spy.success)
+
+ // right button
+ spy.expectedSequence = []
+ mousePress(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.pressed, false)
+ verify(spy.success)
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+ }
+
+ function test_touch() {
+ var control = createTemporaryObject(switchDelegate, testCase)
+ verify(control)
+
+ var touch = touchEvent(control)
+
+ // check
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // uncheck
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release on the right
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ touch.move(0, control, control.width * 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width * 2, control.height / 2).commit()
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release on the left
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ touch.press(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ touch.move(0, control, -control.width, control.height / 2).commit()
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, -control.width, control.height / 2).commit()
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // release in the middle
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control, 0, 0).commit()
+ compare(control.pressed, true)
+ verify(spy.success)
+ touch.move(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.pressed, true)
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width / 2, control.height / 2).commit()
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ tryCompare(control, "position", 0) // QTBUG-57944
+ verify(spy.success)
+ }
+
+ function test_mouseDrag() {
+ var control = createTemporaryObject(switchDelegate, testCase, {leftPadding: 100, rightPadding: 100})
+ verify(control)
+
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+
+ // press-drag-release inside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control.indicator, 0)
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ mouseMove(control.indicator, control.width)
+ compare(control.position, 1.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control.indicator, control.indicator.width)
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // press-drag-release outside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ mousePress(control, 0)
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ mouseMove(control, control.width - control.rightPadding)
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ mouseMove(control, control.width / 2)
+ compare(control.position, 0.5)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ mouseMove(control, control.leftPadding)
+ compare(control.position, 0.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width)
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // press-drag-release from and to outside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ mousePress(control, control.width - 1)
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ mouseMove(control, control.width - control.rightPadding)
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ mouseMove(control, control.width / 2)
+ compare(control.position, 0.5)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ mouseMove(control, control.width - control.rightPadding)
+ compare(control.position, 1.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ mouseRelease(control, control.width)
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+ }
+
+ function test_touchDrag() {
+ var control = createTemporaryObject(switchDelegate, testCase, {leftPadding: 100, rightPadding: 100})
+ verify(control)
+
+ var touch = touchEvent(control)
+
+ var spy = signalSequenceSpy.createObject(control, {target: control})
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+
+ // press-drag-release inside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ touch.press(0, control.indicator, 0).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ touch.move(0, control.indicator, control.width).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control.indicator, control.indicator.width).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // press-drag-release outside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": true }],
+ "pressed"]
+ touch.press(0, control, 0).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ touch.move(0, control, control.width - control.rightPadding).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ touch.move(0, control, control.width / 2).commit()
+ compare(control.position, 0.5)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ touch.move(0, control, control.leftPadding).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, true)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": true }],
+ ["checkedChanged", { "pressed": false, "checked": false }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, false)
+ verify(spy.success)
+
+ // press-drag-release from and to outside the indicator
+ spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }],
+ "pressed"]
+ wait(Qt.styleHints.mouseDoubleClickInterval + 50)
+ touch.press(0, control, control.width - 1).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+ verify(spy.success)
+
+ touch.move(0, control, control.width - control.rightPadding).commit()
+ compare(control.position, 0.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ touch.move(0, control, control.width / 2).commit()
+ compare(control.position, 0.5)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ touch.move(0, control, control.width - control.rightPadding).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, false)
+ compare(control.pressed, true)
+
+ spy.expectedSequence = [["pressedChanged", { "pressed": false, "checked": false }],
+ ["checkedChanged", { "pressed": false, "checked": true }],
+ "toggled",
+ "released",
+ "clicked"]
+ touch.release(0, control, control.width).commit()
+ compare(control.position, 1.0)
+ compare(control.checked, true)
+ compare(control.pressed, false)
+ verify(spy.success)
+ }
+
+ function test_spacing() {
+ var control = createTemporaryObject(switchDelegate, testCase, { text: "Some long, long, long text" })
+ verify(control)
+ verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
+
+ var textLabel = findChild(control.contentItem, "label")
+ verify(textLabel)
+
+ // The implicitWidth of the IconLabel that all buttons use as their contentItem should be
+ // equal to the implicitWidth of the Text and the switch indicator + spacing while no icon is set.
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing)
+
+ control.spacing += 100
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing)
+
+ compare(control.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing + control.leftPadding + control.rightPadding)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: SwitchDelegate.IconOnly },
+ { "tag": "TextOnly", display: SwitchDelegate.TextOnly },
+ { "tag": "TextUnderIcon", display: SwitchDelegate.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: SwitchDelegate.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: SwitchDelegate.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: SwitchDelegate.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: SwitchDelegate.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: SwitchDelegate.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(switchDelegate, testCase, {
+ text: "SwitchDelegate",
+ display: data.display,
+ width: 400,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ var availableWidth = control.availableWidth - control.indicator.width - control.spacing
+ var indicatorOffset = control.mirrored ? control.indicator.width + control.spacing : 0
+
+ switch (control.display) {
+ case SwitchDelegate.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, indicatorOffset + (availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case SwitchDelegate.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, control.mirrored ? control.availableWidth - textLabel.width : 0)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case SwitchDelegate.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, indicatorOffset + (availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, indicatorOffset + (availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case SwitchDelegate.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_tabbar.qml b/tests/auto/quickcontrols2/controls/data/tst_tabbar.qml
new file mode 100644
index 0000000000..500340c57a
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_tabbar.qml
@@ -0,0 +1,775 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "TabBar"
+
+ Component {
+ id: tabButton
+ TabButton { }
+ }
+
+ Component {
+ id: tabBar
+ TabBar { }
+ }
+
+ Component {
+ id: tabBarStaticTabs
+ TabBar {
+ TabButton {
+ text: "0"
+ }
+ TabButton {
+ text: "1"
+ }
+ }
+ }
+
+ Component {
+ id: tabBarStaticTabsCurrent
+ TabBar {
+ currentIndex: 1
+ TabButton {
+ text: "0"
+ }
+ TabButton {
+ text: "1"
+ }
+ }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_defaults() {
+ var control = createTemporaryObject(tabBar, testCase)
+ verify(control)
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentItem, null)
+ }
+
+ function test_current() {
+ var control = createTemporaryObject(tabBar, testCase)
+
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(control.currentItem, null)
+
+ control.addItem(tabButton.createObject(control, {text: "0"}))
+ compare(control.count, 1)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "0")
+ compare(control.currentItem.checked, true)
+
+ control.addItem(tabButton.createObject(control, {text: "1"}))
+ compare(control.count, 2)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "0")
+ compare(control.currentItem.checked, true)
+
+ control.addItem(tabButton.createObject(control, {text: "2"}))
+ compare(control.count, 3)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "0")
+ compare(control.currentItem.checked, true)
+
+ control.currentIndex = 1
+ compare(control.currentIndex, 1)
+ compare(control.currentItem.text, "1")
+ compare(control.currentItem.checked, true)
+
+ control.currentIndex = 2
+ compare(control.currentIndex, 2)
+ compare(control.currentItem.text, "2")
+ compare(control.currentItem.checked, true)
+
+ control.decrementCurrentIndex()
+ compare(control.currentIndex, 1)
+ compare(control.currentItem.text, "1")
+ compare(control.currentItem.checked, true)
+
+ control.incrementCurrentIndex()
+ compare(control.currentIndex, 2)
+ compare(control.currentItem.text, "2")
+ compare(control.currentItem.checked, true)
+ }
+
+ function test_current_static() {
+ var control = createTemporaryObject(tabBarStaticTabs, testCase)
+
+ compare(control.count, 2)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "0")
+ compare(control.currentItem.checked, true)
+
+ control = createTemporaryObject(tabBarStaticTabsCurrent, testCase)
+
+ compare(control.count, 2)
+ compare(control.currentIndex, 1)
+ compare(control.currentItem.text, "1")
+ compare(control.currentItem.checked, true)
+ }
+
+ function test_addRemove() {
+ var control = createTemporaryObject(tabBar, testCase)
+
+ function verifyCurrentIndexCountDiff() {
+ verify(control.currentIndex < control.count)
+ }
+ control.currentIndexChanged.connect(verifyCurrentIndexCountDiff)
+ control.countChanged.connect(verifyCurrentIndexCountDiff)
+
+ var contentChildrenSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "contentChildrenChanged"})
+ verify(contentChildrenSpy.valid)
+
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ control.addItem(tabButton.createObject(control, {text: "1"}))
+ compare(control.count, 1)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "1")
+ compare(contentChildrenSpy.count, 1)
+
+ control.addItem(tabButton.createObject(control, {text: "2"}))
+ compare(control.count, 2)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "1")
+ compare(control.itemAt(0).text, "1")
+ compare(control.itemAt(1).text, "2")
+ compare(contentChildrenSpy.count, 2)
+
+ control.currentIndex = 1
+
+ control.insertItem(1, tabButton.createObject(control, {text: "3"}))
+ compare(control.count, 3)
+ compare(control.currentIndex, 2)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "1")
+ compare(control.itemAt(1).text, "3")
+ compare(control.itemAt(2).text, "2")
+ compare(contentChildrenSpy.count, 4) // append + insert->move
+
+ control.insertItem(0, tabButton.createObject(control, {text: "4"}))
+ compare(control.count, 4)
+ compare(control.currentIndex, 3)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "4")
+ compare(control.itemAt(1).text, "1")
+ compare(control.itemAt(2).text, "3")
+ compare(control.itemAt(3).text, "2")
+ compare(contentChildrenSpy.count, 6) // append + insert->move
+
+ control.insertItem(control.count, tabButton.createObject(control, {text: "5"}))
+ compare(control.count, 5)
+ compare(control.currentIndex, 3)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "4")
+ compare(control.itemAt(1).text, "1")
+ compare(control.itemAt(2).text, "3")
+ compare(control.itemAt(3).text, "2")
+ compare(control.itemAt(4).text, "5")
+ compare(contentChildrenSpy.count, 7)
+
+ control.removeItem(control.itemAt(control.count - 1))
+ compare(control.count, 4)
+ compare(control.currentIndex, 3)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "4")
+ compare(control.itemAt(1).text, "1")
+ compare(control.itemAt(2).text, "3")
+ compare(control.itemAt(3).text, "2")
+ compare(contentChildrenSpy.count, 8)
+
+ control.removeItem(control.itemAt(0))
+ compare(control.count, 3)
+ compare(control.currentIndex, 2)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "1")
+ compare(control.itemAt(1).text, "3")
+ compare(control.itemAt(2).text, "2")
+ compare(contentChildrenSpy.count, 9)
+
+ control.removeItem(control.itemAt(1))
+ compare(control.count, 2)
+ compare(control.currentIndex, 1)
+ compare(control.currentItem.text, "2")
+ compare(control.itemAt(0).text, "1")
+ compare(control.itemAt(1).text, "2")
+ compare(contentChildrenSpy.count, 10)
+
+ control.removeItem(control.itemAt(1))
+ compare(control.count, 1)
+ compare(control.currentIndex, 0)
+ compare(control.currentItem.text, "1")
+ compare(control.itemAt(0).text, "1")
+ compare(contentChildrenSpy.count, 11)
+
+ control.removeItem(control.itemAt(0))
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ compare(contentChildrenSpy.count, 12)
+ }
+
+ function test_removeCurrent() {
+ var control = createTemporaryObject(tabBar, testCase)
+
+ control.addItem(tabButton.createObject(control, {text: "1"}))
+ control.addItem(tabButton.createObject(control, {text: "2"}))
+ control.addItem(tabButton.createObject(control, {text: "3"}))
+ control.currentIndex = 1
+ compare(control.count, 3)
+ compare(control.currentIndex, 1)
+
+ control.removeItem(control.itemAt(1))
+ compare(control.count, 2)
+ compare(control.currentIndex, 0)
+
+ control.removeItem(control.itemAt(0))
+ compare(control.count, 1)
+ compare(control.currentIndex, 0)
+
+ control.removeItem(control.itemAt(0))
+ compare(control.count, 0)
+ compare(control.currentIndex, -1)
+ }
+
+ Component {
+ id: contentBar
+ TabBar {
+ QtObject { objectName: "object" }
+ TabButton { objectName: "button1" }
+ Timer { objectName: "timer" }
+ TabButton { objectName: "button2" }
+ Component { TabButton { } }
+ }
+ }
+
+ function test_content() {
+ var control = createTemporaryObject(contentBar, testCase)
+
+ function compareObjectNames(content, names) {
+ if (content.length !== names.length)
+ return false
+ for (var i = 0; i < names.length; ++i) {
+ if (content[i].objectName !== names[i])
+ return false
+ }
+ return true
+ }
+
+ var contentChildrenSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "contentChildrenChanged"})
+ verify(contentChildrenSpy.valid)
+
+ verify(compareObjectNames(control.contentData, ["object", "button1", "timer", "button2", ""]))
+ verify(compareObjectNames(control.contentChildren, ["button1", "button2"]))
+
+ control.addItem(tabButton.createObject(control, {objectName: "button3"}))
+ verify(compareObjectNames(control.contentData, ["object", "button1", "timer", "button2", "", "button3"]))
+ verify(compareObjectNames(control.contentChildren, ["button1", "button2", "button3"]))
+ compare(contentChildrenSpy.count, 1)
+
+ control.insertItem(0, tabButton.createObject(control, {objectName: "button4"}))
+ verify(compareObjectNames(control.contentData, ["object", "button1", "timer", "button2", "", "button3", "button4"]))
+ verify(compareObjectNames(control.contentChildren, ["button4", "button1", "button2", "button3"]))
+ compare(contentChildrenSpy.count, 3) // append + insert->move
+
+ control.moveItem(1, 2)
+ verify(compareObjectNames(control.contentData, ["object", "button1", "timer", "button2", "", "button3", "button4"]))
+ verify(compareObjectNames(control.contentChildren, ["button4", "button2", "button1", "button3"]))
+ compare(contentChildrenSpy.count, 4)
+
+ control.removeItem(control.itemAt(0))
+ verify(compareObjectNames(control.contentData, ["object", "button1", "timer", "button2", "", "button3"]))
+ verify(compareObjectNames(control.contentChildren, ["button2", "button1", "button3"]))
+ compare(contentChildrenSpy.count, 5)
+ }
+
+ Component {
+ id: repeated
+ TabBar {
+ property alias repeater: repeater
+ Repeater {
+ id: repeater
+ model: 5
+ TabButton { property int idx: index }
+ }
+ }
+ }
+
+ function test_repeater() {
+ var control = createTemporaryObject(repeated, testCase)
+ verify(control)
+
+ var model = control.contentModel
+ verify(model)
+
+ var repeater = control.repeater
+ verify(repeater)
+
+ compare(repeater.count, 5)
+ compare(model.count, 5)
+
+ for (var i = 0; i < 5; ++i) {
+ var item1 = control.itemAt(i)
+ verify(item1)
+ compare(item1.idx, i)
+ compare(model.get(i), item1)
+ compare(repeater.itemAt(i), item1)
+ }
+
+ repeater.model = 3
+ compare(repeater.count, 3)
+ compare(model.count, 3)
+
+ for (var j = 0; j < 3; ++j) {
+ var item2 = control.itemAt(j)
+ verify(item2)
+ compare(item2.idx, j)
+ compare(model.get(j), item2)
+ compare(repeater.itemAt(j), item2)
+ }
+ }
+
+ Component {
+ id: ordered
+ TabBar {
+ id: obar
+ property alias repeater: repeater
+ TabButton { text: "static_1" }
+ Repeater {
+ id: repeater
+ model: 2
+ TabButton { text: "repeated_" + (index + 2) }
+ }
+ TabButton { text: "static_4" }
+ Component.onCompleted: {
+ addItem(tabButton.createObject(obar, {text: "dynamic_5"}))
+ addItem(tabButton.createObject(obar.contentItem, {text: "dynamic_6"}))
+ insertItem(0, tabButton.createObject(obar, {text: "dynamic_0"}))
+ }
+ }
+ }
+
+ function test_order() {
+ var control = createTemporaryObject(ordered, testCase)
+ verify(control)
+
+ compare(control.count, 7)
+ compare(control.itemAt(0).text, "dynamic_0")
+ compare(control.itemAt(1).text, "static_1")
+ compare(control.itemAt(2).text, "repeated_2")
+ compare(control.itemAt(3).text, "repeated_3")
+ compare(control.itemAt(4).text, "static_4")
+ compare(control.itemAt(5).text, "dynamic_5")
+ compare(control.itemAt(6).text, "dynamic_6")
+ }
+
+ function test_move_data() {
+ return [
+ {tag:"0->1 (0)", from: 0, to: 1, currentBefore: 0, currentAfter: 1},
+ {tag:"0->1 (1)", from: 0, to: 1, currentBefore: 1, currentAfter: 0},
+ {tag:"0->1 (2)", from: 0, to: 1, currentBefore: 2, currentAfter: 2},
+
+ {tag:"0->2 (0)", from: 0, to: 2, currentBefore: 0, currentAfter: 2},
+ {tag:"0->2 (1)", from: 0, to: 2, currentBefore: 1, currentAfter: 0},
+ {tag:"0->2 (2)", from: 0, to: 2, currentBefore: 2, currentAfter: 1},
+
+ {tag:"1->0 (0)", from: 1, to: 0, currentBefore: 0, currentAfter: 1},
+ {tag:"1->0 (1)", from: 1, to: 0, currentBefore: 1, currentAfter: 0},
+ {tag:"1->0 (2)", from: 1, to: 0, currentBefore: 2, currentAfter: 2},
+
+ {tag:"1->2 (0)", from: 1, to: 2, currentBefore: 0, currentAfter: 0},
+ {tag:"1->2 (1)", from: 1, to: 2, currentBefore: 1, currentAfter: 2},
+ {tag:"1->2 (2)", from: 1, to: 2, currentBefore: 2, currentAfter: 1},
+
+ {tag:"2->0 (0)", from: 2, to: 0, currentBefore: 0, currentAfter: 1},
+ {tag:"2->0 (1)", from: 2, to: 0, currentBefore: 1, currentAfter: 2},
+ {tag:"2->0 (2)", from: 2, to: 0, currentBefore: 2, currentAfter: 0},
+
+ {tag:"2->1 (0)", from: 2, to: 1, currentBefore: 0, currentAfter: 0},
+ {tag:"2->1 (1)", from: 2, to: 1, currentBefore: 1, currentAfter: 2},
+ {tag:"2->1 (2)", from: 2, to: 1, currentBefore: 2, currentAfter: 1},
+
+ {tag:"0->0", from: 0, to: 0, currentBefore: 0, currentAfter: 0},
+ {tag:"-1->0", from: 0, to: 0, currentBefore: 1, currentAfter: 1},
+ {tag:"0->-1", from: 0, to: 0, currentBefore: 2, currentAfter: 2},
+ {tag:"1->10", from: 0, to: 0, currentBefore: 0, currentAfter: 0},
+ {tag:"10->2", from: 0, to: 0, currentBefore: 1, currentAfter: 1},
+ {tag:"10->-1", from: 0, to: 0, currentBefore: 2, currentAfter: 2}
+ ]
+ }
+
+ function test_move(data) {
+ var control = createTemporaryObject(tabBar, testCase)
+
+ compare(control.count, 0)
+ var titles = ["1", "2", "3"]
+
+ var i = 0;
+ for (i = 0; i < titles.length; ++i)
+ control.addItem(tabButton.createObject(control, {text: titles[i]}))
+
+ compare(control.count, titles.length)
+ for (i = 0; i < control.count; ++i)
+ compare(control.itemAt(i).text, titles[i])
+
+ control.currentIndex = data.currentBefore
+ control.moveItem(data.from, data.to)
+
+ compare(control.count, titles.length)
+ compare(control.currentIndex, data.currentAfter)
+
+ var title = titles[data.from]
+ titles.splice(data.from, 1)
+ titles.splice(data.to, 0, title)
+
+ compare(control.count, titles.length)
+ for (i = 0; i < control.count; ++i)
+ compare(control.itemAt(i).text, titles[i])
+ }
+
+ Component {
+ id: dynamicBar
+ TabBar {
+ id: dbar
+ TabButton { text: "static" }
+ Component.onCompleted: {
+ addItem(tabButton.createObject(dbar, {text: "added"}))
+ insertItem(0, tabButton.createObject(dbar, {text: "inserted"}))
+ tabButton.createObject(dbar, {text: "dynamic"})
+ }
+ }
+ }
+
+ function test_dynamic() {
+ var control = createTemporaryObject(dynamicBar, testCase)
+
+ // insertItem(), addItem(), createObject() and static TabButton {}
+ compare(control.count, 4)
+ compare(control.itemAt(0).text, "inserted")
+
+ var tab = tabButton.createObject(control, {text: "dying"})
+ compare(control.count, 5)
+ compare(control.itemAt(4).text, "dying")
+
+ // TODO: fix crash in QQuickItemView
+// tab.destroy()
+// wait(0)
+// compare(control.count, 4)
+ }
+
+ function test_layout_data() {
+ return [
+ { tag: "spacing:0", spacing: 0 },
+ { tag: "spacing:1", spacing: 1 },
+ { tag: "spacing:10", spacing: 10 },
+ ]
+ }
+
+ function test_layout(data) {
+ var control = createTemporaryObject(tabBar, testCase, {spacing: data.spacing, width: 200})
+
+ // remove the background so that it won't affect the implicit size of the tabbar,
+ // so the implicit sizes tested below are entirely based on the content size
+ control.background = null
+
+ var tab1 = tabButton.createObject(control, {text: "First"})
+ control.addItem(tab1)
+ tryCompare(tab1, "width", control.width)
+ compare(tab1.height, control.height)
+ compare(control.implicitContentWidth, tab1.implicitWidth)
+ compare(control.implicitContentHeight, tab1.implicitHeight)
+ compare(control.contentWidth, control.implicitContentWidth)
+ compare(control.contentHeight, control.implicitContentHeight)
+ compare(control.implicitWidth, control.contentWidth + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentHeight + control.topPadding + control.bottomPadding)
+
+ var tab2 = tabButton.createObject(control, {implicitHeight: tab1.implicitHeight + 10, text: "Second"})
+ control.addItem(tab2)
+ tryCompare(tab1, "width", (control.width - data.spacing) / 2)
+ compare(tab1.height, control.height)
+ compare(tab2.width, (control.width - data.spacing) / 2)
+ compare(tab2.height, control.height)
+ compare(control.implicitContentWidth, tab1.implicitWidth + tab2.implicitWidth + data.spacing)
+ compare(control.implicitContentHeight, tab2.implicitHeight)
+ compare(control.contentWidth, control.implicitContentWidth)
+ compare(control.contentHeight, control.implicitContentHeight)
+ compare(control.implicitWidth, control.contentWidth + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentHeight + control.topPadding + control.bottomPadding)
+
+ var tab3 = tabButton.createObject(control, {width: 50, height: tab1.implicitHeight - 10, text: "Third"})
+ control.addItem(tab3)
+ tryCompare(tab1, "width", (control.width - 2 * data.spacing - 50) / 2)
+ compare(tab1.y, 0)
+ compare(tab1.height, control.height)
+ compare(tab2.y, 0)
+ compare(tab2.width, (control.width - 2 * data.spacing - 50) / 2)
+ compare(tab2.height, control.height)
+ verify(tab3.y > 0)
+ compare(tab3.y, (control.height - tab3.height) / 2)
+ compare(tab3.width, 50)
+ compare(tab3.height, tab1.implicitHeight - 10)
+ compare(control.implicitContentWidth, tab1.implicitWidth + tab2.implicitWidth + tab3.width + 2 * data.spacing)
+ compare(control.implicitContentHeight, tab2.implicitHeight)
+ compare(control.contentWidth, control.implicitContentWidth)
+ compare(control.contentHeight, control.implicitContentHeight)
+ compare(control.implicitWidth, control.contentWidth + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentHeight + control.topPadding + control.bottomPadding)
+
+ var expectedWidth = tab3.contentItem.implicitWidth + tab3.leftPadding + tab3.rightPadding
+ tab3.width = tab3.implicitWidth
+ tab3.height = tab3.implicitHeight
+ tryCompare(tab1, "width", (control.width - 2 * data.spacing - expectedWidth) / 2)
+ compare(tab1.height, control.height)
+ compare(tab2.width, (control.width - 2 * data.spacing - expectedWidth) / 2)
+ compare(tab2.height, control.height)
+ compare(tab3.width, expectedWidth)
+ compare(tab3.height, tab3.implicitHeight)
+ compare(control.implicitContentWidth, tab1.implicitWidth + tab2.implicitWidth + tab3.implicitWidth + 2 * data.spacing)
+ compare(control.implicitContentHeight, tab2.implicitHeight)
+ compare(control.contentWidth, control.implicitContentWidth)
+ compare(control.contentHeight, control.implicitContentHeight)
+ compare(control.implicitWidth, control.contentWidth + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentHeight + control.topPadding + control.bottomPadding)
+
+ tab3.width = undefined
+ tab3.height = undefined
+ control.width = undefined
+
+ control.contentWidth = 300
+ control.contentHeight = 50
+ expectedWidth = (control.contentWidth - 2 * data.spacing) / 3
+ tryCompare(tab1, "width", expectedWidth)
+ compare(tab2.width, expectedWidth)
+ compare(tab3.width, expectedWidth)
+ compare(tab1.height, control.contentHeight)
+ compare(tab2.height, control.contentHeight)
+ compare(tab3.height, control.contentHeight)
+ }
+
+ Component {
+ id: wheelEnabledTabBar
+ TabBar {
+ wheelEnabled: true
+ TabButton { text: "tab1" }
+ TabButton { text: "tab2" }
+ }
+ }
+
+ function test_wheelEnabled() {
+ let control = createTemporaryObject(wheelEnabledTabBar, testCase, {width: 100, height: 100})
+ verify(control)
+
+ let deltas = [
+ 120, // common mouse wheel
+ 16 // high resolution mouse wheel
+ ]
+
+ for (let delta of deltas) {
+ // increment
+ for (let accumulated = 0; accumulated < 120; accumulated += delta) {
+ // ensure index doesn't change until threshold is reached
+ compare(control.currentIndex, 0)
+ mouseWheel(control, control.width / 2, control.height / 2, -delta, -delta)
+ }
+ compare(control.currentIndex, 1)
+
+ // reached bounds -> no change
+ for (let accumulated = 0; accumulated < 120; accumulated += delta) {
+ mouseWheel(control, control.width / 2, control.height / 2, -delta, -delta)
+ }
+ compare(control.currentIndex, 1)
+
+ // decrement
+ for (let accumulated = 0; accumulated < 120; accumulated += delta) {
+ // ensure index doesn't change until threshold is reached
+ compare(control.currentIndex, 1)
+ mouseWheel(control, control.width / 2, control.height / 2, delta, delta)
+ }
+ compare(control.currentIndex, 0)
+
+ // reached bounds -> no change
+ for (let accumulated = 0; accumulated < 120; accumulated += delta) {
+ mouseWheel(control, control.width / 2, control.height / 2, delta, delta)
+ }
+ compare(control.currentIndex, 0)
+ }
+ }
+
+ Component {
+ id: attachedButton
+ TabButton {
+ property int index: TabBar.index
+ property TabBar tabBar: TabBar.tabBar
+ property int position: TabBar.position
+ }
+ }
+
+ function test_attached() {
+ var control = createTemporaryObject(tabBar, testCase, {position: TabBar.Footer})
+
+ // append
+ var tab1 = createTemporaryObject(attachedButton, testCase)
+ compare(tab1.index, -1)
+ compare(tab1.tabBar, null)
+ compare(tab1.position, TabBar.Header)
+
+ control.addItem(tab1)
+ compare(tab1.index, 0)
+ compare(tab1.tabBar, control)
+ compare(tab1.position, TabBar.Footer)
+
+ // insert in the beginning
+ var tab2 = createTemporaryObject(attachedButton, testCase)
+ compare(tab2.index, -1)
+ compare(tab2.tabBar, null)
+ compare(tab2.position, TabBar.Header)
+
+ control.insertItem(0, tab2)
+ compare(tab2.index, 0)
+ compare(tab2.tabBar, control)
+ compare(tab2.position, TabBar.Footer)
+
+ compare(tab1.index, 1)
+
+ // insert in the middle
+ var tab3 = createTemporaryObject(attachedButton, testCase)
+ compare(tab3.index, -1)
+ compare(tab3.tabBar, null)
+ compare(tab3.position, TabBar.Header)
+
+ control.insertItem(1, tab3)
+ compare(tab3.index, 1)
+ compare(tab3.tabBar, control)
+ compare(tab3.position, TabBar.Footer)
+
+ compare(tab2.index, 0)
+ compare(tab1.index, 2)
+
+ // insert in the end
+ var tab4 = createTemporaryObject(attachedButton, testCase)
+ compare(tab4.index, -1)
+ compare(tab4.tabBar, null)
+ compare(tab4.position, TabBar.Header)
+
+ control.insertItem(-1, tab4)
+ compare(tab4.index, 3)
+ compare(tab4.tabBar, control)
+ compare(tab4.position, TabBar.Footer)
+
+ compare(tab2.index, 0)
+ compare(tab3.index, 1)
+ compare(tab1.index, 2)
+
+ // move forwards
+ control.moveItem(0, 1)
+ compare(tab3.index, 0)
+ compare(tab2.index, 1)
+ compare(tab1.index, 2)
+ compare(tab4.index, 3)
+
+ control.moveItem(0, 2)
+ compare(tab2.index, 0)
+ compare(tab1.index, 1)
+ compare(tab3.index, 2)
+ compare(tab4.index, 3)
+
+ control.moveItem(1, 3)
+ compare(tab2.index, 0)
+ compare(tab3.index, 1)
+ compare(tab4.index, 2)
+ compare(tab1.index, 3)
+
+ // move backwards
+ control.moveItem(3, 2)
+ compare(tab2.index, 0)
+ compare(tab3.index, 1)
+ compare(tab1.index, 2)
+ compare(tab4.index, 3)
+
+ control.moveItem(3, 1)
+ compare(tab2.index, 0)
+ compare(tab4.index, 1)
+ compare(tab3.index, 2)
+ compare(tab1.index, 3)
+
+ // remove from the beginning
+ control.removeItem(control.itemAt(0))
+ compare(tab2.index, -1)
+ compare(tab2.tabBar, null)
+ compare(tab2.position, TabBar.Header)
+
+ compare(tab4.index, 0)
+ compare(tab3.index, 1)
+ compare(tab1.index, 2)
+
+ // remove from the middle
+ control.removeItem(control.itemAt(1))
+ compare(tab3.index, -1)
+ compare(tab3.tabBar, null)
+ compare(tab3.position, TabBar.Header)
+
+ compare(tab4.index, 0)
+ compare(tab1.index, 1)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_tabbutton.qml b/tests/auto/quickcontrols2/controls/data/tst_tabbutton.qml
new file mode 100644
index 0000000000..3f8092099b
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_tabbutton.qml
@@ -0,0 +1,178 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "TabButton"
+
+ Component {
+ id: tabButton
+ TabButton { }
+ }
+
+ Component {
+ id: repeater
+ Column {
+ Repeater {
+ model: 3
+ delegate: TabButton { }
+ }
+ }
+ }
+
+ function test_autoExclusive() {
+ var container = createTemporaryObject(repeater, testCase)
+
+ for (var i = 0; i < 3; ++i) {
+ container.children[i].checked = true
+ compare(container.children[i].checked, true)
+
+ // check that all other buttons are unchecked
+ for (var j = 0; j < 3; ++j) {
+ if (j !== i)
+ compare(container.children[j].checked, false)
+ }
+ }
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(tabButton, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ function test_spacing() {
+ var control = createTemporaryObject(tabButton, testCase, { text: "Some long, long, long text" })
+ verify(control)
+ if (control.background)
+ verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
+
+ var textLabel = findChild(control.contentItem, "label")
+ verify(textLabel)
+
+ // The implicitWidth of the IconLabel that all buttons use as their contentItem
+ // should be equal to the implicitWidth of the Text while no icon is set.
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // That means that spacing shouldn't affect it.
+ control.spacing += 100
+ compare(control.contentItem.implicitWidth, textLabel.implicitWidth)
+
+ // The implicitWidth of the TabButton itself should, therefore, also never include spacing while no icon is set.
+ compare(control.implicitWidth, textLabel.implicitWidth + control.leftPadding + control.rightPadding)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: TabButton.IconOnly },
+ { "tag": "TextOnly", display: TabButton.TextOnly },
+ { "tag": "TextUnderIcon", display: TabButton.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: TabButton.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: TabButton.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: TabButton.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: TabButton.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: TabButton.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(tabButton, testCase, {
+ text: "TabButton",
+ display: data.display,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ switch (control.display) {
+ case TabButton.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case TabButton.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case TabButton.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case TabButton.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_textarea.qml b/tests/auto/quickcontrols2/controls/data/tst_textarea.qml
new file mode 100644
index 0000000000..5fcc4773dc
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_textarea.qml
@@ -0,0 +1,804 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "TextArea"
+
+ Component {
+ id: textArea
+ TextArea { background: Item { } }
+ }
+
+ Component {
+ id: flickable
+ Flickable {
+ width: 200
+ height: 200
+ TextArea.flickable: TextArea { }
+ }
+ }
+
+ Component {
+ id: flickableCustomBackground
+ Flickable {
+ width: 200
+ height: 200
+ TextArea.flickable: TextArea {
+ background: Rectangle {
+ color: "green"
+ }
+ }
+ }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component {
+ id: rectangle
+ Rectangle { }
+ }
+
+ FontMetrics {
+ id: defaultFontMetrics
+ }
+
+ function test_creation() {
+ var control = createTemporaryObject(textArea, testCase)
+ verify(control)
+ }
+
+ function test_implicitSize() {
+ var control = createTemporaryObject(textArea, testCase)
+ verify(control)
+
+ var implicitWidthSpy = signalSpy.createObject(control, { target: control, signalName: "implicitWidthChanged"} )
+ verify(implicitWidthSpy.valid)
+
+ var implicitHeightSpy = signalSpy.createObject(control, { target: control, signalName: "implicitHeightChanged"} )
+ verify(implicitHeightSpy.valid)
+
+ var implicitBackgroundWidthSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitBackgroundWidthChanged"})
+ verify(implicitBackgroundWidthSpy.valid)
+
+ var implicitBackgroundHeightSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitBackgroundHeightChanged"})
+ verify(implicitBackgroundHeightSpy.valid)
+
+ var implicitWidthChanges = 0
+ var implicitHeightChanges = 0
+ var implicitBackgroundWidthChanges = 0
+ var implicitBackgroundHeightChanges = 0
+
+ verify(control.implicitWidth >= control.leftPadding + control.rightPadding)
+ verify(control.implicitHeight >= control.contentHeight + control.topPadding + control.bottomPadding)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+
+ control.background = rectangle.createObject(control, {implicitWidth: 400, implicitHeight: 200})
+ compare(control.implicitWidth, 400)
+ compare(control.implicitHeight, 200)
+ compare(control.implicitBackgroundWidth, 400)
+ compare(control.implicitBackgroundHeight, 200)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, ++implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, ++implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, ++implicitBackgroundHeightChanges)
+
+ control.background = null
+ compare(control.implicitWidth, control.leftPadding + control.rightPadding)
+ verify(control.implicitHeight >= control.contentHeight + control.topPadding + control.bottomPadding)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, ++implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, ++implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, ++implicitBackgroundHeightChanges)
+
+ control.text = "TextArea"
+ compare(control.implicitWidth, control.contentWidth + control.leftPadding + control.rightPadding)
+ verify(control.implicitHeight >= control.contentHeight + control.topPadding + control.bottomPadding)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+
+ defaultFontMetrics.font = control.font
+ var leading = defaultFontMetrics.leading
+ var ascent = defaultFontMetrics.ascent
+ var descent = defaultFontMetrics.descent
+
+ var leadingOverflow = Math.ceil(ascent + descent) < Math.ceil(ascent + descent + leading)
+
+ // If the font in use triggers QTBUG-83894, it is possible that this will cause
+ // the following compare to fail if the implicitHeight from the TextEdit is ued.
+ // Unfortunately, since some styles override implicitHeight, we cannot guarantee
+ // that it will fail, so we need to simply skip the test for these cases.
+ if (!leadingOverflow)
+ compare(implicitHeightSpy.count, implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, implicitBackgroundHeightChanges)
+
+ control.placeholderText = "..."
+ compare(control.implicitWidth, control.contentWidth + control.leftPadding + control.rightPadding)
+ verify(control.implicitHeight >= control.contentHeight + control.topPadding + control.bottomPadding)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+ compare(implicitWidthSpy.count, implicitWidthChanges)
+ if (!leadingOverflow)
+ compare(implicitHeightSpy.count, implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, implicitBackgroundHeightChanges)
+ }
+
+ function test_alignment_data() {
+ return [
+ { tag: "empty", text: "", placeholderText: "", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,left", text: "", placeholderText: "", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,center", text: "", placeholderText: "", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "empty,right", text: "", placeholderText: "", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "empty,ltr", text: "", placeholderText: "Search", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,ltr,left", text: "", placeholderText: "Search", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,ltr,center", text: "", placeholderText: "Search", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "empty,ltr,right", text: "", placeholderText: "Search", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "empty,rtl", text: "", placeholderText: "بحث", textAlignment: undefined, placeholderAlignment: Qt.AlignRight },
+ { tag: "empty,rtl,left", text: "", placeholderText: "بحث", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,rtl,center", text: "", placeholderText: "بحث", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "empty,rtl,right", text: "", placeholderText: "بحث", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "ltr,empty", text: "Text", placeholderText: "", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,empty,left", text: "Text", placeholderText: "", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,empty,center", text: "Text", placeholderText: "", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "ltr,empty,right", text: "Text", placeholderText: "", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "ltr,ltr", text: "Text", placeholderText: "Search", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,ltr,left", text: "Text", placeholderText: "Search", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,ltr,center", text: "Text", placeholderText: "Search", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "ltr,ltr,right", text: "Text", placeholderText: "Search", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "ltr,rtl", text: "Text", placeholderText: "بحث", textAlignment: undefined, placeholderAlignment: Qt.AlignRight },
+ { tag: "ltr,rtl,left", text: "Text", placeholderText: "بحث", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,rtl,center", text: "Text", placeholderText: "بحث", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "ltr,rtl,right", text: "Text", placeholderText: "بحث", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "rtl,empty", text: "نص", placeholderText: "", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,empty,left", text: "نص", placeholderText: "", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,empty,center", text: "نص", placeholderText: "", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "rtl,empty,right", text: "نص", placeholderText: "", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "rtl,ltr", text: "نص", placeholderText: "Search", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,ltr,left", text: "نص", placeholderText: "Search", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,ltr,center", text: "نص", placeholderText: "Search", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "rtl,ltr,right", text: "نص", placeholderText: "Search", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "rtl,rtl", text: "نص", placeholderText: "بحث", textAlignment: undefined, placeholderAlignment: Qt.AlignRight },
+ { tag: "rtl,rtl,left", text: "نص", placeholderText: "بحث", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,rtl,center", text: "نص", placeholderText: "بحث", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "rtl,rtl,right", text: "نص", placeholderText: "بحث", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+ ]
+ }
+
+ function test_alignment(data) {
+ var control = createTemporaryObject(textArea, testCase, {text: data.text, placeholderText: data.placeholderText, horizontalAlignment: data.textAlignment})
+
+ if (data.textAlignment !== undefined)
+ compare(control.horizontalAlignment, data.textAlignment)
+ for (var i = 0; i < control.children.length; ++i) {
+ if (control.children[i].hasOwnProperty("horizontalAlignment"))
+ compare(control.children[i].effectiveHorizontalAlignment, data.placeholderAlignment) // placeholder
+ }
+
+ control.verticalAlignment = TextArea.AlignBottom
+ compare(control.verticalAlignment, TextArea.AlignBottom)
+ for (var j = 0; j < control.children.length; ++j) {
+ if (control.children[j].hasOwnProperty("verticalAlignment"))
+ compare(control.children[j].verticalAlignment, Text.AlignBottom) // placeholder
+ }
+ }
+
+ function test_font_explicit_attributes_data() {
+ return [
+ {tag: "bold", value: true},
+ {tag: "capitalization", value: Font.Capitalize},
+ {tag: "family", value: "Courier"},
+ {tag: "italic", value: true},
+ {tag: "strikeout", value: true},
+ {tag: "underline", value: true},
+ {tag: "weight", value: Font.Black},
+ {tag: "wordSpacing", value: 55}
+ ]
+ }
+
+ function test_font_explicit_attributes(data) {
+ var control = createTemporaryObject(textArea, testCase)
+ verify(control)
+
+ var child = textArea.createObject(control)
+ verify(child)
+
+ var controlSpy = signalSpy.createObject(control, {target: control, signalName: "fontChanged"})
+ verify(controlSpy.valid)
+
+ var childSpy = signalSpy.createObject(child, {target: child, signalName: "fontChanged"})
+ verify(childSpy.valid)
+
+ var defaultValue = control.font[data.tag]
+ child.font[data.tag] = defaultValue
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.font[data.tag] = data.value
+
+ compare(control.font[data.tag], data.value)
+ compare(controlSpy.count, 1)
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+ }
+
+ function test_flickable() {
+ var control = createTemporaryObject(flickable, testCase, {text:"line0", selectByMouse: true})
+ verify(control)
+
+ var textArea = control.TextArea.flickable
+ verify(textArea)
+
+ if (textArea.background)
+ compare(textArea.background.parent, control)
+
+ for (var i = 1; i <= 100; ++i)
+ textArea.text += "line\n" + i
+
+ verify(textArea.contentWidth > 0)
+ verify(textArea.contentHeight > 200)
+
+ compare(control.contentWidth, textArea.contentWidth + textArea.leftPadding + textArea.rightPadding)
+ compare(control.contentHeight, textArea.contentHeight + textArea.topPadding + textArea.bottomPadding)
+
+ compare(textArea.cursorPosition, 0)
+
+ var center = textArea.positionAt(control.width / 2, control.height / 2)
+ verify(center > 0)
+ mouseClick(textArea, control.width / 2, control.height / 2)
+ compare(textArea.cursorPosition, center)
+
+ // click inside text area, but below flickable
+ var below = textArea.positionAt(control.width / 2, control.height + 1)
+ verify(below > center)
+ mouseClick(textArea, control.width / 2, control.height + 1)
+ compare(textArea.cursorPosition, center) // no change
+
+ // scroll down
+ control.contentY = -(control.contentHeight - control.height) / 2
+
+ // click inside textarea, but above flickable
+ var above = textArea.positionAt(control.width / 2, textArea.topPadding)
+ verify(above > 0 && above < center)
+ mouseClick(textArea, control.width / 2, 0)
+ compare(textArea.cursorPosition, center) // no change
+ }
+
+ function test_flickableCustomBackground() {
+ // Test that the TextArea background item is parented out of the
+ // TextArea and into the Flicable, and that it has the same size
+ // as the flickable.
+ var flickable = createTemporaryObject(flickableCustomBackground, testCase)
+ verify(flickable)
+
+ var textArea = flickable.TextArea.flickable
+ verify(textArea)
+ verify(textArea.background)
+ compare(textArea.background.width, flickable.width)
+ compare(textArea.background.height, flickable.height)
+ }
+
+ function test_warning() {
+ ignoreWarning(/QML TestCase: TextArea must be attached to a Flickable/)
+ testCase.TextArea.flickable = null
+ }
+
+ function test_hover_data() {
+ return [
+ { tag: "enabled", hoverEnabled: true },
+ { tag: "disabled", hoverEnabled: false },
+ ]
+ }
+
+ function test_hover(data) {
+ var control = createTemporaryObject(textArea, testCase, {text: "TextArea", hoverEnabled: data.hoverEnabled})
+ verify(control)
+
+ compare(control.hovered, false)
+
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.hovered, data.hoverEnabled)
+
+ mouseMove(control, -1, -1)
+ compare(control.hovered, false)
+ }
+
+ function test_pressedReleased_data() {
+ return [
+ {
+ tag: "pressed outside", x: -1, y: -1, button: Qt.LeftButton,
+ controlPressEvent: null,
+ controlReleaseEvent: null,
+ parentPressEvent: {
+ x: 0, y: 0, button: Qt.LeftButton, buttons: Qt.LeftButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ parentReleaseEvent: {
+ x: 0, y: 0, button: Qt.LeftButton, buttons: Qt.NoButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ },
+ {
+ tag: "left click", x: 0, y: 0, button: Qt.LeftButton,
+ controlPressEvent: {
+ x: 0, y: 0, button: Qt.LeftButton, buttons: Qt.LeftButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ controlReleaseEvent: {
+ x: 0, y: 0, button: Qt.LeftButton, buttons: Qt.NoButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ parentPressEvent: null,
+ parentReleaseEvent: null,
+ },
+ {
+ tag: "right click", x: 0, y: 0, button: Qt.RightButton,
+ controlPressEvent: {
+ x: 0, y: 0, button: Qt.RightButton, buttons: Qt.RightButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ controlReleaseEvent: {
+ x: 0, y: 0, button: Qt.RightButton, buttons: Qt.NoButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ parentPressEvent: null,
+ parentReleaseEvent: null,
+ },
+ ];
+ }
+
+ Component {
+ id: mouseAreaComponent
+ MouseArea {
+ anchors.fill: parent
+ }
+ }
+
+ function checkMouseEvent(event, expectedEvent) {
+ compare(event.x, expectedEvent.x)
+ compare(event.y, expectedEvent.y)
+ compare(event.button, expectedEvent.button)
+ compare(event.buttons, expectedEvent.buttons)
+ }
+
+ function test_pressedReleased(data) {
+ var mouseArea = createTemporaryObject(mouseAreaComponent, testCase)
+ verify(mouseArea)
+ var control = textArea.createObject(mouseArea, {text: "TextArea"})
+ verify(control)
+
+ // Give enough room to check presses outside of the control and on the parent.
+ control.x = 1;
+ control.y = 1;
+
+ function checkControlPressEvent(event) {
+ checkMouseEvent(event, data.controlPressEvent)
+ }
+ function checkControlReleaseEvent(event) {
+ checkMouseEvent(event, data.controlReleaseEvent)
+ }
+ function checkParentPressEvent(event) {
+ checkMouseEvent(event, data.parentPressEvent)
+ }
+ function checkParentReleaseEvent(event) {
+ checkMouseEvent(event, data.parentReleaseEvent)
+ }
+
+ // Can't use signalArguments, because the event won't live that long.
+ if (data.controlPressEvent)
+ control.onPressed.connect(checkControlPressEvent)
+ if (data.controlReleaseEvent)
+ control.onReleased.connect(checkControlReleaseEvent)
+ if (data.parentPressEvent)
+ control.onPressed.connect(checkParentPressEvent)
+ if (data.parentReleaseEvent)
+ control.onReleased.connect(checkParentReleaseEvent)
+
+ var controlPressedSpy = signalSpy.createObject(control, { target: control, signalName: "pressed" })
+ verify(controlPressedSpy.valid)
+ var controlReleasedSpy = signalSpy.createObject(control, { target: control, signalName: "released" })
+ verify(controlReleasedSpy.valid)
+ var parentPressedSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "pressed" })
+ verify(parentPressedSpy.valid)
+ var parentReleasedSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "released" })
+ verify(parentReleasedSpy.valid)
+
+ mousePress(control, data.x, data.y, data.button)
+ compare(controlPressedSpy.count, data.controlPressEvent ? 1 : 0)
+ compare(parentPressedSpy.count, data.parentPressEvent ? 1 : 0)
+ mouseRelease(control, data.x, data.y, data.button)
+ compare(controlReleasedSpy.count, data.controlReleaseEvent ? 1 : 0)
+ compare(parentReleasedSpy.count, data.parentReleaseEvent ? 1 : 0)
+ }
+
+ Component {
+ id: ignoreTextArea
+
+ TextArea {
+ property bool ignorePress: false
+ property bool ignoreRelease: false
+
+ onPressed: if (ignorePress) event.accepted = false
+ onReleased: if (ignoreRelease) event.accepted = false
+ }
+ }
+
+ function checkEventAccepted(event) {
+ compare(event.accepted, true)
+ }
+
+ function checkEventIgnored(event) {
+ compare(event.accepted, false)
+ }
+
+ function test_ignorePressRelease() {
+ var mouseArea = createTemporaryObject(mouseAreaComponent, testCase)
+ verify(mouseArea)
+ var control = ignoreTextArea.createObject(mouseArea)
+ verify(control)
+
+ var controlPressedSpy = signalSpy.createObject(control, { target: control, signalName: "pressed" })
+ verify(controlPressedSpy.valid)
+ var controlReleasedSpy = signalSpy.createObject(control, { target: control, signalName: "released" })
+ verify(controlReleasedSpy.valid)
+ var parentPressedSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "pressed" })
+ verify(parentPressedSpy.valid)
+ var parentReleasedSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "released" })
+ verify(parentReleasedSpy.valid)
+
+ // Ignore only press events.
+ control.onPressed.connect(checkEventIgnored)
+ control.ignorePress = true
+ mousePress(control, 0, 0, data.button)
+ // The control will still get the signal, it just won't accept the event.
+ compare(controlPressedSpy.count, 1)
+ compare(parentPressedSpy.count, 1)
+ mouseRelease(control, 0, 0, data.button)
+ compare(controlReleasedSpy.count, 0)
+ compare(parentReleasedSpy.count, 1)
+ control.onPressed.disconnect(checkEventIgnored)
+
+ // Ignore only release events.
+ control.onPressed.connect(checkEventAccepted)
+ control.onReleased.connect(checkEventIgnored)
+ control.ignorePress = false
+ control.ignoreRelease = true
+ mousePress(control, 0, 0, data.button)
+ compare(controlPressedSpy.count, 2)
+ compare(parentPressedSpy.count, 1)
+ mouseRelease(control, 0, 0, data.button)
+ compare(controlReleasedSpy.count, 1)
+ compare(parentReleasedSpy.count, 1)
+ control.onPressed.disconnect(checkEventAccepted)
+ control.onReleased.disconnect(checkEventIgnored)
+ }
+
+ function test_multiClick() {
+ var control = createTemporaryObject(textArea, testCase, {text: "Qt Quick Controls 2 TextArea", selectByMouse: true})
+ verify(control)
+
+ waitForRendering(control)
+ control.width = control.contentWidth
+ var rect = control.positionToRectangle(12)
+
+ // double click -> select word
+ mouseDoubleClickSequence(control, rect.x + rect.width / 2, rect.y + rect.height / 2)
+ compare(control.selectedText, "Controls")
+
+ // tripple click -> select whole line
+ mouseClick(control, rect.x + rect.width / 2, rect.y + rect.height / 2)
+ compare(control.selectedText, "Qt Quick Controls 2 TextArea")
+ }
+
+ Component {
+ id: scrollView
+ ScrollView {
+ TextArea { }
+ }
+ }
+
+ function test_scrollView() {
+ var control = createTemporaryObject(scrollView, testCase)
+ verify(control)
+
+ // don't crash (QTBUG-62292)
+ control.destroy()
+ wait(0)
+ }
+
+ function test_placeholderTextColor() {
+ var control = createTemporaryObject(textArea, testCase)
+ verify(control)
+
+ // usually default value should not be pure opacue black
+ verify(control.placeholderTextColor !== "#ff000000")
+ control.placeholderTextColor = "#12345678"
+ compare(control.placeholderTextColor, "#12345678")
+
+ for (var i = 0; i < control.children.length; ++i) {
+ if (control.children[i].hasOwnProperty("text"))
+ compare(control.children[i].color, control.placeholderTextColor) // placeholder.color
+ }
+ }
+
+ function test_inset() {
+ var control = createTemporaryObject(textArea, testCase, {background: rectangle.createObject(control)})
+ verify(control)
+
+ var topInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "topInsetChanged"})
+ verify(topInsetSpy.valid)
+
+ var leftInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "leftInsetChanged"})
+ verify(leftInsetSpy.valid)
+
+ var rightInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "rightInsetChanged"})
+ verify(rightInsetSpy.valid)
+
+ var bottomInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "bottomInsetChanged"})
+ verify(bottomInsetSpy.valid)
+
+ var topInsetChanges = 0
+ var leftInsetChanges = 0
+ var rightInsetChanges = 0
+ var bottomInsetChanges = 0
+
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+
+ control.width = 100
+ control.height = 100
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 100)
+
+ control.topInset = 10
+ compare(control.topInset, 10)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, ++topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 10)
+ compare(control.background.width, 100)
+ compare(control.background.height, 90)
+
+ control.leftInset = 20
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, ++leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 80)
+ compare(control.background.height, 90)
+
+ control.rightInset = 30
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, ++rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 50)
+ compare(control.background.height, 90)
+
+ control.bottomInset = 40
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, ++bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 50)
+ compare(control.background.height, 50)
+
+ control.topInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, ++topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 0)
+ compare(control.background.width, 50)
+ compare(control.background.height, 60)
+
+ control.leftInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, ++leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 70)
+ compare(control.background.height, 60)
+
+ control.rightInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, ++rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 60)
+
+ control.bottomInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, ++bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 100)
+ }
+
+ // QTBUG-76369
+ Component {
+ id: testResizeBackground
+ Item {
+ width: 200
+ height: 200
+ property alias textArea: textArea
+ ScrollView {
+ anchors.fill: parent
+ ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+ TextArea {
+ id: textArea
+ // workaround test failing due to default insets on Imagine
+ topInset: undefined
+ leftInset: undefined
+ rightInset: undefined
+ bottomInset: undefined
+ wrapMode : TextEdit.WordWrap
+ readOnly: false
+ selectByMouse: true
+ focus: true
+ text: "test message"
+
+ background: Rectangle {
+ y: parent.height - height - textArea.bottomPadding / 2
+ implicitWidth: 120
+ height: textArea.activeFocus ? 2 : 1
+ }
+ }
+ }
+ }
+ }
+
+ function test_resize_background() {
+ var control = createTemporaryObject(testResizeBackground, testCase)
+
+ compare(control.textArea.background.width, control.width)
+ compare(control.textArea.background.height, 1)
+ control.width = 400
+ control.height = 400
+ compare(control.textArea.background.width, control.width)
+ compare(control.textArea.background.height, 1)
+ control.width = 200
+ control.height = 200
+ compare(control.textArea.background.width, control.width)
+ compare(control.textArea.background.height, 1)
+
+ // hasBackgroundWidth=true
+ control.textArea.background.width = 1
+ compare(control.textArea.background.width, 1)
+ compare(control.textArea.background.height, 1)
+ control.width = 400
+ control.height = 400
+ compare(control.textArea.background.width, 1)
+ compare(control.textArea.background.height, 1)
+ // hasBackgroundHeight=false
+ control.textArea.background.height = undefined
+ compare(control.textArea.background.width, 1)
+ compare(control.textArea.background.height, 0)
+ control.textArea.background.y = 0
+ compare(control.textArea.background.width, 1)
+ compare(control.textArea.background.height, control.height)
+ control.width = 200
+ control.height = 200
+ compare(control.textArea.background.width, 1)
+ compare(control.textArea.background.height, control.height)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_textfield.qml b/tests/auto/quickcontrols2/controls/data/tst_textfield.qml
new file mode 100644
index 0000000000..f9b0587fa2
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_textfield.qml
@@ -0,0 +1,663 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+import QtQuick.Layouts
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "TextField"
+
+ Component {
+ id: textField
+ TextField { }
+ }
+
+ Component {
+ id: rectangle
+ Rectangle { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ function test_creation() {
+ var control = createTemporaryObject(textField, testCase)
+ verify(control)
+ }
+
+ function test_implicitSize() {
+ var control = createTemporaryObject(textField, testCase)
+ verify(control)
+
+ var implicitWidthSpy = signalSpy.createObject(control, { target: control, signalName: "implicitWidthChanged"} )
+ verify(implicitWidthSpy.valid)
+
+ var implicitHeightSpy = signalSpy.createObject(control, { target: control, signalName: "implicitHeightChanged"} )
+ verify(implicitHeightSpy.valid)
+
+ var implicitBackgroundWidthSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitBackgroundWidthChanged"})
+ verify(implicitBackgroundWidthSpy.valid)
+
+ var implicitBackgroundHeightSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "implicitBackgroundHeightChanged"})
+ verify(implicitBackgroundHeightSpy.valid)
+
+ var implicitWidthChanges = 0
+ var implicitHeightChanges = 0
+ var implicitBackgroundWidthChanges = 0
+ var implicitBackgroundHeightChanges = 0
+
+ verify(control.implicitWidth >= control.leftPadding + control.rightPadding)
+ verify(control.implicitHeight >= control.contentHeight + control.topPadding + control.bottomPadding)
+ compare(control.implicitBackgroundWidth, control.background.implicitWidth)
+ compare(control.implicitBackgroundHeight, control.background.implicitHeight)
+
+ control.background = rectangle.createObject(control, {implicitWidth: 400, implicitHeight: 200})
+ compare(control.implicitWidth, 400)
+ compare(control.implicitHeight, 200)
+ compare(control.implicitBackgroundWidth, 400)
+ compare(control.implicitBackgroundHeight, 200)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, ++implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, ++implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, ++implicitBackgroundHeightChanges)
+
+ control.background = null
+ compare(control.implicitWidth, control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentHeight + control.topPadding + control.bottomPadding)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, ++implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, ++implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, ++implicitBackgroundHeightChanges)
+
+ control.text = "TextField"
+ compare(control.implicitWidth, control.contentWidth + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentHeight + control.topPadding + control.bottomPadding)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+ compare(implicitWidthSpy.count, ++implicitWidthChanges)
+ compare(implicitHeightSpy.count, implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, implicitBackgroundHeightChanges)
+
+ control.placeholderText = "..."
+ compare(control.implicitWidth, control.contentWidth + control.leftPadding + control.rightPadding)
+ compare(control.implicitHeight, control.contentHeight + control.topPadding + control.bottomPadding)
+ compare(control.implicitBackgroundWidth, 0)
+ compare(control.implicitBackgroundHeight, 0)
+ compare(implicitWidthSpy.count, implicitWidthChanges)
+ compare(implicitHeightSpy.count, implicitHeightChanges)
+ compare(implicitBackgroundWidthSpy.count, implicitBackgroundWidthChanges)
+ compare(implicitBackgroundHeightSpy.count, implicitBackgroundHeightChanges)
+ }
+
+ function test_alignment_data() {
+ return [
+ { tag: "empty", text: "", placeholderText: "", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,left", text: "", placeholderText: "", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,center", text: "", placeholderText: "", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "empty,right", text: "", placeholderText: "", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "empty,ltr", text: "", placeholderText: "Search", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,ltr,left", text: "", placeholderText: "Search", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,ltr,center", text: "", placeholderText: "Search", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "empty,ltr,right", text: "", placeholderText: "Search", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "empty,rtl", text: "", placeholderText: "بحث", textAlignment: undefined, placeholderAlignment: Qt.AlignRight },
+ { tag: "empty,rtl,left", text: "", placeholderText: "بحث", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "empty,rtl,center", text: "", placeholderText: "بحث", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "empty,rtl,right", text: "", placeholderText: "بحث", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "ltr,empty", text: "Text", placeholderText: "", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,empty,left", text: "Text", placeholderText: "", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,empty,center", text: "Text", placeholderText: "", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "ltr,empty,right", text: "Text", placeholderText: "", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "ltr,ltr", text: "Text", placeholderText: "Search", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,ltr,left", text: "Text", placeholderText: "Search", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,ltr,center", text: "Text", placeholderText: "Search", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "ltr,ltr,right", text: "Text", placeholderText: "Search", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "ltr,rtl", text: "Text", placeholderText: "بحث", textAlignment: undefined, placeholderAlignment: Qt.AlignRight },
+ { tag: "ltr,rtl,left", text: "Text", placeholderText: "بحث", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "ltr,rtl,center", text: "Text", placeholderText: "بحث", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "ltr,rtl,right", text: "Text", placeholderText: "بحث", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "rtl,empty", text: "نص", placeholderText: "", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,empty,left", text: "نص", placeholderText: "", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,empty,center", text: "نص", placeholderText: "", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "rtl,empty,right", text: "نص", placeholderText: "", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "rtl,ltr", text: "نص", placeholderText: "Search", textAlignment: undefined, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,ltr,left", text: "نص", placeholderText: "Search", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,ltr,center", text: "نص", placeholderText: "Search", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "rtl,ltr,right", text: "نص", placeholderText: "Search", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+
+ { tag: "rtl,rtl", text: "نص", placeholderText: "بحث", textAlignment: undefined, placeholderAlignment: Qt.AlignRight },
+ { tag: "rtl,rtl,left", text: "نص", placeholderText: "بحث", textAlignment: Qt.AlignLeft, placeholderAlignment: Qt.AlignLeft },
+ { tag: "rtl,rtl,center", text: "نص", placeholderText: "بحث", textAlignment: Qt.AlignHCenter, placeholderAlignment: Qt.AlignHCenter },
+ { tag: "rtl,rtl,right", text: "نص", placeholderText: "بحث", textAlignment: Qt.AlignRight, placeholderAlignment: Qt.AlignRight },
+ ]
+ }
+
+ function test_alignment(data) {
+ var control = createTemporaryObject(textField, testCase, {text: data.text, placeholderText: data.placeholderText, horizontalAlignment: data.textAlignment})
+
+ if (data.textAlignment !== undefined)
+ compare(control.horizontalAlignment, data.textAlignment)
+ for (var i = 0; i < control.children.length; ++i) {
+ if (control.children[i].hasOwnProperty("text") && control.children[i].hasOwnProperty("horizontalAlignment"))
+ compare(control.children[i].effectiveHorizontalAlignment, data.placeholderAlignment) // placeholder
+ }
+
+ control.verticalAlignment = TextField.AlignBottom
+ compare(control.verticalAlignment, TextField.AlignBottom)
+ for (var j = 0; j < control.children.length; ++j) {
+ if (control.children[j].hasOwnProperty("text") && control.children[j].hasOwnProperty("verticalAlignment"))
+ compare(control.children[j].verticalAlignment, Text.AlignBottom) // placeholder
+ }
+ }
+
+ function test_font_explicit_attributes_data() {
+ return [
+ {tag: "bold", value: true},
+ {tag: "capitalization", value: Font.Capitalize},
+ {tag: "family", value: "Courier"},
+ {tag: "italic", value: true},
+ {tag: "strikeout", value: true},
+ {tag: "underline", value: true},
+ {tag: "weight", value: Font.Black},
+ {tag: "wordSpacing", value: 55}
+ ]
+ }
+
+ function test_font_explicit_attributes(data) {
+ var control = createTemporaryObject(textField, testCase)
+ verify(control)
+
+ var child = textField.createObject(control)
+ verify(child)
+
+ var controlSpy = signalSpy.createObject(control, {target: control, signalName: "fontChanged"})
+ verify(controlSpy.valid)
+
+ var childSpy = signalSpy.createObject(child, {target: child, signalName: "fontChanged"})
+ verify(childSpy.valid)
+
+ var defaultValue = control.font[data.tag]
+ child.font[data.tag] = defaultValue
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.font[data.tag] = data.value
+
+ compare(control.font[data.tag], data.value)
+ compare(controlSpy.count, 1)
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+ }
+
+ function test_hover_data() {
+ return [
+ { tag: "enabled", hoverEnabled: true },
+ { tag: "disabled", hoverEnabled: false },
+ ]
+ }
+
+ function test_hover(data) {
+ var control = createTemporaryObject(textField, testCase, {hoverEnabled: data.hoverEnabled})
+ verify(control)
+
+ compare(control.hovered, false)
+
+ mouseMove(control, control.width / 2, control.height / 2)
+ compare(control.hovered, data.hoverEnabled)
+
+ mouseMove(control, -1, -1)
+ compare(control.hovered, false)
+ }
+
+ function test_pressedReleased_data() {
+ return [
+ {
+ tag: "pressed outside", x: -1, y: -1, button: Qt.LeftButton,
+ controlPressEvent: null,
+ controlReleaseEvent: null,
+ parentPressEvent: {
+ x: 0, y: 0, button: Qt.LeftButton, buttons: Qt.LeftButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ parentReleaseEvent: {
+ x: 0, y: 0, button: Qt.LeftButton, buttons: Qt.NoButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ },
+ {
+ tag: "left click", x: 0, y: 0, button: Qt.LeftButton,
+ controlPressEvent: {
+ x: 0, y: 0, button: Qt.LeftButton, buttons: Qt.LeftButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ controlReleaseEvent: {
+ x: 0, y: 0, button: Qt.LeftButton, buttons: Qt.NoButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ parentPressEvent: null,
+ parentReleaseEvent: null,
+ },
+ {
+ tag: "right click", x: 0, y: 0, button: Qt.RightButton,
+ controlPressEvent: {
+ x: 0, y: 0, button: Qt.RightButton, buttons: Qt.RightButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ controlReleaseEvent: {
+ x: 0, y: 0, button: Qt.RightButton, buttons: Qt.NoButton, modifiers: Qt.NoModifier, wasHeld: false, isClick: false
+ },
+ parentPressEvent: null,
+ parentReleaseEvent: null,
+ },
+ ];
+ }
+
+ Component {
+ id: mouseAreaComponent
+ MouseArea {
+ anchors.fill: parent
+ }
+ }
+
+ function checkMouseEvent(event, expectedEvent) {
+ compare(event.x, expectedEvent.x)
+ compare(event.y, expectedEvent.y)
+ compare(event.button, expectedEvent.button)
+ compare(event.buttons, expectedEvent.buttons)
+ }
+
+ function test_pressedReleased(data) {
+ var mouseArea = createTemporaryObject(mouseAreaComponent, testCase)
+ verify(mouseArea)
+ var control = textField.createObject(mouseArea)
+ verify(control)
+
+ // Give enough room to check presses outside of the control and on the parent.
+ control.x = 1;
+ control.y = 1;
+
+ function checkControlPressEvent(event) {
+ checkMouseEvent(event, data.controlPressEvent)
+ }
+ function checkControlReleaseEvent(event) {
+ checkMouseEvent(event, data.controlReleaseEvent)
+ }
+ function checkParentPressEvent(event) {
+ checkMouseEvent(event, data.parentPressEvent)
+ }
+ function checkParentReleaseEvent(event) {
+ checkMouseEvent(event, data.parentReleaseEvent)
+ }
+
+ // Can't use signalArguments, because the event won't live that long.
+ if (data.controlPressEvent)
+ control.onPressed.connect(checkControlPressEvent)
+ if (data.controlReleaseEvent)
+ control.onReleased.connect(checkControlReleaseEvent)
+ if (data.parentPressEvent)
+ control.onPressed.connect(checkParentPressEvent)
+ if (data.parentReleaseEvent)
+ control.onReleased.connect(checkParentReleaseEvent)
+
+ var controlPressedSpy = signalSpy.createObject(control, { target: control, signalName: "pressed" })
+ verify(controlPressedSpy.valid)
+ var controlReleasedSpy = signalSpy.createObject(control, { target: control, signalName: "released" })
+ verify(controlReleasedSpy.valid)
+ var parentPressedSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "pressed" })
+ verify(parentPressedSpy.valid)
+ var parentReleasedSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "released" })
+ verify(parentReleasedSpy.valid)
+
+ mousePress(control, data.x, data.y, data.button)
+ compare(controlPressedSpy.count, data.controlPressEvent ? 1 : 0)
+ compare(parentPressedSpy.count, data.parentPressEvent ? 1 : 0)
+ mouseRelease(control, data.x, data.y, data.button)
+ compare(controlReleasedSpy.count, data.controlReleaseEvent ? 1 : 0)
+ compare(parentReleasedSpy.count, data.parentReleaseEvent ? 1 : 0)
+ }
+
+ Component {
+ id: ignoreTextField
+
+ TextField {
+ property bool ignorePress: false
+ property bool ignoreRelease: false
+
+ onPressed: if (ignorePress) event.accepted = false
+ onReleased: if (ignoreRelease) event.accepted = false
+ }
+ }
+
+ function checkEventAccepted(event) {
+ compare(event.accepted, true)
+ }
+
+ function checkEventIgnored(event) {
+ compare(event.accepted, false)
+ }
+
+ function test_ignorePressRelease() {
+ var mouseArea = createTemporaryObject(mouseAreaComponent, testCase)
+ verify(mouseArea)
+ var control = ignoreTextField.createObject(mouseArea)
+ verify(control)
+
+ var controlPressedSpy = signalSpy.createObject(control, { target: control, signalName: "pressed" })
+ verify(controlPressedSpy.valid)
+ var controlReleasedSpy = signalSpy.createObject(control, { target: control, signalName: "released" })
+ verify(controlReleasedSpy.valid)
+ var parentPressedSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "pressed" })
+ verify(parentPressedSpy.valid)
+ var parentReleasedSpy = signalSpy.createObject(mouseArea, { target: mouseArea, signalName: "released" })
+ verify(parentReleasedSpy.valid)
+
+ // Ignore only press events.
+ control.onPressed.connect(checkEventIgnored)
+ control.ignorePress = true
+ mousePress(control, 0, 0, data.button)
+ // The control will still get the signal, it just won't accept the event.
+ compare(controlPressedSpy.count, 1)
+ compare(parentPressedSpy.count, 1)
+ mouseRelease(control, 0, 0, data.button)
+ compare(controlReleasedSpy.count, 0)
+ compare(parentReleasedSpy.count, 1)
+ control.onPressed.disconnect(checkEventIgnored)
+
+ // Ignore only release events.
+ control.onPressed.connect(checkEventAccepted)
+ control.onReleased.connect(checkEventIgnored)
+ control.ignorePress = false
+ control.ignoreRelease = true
+ mousePress(control, 0, 0, data.button)
+ compare(controlPressedSpy.count, 2)
+ compare(parentPressedSpy.count, 1)
+ mouseRelease(control, 0, 0, data.button)
+ compare(controlReleasedSpy.count, 1)
+ compare(parentReleasedSpy.count, 1)
+ control.onPressed.disconnect(checkEventAccepted)
+ control.onReleased.disconnect(checkEventIgnored)
+ }
+
+ function test_multiClick() {
+ var control = createTemporaryObject(textField, testCase, {text: "Qt Quick Controls 2 TextArea", selectByMouse: true})
+ verify(control)
+
+ waitForRendering(control)
+ control.width = control.contentWidth
+ var rect = control.positionToRectangle(12)
+
+ // double click -> select word
+ mouseDoubleClickSequence(control, rect.x + rect.width / 2, rect.y + rect.height / 2)
+ compare(control.selectedText, "Controls")
+
+ // tripple click -> select whole line
+ mouseClick(control, rect.x + rect.width / 2, rect.y + rect.height / 2)
+ compare(control.selectedText, "Qt Quick Controls 2 TextArea")
+ }
+
+ // QTBUG-64048
+ function test_rightClick() {
+ var control = createTemporaryObject(textField, testCase, {text: "TextField", selectByMouse: true})
+ verify(control)
+
+ control.selectAll()
+ compare(control.selectedText, "TextField")
+
+ mouseClick(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(control.selectedText, "TextField")
+
+ mouseClick(control, control.width / 2, control.height / 2, Qt.LeftButton | Qt.RightButton)
+ compare(control.selectedText, "")
+ }
+
+ // QTBUG-66260
+ function test_placeholderTextColor() {
+ var control = createTemporaryObject(textField, testCase)
+ verify(control)
+
+ // usually default value should not be pure opacue black
+ verify(control.placeholderTextColor !== "#ff000000")
+ control.placeholderTextColor = "#12345678"
+ compare(control.placeholderTextColor, "#12345678")
+
+ for (var i = 0; i < control.children.length; ++i) {
+ if (control.children[i].hasOwnProperty("text"))
+ compare(control.children[i].color, control.placeholderTextColor) // placeholder.color
+ }
+ }
+
+ function test_inset() {
+ var control = createTemporaryObject(textField, testCase, {background: rectangle.createObject(control)})
+ verify(control)
+
+ var topInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "topInsetChanged"})
+ verify(topInsetSpy.valid)
+
+ var leftInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "leftInsetChanged"})
+ verify(leftInsetSpy.valid)
+
+ var rightInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "rightInsetChanged"})
+ verify(rightInsetSpy.valid)
+
+ var bottomInsetSpy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: "bottomInsetChanged"})
+ verify(bottomInsetSpy.valid)
+
+ var topInsetChanges = 0
+ var leftInsetChanges = 0
+ var rightInsetChanges = 0
+ var bottomInsetChanges = 0
+
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+
+ control.width = 100
+ control.height = 100
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 100)
+
+ control.topInset = 10
+ compare(control.topInset, 10)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, ++topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 10)
+ compare(control.background.width, 100)
+ compare(control.background.height, 90)
+
+ control.leftInset = 20
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, ++leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 80)
+ compare(control.background.height, 90)
+
+ control.rightInset = 30
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, ++rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 50)
+ compare(control.background.height, 90)
+
+ control.bottomInset = 40
+ compare(control.topInset, 10)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, ++bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 10)
+ compare(control.background.width, 50)
+ compare(control.background.height, 50)
+
+ control.topInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 20)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, ++topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 20)
+ compare(control.background.y, 0)
+ compare(control.background.width, 50)
+ compare(control.background.height, 60)
+
+ control.leftInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 30)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, ++leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 70)
+ compare(control.background.height, 60)
+
+ control.rightInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 40)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, ++rightInsetChanges)
+ compare(bottomInsetSpy.count, bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 60)
+
+ control.bottomInset = undefined
+ compare(control.topInset, 0)
+ compare(control.leftInset, 0)
+ compare(control.rightInset, 0)
+ compare(control.bottomInset, 0)
+ compare(topInsetSpy.count, topInsetChanges)
+ compare(leftInsetSpy.count, leftInsetChanges)
+ compare(rightInsetSpy.count, rightInsetChanges)
+ compare(bottomInsetSpy.count, ++bottomInsetChanges)
+ compare(control.background.x, 0)
+ compare(control.background.y, 0)
+ compare(control.background.width, 100)
+ compare(control.background.height, 100)
+ }
+
+ Component {
+ id: layoutComponent
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ property alias textField: textField
+
+ TextField {
+ id: textField
+ placeholderText: "Placeholder"
+ Layout.fillWidth: true
+ }
+ }
+ }
+
+ function test_inLayout() {
+ var layout = createTemporaryObject(layoutComponent, testCase)
+ verify(layout)
+
+ var control = layout.textField
+ verify(control)
+
+ compare(control.width, control.parent.width)
+ compare(control.background.width, control.width)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_toolbar.qml b/tests/auto/quickcontrols2/controls/data/tst_toolbar.qml
new file mode 100644
index 0000000000..b35a927d3e
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_toolbar.qml
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "ToolBar"
+
+ Component {
+ id: toolBar
+ ToolBar { }
+ }
+
+ Component {
+ id: oneChildBar
+ ToolBar {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ Component {
+ id: twoChildrenBar
+ ToolBar {
+ Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ Item {
+ implicitWidth: 200
+ implicitHeight: 60
+ }
+ }
+ }
+
+ Component {
+ id: contentBar
+ ToolBar {
+ contentItem: Item {
+ implicitWidth: 100
+ implicitHeight: 30
+ }
+ }
+ }
+
+ function test_empty() {
+ var control = createTemporaryObject(toolBar, testCase)
+ verify(control)
+
+ verify(control.contentItem)
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ }
+
+ function test_oneChild() {
+ var control = createTemporaryObject(oneChildBar, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ verify(control.implicitWidth >= 100)
+ verify(control.implicitHeight >= 30)
+ }
+
+ function test_twoChildren() {
+ var control = createTemporaryObject(twoChildrenBar, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 0)
+ compare(control.contentHeight, 0)
+ compare(control.implicitContentWidth, 0)
+ compare(control.implicitContentHeight, 0)
+ verify(control.implicitWidth >= 0)
+ verify(control.implicitHeight >= 0)
+ }
+
+ function test_contentItem() {
+ var control = createTemporaryObject(contentBar, testCase)
+ verify(control)
+
+ compare(control.contentWidth, 100)
+ compare(control.contentHeight, 30)
+ compare(control.implicitContentWidth, 100)
+ compare(control.implicitContentHeight, 30)
+ verify(control.implicitWidth >= 100)
+ verify(control.implicitHeight >= 30)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_toolbutton.qml b/tests/auto/quickcontrols2/controls/data/tst_toolbutton.qml
new file mode 100644
index 0000000000..a7acd05ae4
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_toolbutton.qml
@@ -0,0 +1,243 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "ToolButton"
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ Component {
+ id: toolButton
+ ToolButton { }
+ }
+
+ function test_text() {
+ var control = createTemporaryObject(toolButton, testCase)
+ verify(control)
+
+ compare(control.text, "")
+ control.text = "ToolButton"
+ compare(control.text, "ToolButton")
+ control.text = ""
+ compare(control.text, "")
+ }
+
+ function test_mouse() {
+ var control = createTemporaryObject(toolButton, testCase)
+ verify(control)
+
+ var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressedChanged"})
+ verify(pressedSpy.valid)
+
+ var downSpy = signalSpy.createObject(control, {target: control, signalName: "downChanged"})
+ verify(downSpy.valid)
+
+ var clickedSpy = signalSpy.createObject(control, {target: control, signalName: "clicked"})
+ verify(clickedSpy.valid)
+
+ // check
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(pressedSpy.count, 1)
+ compare(downSpy.count, 1)
+ compare(control.pressed, true)
+ compare(control.down, true)
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(clickedSpy.count, 1)
+ compare(pressedSpy.count, 2)
+ compare(downSpy.count, 2)
+ compare(control.pressed, false)
+ compare(control.down, false)
+
+ // uncheck
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(pressedSpy.count, 3)
+ compare(downSpy.count, 3)
+ compare(control.pressed, true)
+ compare(control.down, true)
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(clickedSpy.count, 2)
+ compare(pressedSpy.count, 4)
+ compare(downSpy.count, 4)
+ compare(control.pressed, false)
+ compare(control.down, false)
+
+ // release outside
+ mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton)
+ compare(pressedSpy.count, 5)
+ compare(downSpy.count, 5)
+ compare(control.pressed, true)
+ compare(control.down, true)
+ mouseMove(control, control.width * 2, control.height * 2)
+ compare(control.pressed, false)
+ compare(control.down, false)
+ mouseRelease(control, control.width * 2, control.height * 2, Qt.LeftButton)
+ compare(clickedSpy.count, 2)
+ compare(pressedSpy.count, 6)
+ compare(downSpy.count, 6)
+ compare(control.pressed, false)
+ compare(control.down, false)
+
+ // right button
+ mousePress(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(pressedSpy.count, 6)
+ compare(downSpy.count, 6)
+ compare(control.pressed, false)
+ compare(control.down, false)
+ mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton)
+ compare(clickedSpy.count, 2)
+ compare(pressedSpy.count, 6)
+ compare(downSpy.count, 6)
+ compare(control.pressed, false)
+ compare(control.down, false)
+ }
+
+ function test_keys() {
+ var control = createTemporaryObject(toolButton, testCase)
+ verify(control)
+
+ var clickedSpy = signalSpy.createObject(control, {target: control, signalName: "clicked"})
+ verify(clickedSpy.valid)
+
+ control.forceActiveFocus()
+ verify(control.activeFocus)
+
+ // check
+ keyClick(Qt.Key_Space)
+ compare(clickedSpy.count, 1)
+
+ // uncheck
+ keyClick(Qt.Key_Space)
+ compare(clickedSpy.count, 2)
+
+ // no change
+ var keys = [Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab]
+ for (var i = 0; i < keys.length; ++i) {
+ keyClick(keys[i])
+ compare(clickedSpy.count, 2)
+ }
+ }
+
+ function test_baseline() {
+ var control = createTemporaryObject(toolButton, testCase)
+ verify(control)
+ compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
+ }
+
+ function test_display_data() {
+ return [
+ { "tag": "IconOnly", display: ToolButton.IconOnly },
+ { "tag": "TextOnly", display: ToolButton.TextOnly },
+ { "tag": "TextUnderIcon", display: ToolButton.TextUnderIcon },
+ { "tag": "TextBesideIcon", display: ToolButton.TextBesideIcon },
+ { "tag": "IconOnly, mirrored", display: ToolButton.IconOnly, mirrored: true },
+ { "tag": "TextOnly, mirrored", display: ToolButton.TextOnly, mirrored: true },
+ { "tag": "TextUnderIcon, mirrored", display: ToolButton.TextUnderIcon, mirrored: true },
+ { "tag": "TextBesideIcon, mirrored", display: ToolButton.TextBesideIcon, mirrored: true }
+ ]
+ }
+
+ function test_display(data) {
+ var control = createTemporaryObject(toolButton, testCase, {
+ text: "ToolButton",
+ display: data.display,
+ "icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
+ "LayoutMirroring.enabled": !!data.mirrored
+ })
+ verify(control)
+ compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
+
+ var iconImage = findChild(control.contentItem, "image")
+ var textLabel = findChild(control.contentItem, "label")
+
+ switch (control.display) {
+ case ToolButton.IconOnly:
+ verify(iconImage)
+ verify(!textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ break;
+ case ToolButton.TextOnly:
+ verify(!iconImage)
+ verify(textLabel)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ case ToolButton.TextUnderIcon:
+ verify(iconImage)
+ verify(textLabel)
+ compare(iconImage.x, (control.availableWidth - iconImage.width) / 2)
+ compare(textLabel.x, (control.availableWidth - textLabel.width) / 2)
+ verify(iconImage.y < textLabel.y)
+ break;
+ case ToolButton.TextBesideIcon:
+ verify(iconImage)
+ verify(textLabel)
+ if (control.mirrored)
+ verify(textLabel.x < iconImage.x)
+ else
+ verify(iconImage.x < textLabel.x)
+ compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
+ compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
+ break;
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_toolseparator.qml b/tests/auto/quickcontrols2/controls/data/tst_toolseparator.qml
new file mode 100644
index 0000000000..41c161dd4b
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_toolseparator.qml
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ name: "ToolSeparator"
+
+ Component {
+ id: toolSeparator
+ ToolSeparator {}
+ }
+
+ function test_size() {
+ var control = createTemporaryObject(toolSeparator, testCase);
+ verify(control);
+ verify(control.width > 1);
+ verify(control.height > 1);
+ }
+
+ Component {
+ id: signalSpyComponent
+ SignalSpy {}
+ }
+
+ function test_orientation() {
+ var control = createTemporaryObject(toolSeparator, testCase);
+ verify(control);
+ compare(control.horizontal, false);
+ compare(control.vertical, true);
+
+ var orientationSpy = signalSpyComponent.createObject(control, { target: control, signalName: "orientationChanged" });
+
+ var originalWidth = control.width;
+ var originalHeight = control.height;
+ control.orientation = Qt.Horizontal;
+ compare(control.orientation, Qt.Horizontal);
+ compare(control.width, originalHeight);
+ compare(control.height, originalWidth);
+ compare(control.horizontal, true);
+ compare(control.vertical, false);
+ compare(orientationSpy.count, 1);
+
+ control.orientation = Qt.Vertical;
+ compare(control.orientation, Qt.Vertical);
+ compare(control.width, originalWidth);
+ compare(control.height, originalHeight);
+ compare(control.horizontal, false);
+ compare(control.vertical, true);
+ compare(orientationSpy.count, 2);
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_tooltip.qml b/tests/auto/quickcontrols2/controls/data/tst_tooltip.qml
new file mode 100644
index 0000000000..89e179575f
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_tooltip.qml
@@ -0,0 +1,509 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "ToolTip"
+
+ Component {
+ id: toolTip
+ ToolTip { }
+ }
+
+ Component {
+ id: mouseArea
+ MouseArea { }
+ }
+
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
+ QtObject {
+ id: object
+ }
+
+ SignalSpy {
+ id: sharedSpy
+ target: ToolTip.toolTip
+ }
+
+ function test_properties_data() {
+ return [
+ {tag: "text", property: "text", defaultValue: "", setValue: "Hello", signalName: "textChanged"},
+ {tag: "delay", property: "delay", defaultValue: 0, setValue: 1000, signalName: "delayChanged"},
+ {tag: "timeout", property: "timeout", defaultValue: -1, setValue: 2000, signalName: "timeoutChanged"}
+ ]
+ }
+
+ function test_properties(data) {
+ var control = createTemporaryObject(toolTip, testCase)
+ verify(control)
+
+ compare(control[data.property], data.defaultValue)
+
+ var spy = createTemporaryObject(signalSpy, testCase, {target: control, signalName: data.signalName})
+ verify(spy.valid)
+
+ control[data.property] = data.setValue
+ compare(control[data.property], data.setValue)
+ compare(spy.count, 1)
+ }
+
+ function test_attached_data() {
+ return [
+ {tag: "text", property: "text", defaultValue: "", setValue: "Hello", signalName: "textChanged"},
+ {tag: "delay", property: "delay", defaultValue: 0, setValue: 1000, signalName: "delayChanged"},
+ {tag: "timeout", property: "timeout", defaultValue: -1, setValue: 2000, signalName: "timeoutChanged"}
+ ]
+ }
+
+ function test_attached(data) {
+ var item1 = createTemporaryObject(mouseArea, testCase)
+ verify(item1)
+
+ var item2 = createTemporaryObject(mouseArea, testCase)
+ verify(item2)
+
+ // Reset the properties to the expected default values, in case
+ // we're not the first test that uses attached properties to be run.
+ var sharedTip = ToolTip.toolTip
+ sharedTip[data.property] = data.defaultValue
+
+ compare(item1.ToolTip[data.property], data.defaultValue)
+ compare(item2.ToolTip[data.property], data.defaultValue)
+
+ var spy1 = signalSpy.createObject(item1, {target: item1.ToolTip, signalName: data.signalName})
+ verify(spy1.valid)
+
+ var spy2 = signalSpy.createObject(item2, {target: item2.ToolTip, signalName: data.signalName})
+ verify(spy2.valid)
+
+ sharedSpy.signalName = data.signalName
+ verify(sharedSpy.valid)
+ sharedSpy.clear()
+
+ // change attached properties while the shared tooltip is not visible
+ item1.ToolTip[data.property] = data.setValue
+ compare(item1.ToolTip[data.property], data.setValue)
+ compare(spy1.count, 1)
+
+ compare(spy2.count, 0)
+ compare(item2.ToolTip[data.property], data.defaultValue)
+
+ // the shared tooltip is not visible for item1, so the attached
+ // property change should therefore not apply to the shared instance
+ compare(sharedSpy.count, 0)
+ compare(sharedTip[data.property], data.defaultValue)
+
+ // show the shared tooltip for item2
+ item2.ToolTip.visible = true
+ verify(item2.ToolTip.visible)
+ verify(sharedTip.visible)
+
+ // change attached properties while the shared tooltip is visible
+ item2.ToolTip[data.property] = data.setValue
+ compare(item2.ToolTip[data.property], data.setValue)
+ compare(spy2.count, 1)
+
+ // the shared tooltip is visible for item2, so the attached
+ // property change should apply to the shared instance
+ compare(sharedSpy.count, 1)
+ compare(sharedTip[data.property], data.setValue)
+ }
+
+ function test_delay_data() {
+ return [
+ {tag: "imperative:0", delay: 0, imperative: true},
+ {tag: "imperative:100", delay: 100, imperative: true},
+ {tag: "declarative:0", delay: 0, imperative: false},
+ {tag: "declarative:100", delay: 100, imperative: false}
+ ]
+ }
+
+ function test_delay(data) {
+ var control = createTemporaryObject(toolTip, testCase, {delay: data.delay})
+
+ compare(control.visible, false)
+ if (data.imperative)
+ control.open()
+ else
+ control.visible = true
+ compare(control.visible, data.delay <= 0)
+ tryCompare(control, "visible", true)
+ }
+
+ function test_timeout_data() {
+ return [
+ {tag: "imperative", imperative: true},
+ {tag: "declarative", imperative: false}
+ ]
+ }
+
+ function test_timeout(data) {
+ var control = createTemporaryObject(toolTip, testCase, {timeout: 100})
+
+ compare(control.visible, false)
+ if (data.imperative)
+ control.open()
+ else
+ control.visible = true
+ compare(control.visible, true)
+ // wait a bit to make sure that it's still visible
+ wait(50)
+ compare(control.visible, true)
+ // re-arm for another 200 ms
+ control.timeout = 200
+ compare(control.visible, true)
+ // ensure that it's still visible after 150 ms (where old timeout < 150 < new timeout)
+ wait(150)
+ compare(control.visible, true)
+ tryCompare(control, "visible", false)
+ }
+
+ function test_warning() {
+ ignoreWarning(new RegExp(".*QML QtObject: ToolTip must be attached to an Item"))
+ ignoreWarning(new RegExp(".*: QML ToolTip: cannot find any window to open popup in."))
+ object.ToolTip.show("") // don't crash (QTBUG-56243)
+ }
+
+ Component {
+ id: toolTipWithExitTransition
+
+ ToolTip {
+ Component.onCompleted: contentItem.objectName = "contentItem"
+
+ enter: Transition {
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 100 }
+ }
+ exit: Transition {
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 500 }
+ }
+ }
+ }
+
+ function test_makeVisibleWhileExitTransitionRunning_data() {
+ return [
+ { tag: "imperative", imperative: true },
+ { tag: "declarative", imperative: false }
+ ]
+ }
+
+ function test_makeVisibleWhileExitTransitionRunning(data) {
+ var control = createTemporaryObject(toolTipWithExitTransition, testCase)
+
+ // Show, hide, and show the tooltip again. Its exit transition should
+ // start and get cancelled, and then its enter transition should run.
+ if (data.imperative)
+ control.open()
+ else
+ control.visible = true
+ tryCompare(control, "opacity", 1)
+
+ if (data.imperative)
+ control.close()
+ else
+ control.visible = false
+ verify(control.exit.running)
+ tryVerify(function() { return control.opacity < 1; })
+
+ if (data.imperative)
+ control.open()
+ else
+ control.visible = true
+ tryCompare(control, "opacity", 1)
+ }
+
+ Component {
+ id: buttonAndShortcutComponent
+
+ Item {
+ property alias shortcut: shortcut
+ property alias button: button
+
+ Shortcut {
+ id: shortcut
+ sequence: "A"
+ }
+
+ Button {
+ id: button
+ text: "Just a button"
+ focusPolicy: Qt.NoFocus
+
+ ToolTip.visible: button.hovered
+ ToolTip.text: qsTr("Some helpful text")
+ }
+ }
+ }
+
+ function test_activateShortcutWhileToolTipVisible() {
+ if ((Qt.platform.pluginName === "offscreen")
+ || (Qt.platform.pluginName === "minimal"))
+ skip("Mouse hovering not functional on offscreen/minimal platforms")
+
+ // Window shortcuts (the default context for Shortcut) require the window to have focus.
+ var window = testCase.Window.window
+ verify(window)
+ window.requestActivate()
+ tryCompare(window, "active", true)
+
+ var root = createTemporaryObject(buttonAndShortcutComponent, testCase)
+ verify(root)
+
+ mouseMove(root.button, root.button.width / 2, root.button.height / 2)
+ tryCompare(root.button.ToolTip.toolTip, "visible", true)
+
+ var shortcutActivatedSpy = signalSpy.createObject(root, { target: root.shortcut, signalName: "activated" })
+ verify(shortcutActivatedSpy.valid)
+ keyPress(Qt.Key_A)
+ compare(shortcutActivatedSpy.count, 1)
+ }
+
+ Component {
+ id: hoverComponent
+ MouseArea {
+ id: hoverArea
+ property alias tooltip: tooltip
+ hoverEnabled: true
+ width: testCase.width
+ height: testCase.height
+ ToolTip {
+ id: tooltip
+ x: 10; y: 10
+ width: 10; height: 10
+ visible: hoverArea.containsMouse
+ }
+ }
+ }
+
+ // QTBUG-63644
+ function test_hover() {
+ var root = createTemporaryObject(hoverComponent, testCase)
+ verify(root)
+
+ var tooltip = root.tooltip
+ verify(tooltip)
+
+ for (var pos = 0; pos <= 25; pos += 5) {
+ mouseMove(root, pos, pos)
+ verify(tooltip.visible)
+ }
+ }
+
+ Component {
+ id: nonAttachedToolTipComponent
+ ToolTip { }
+ }
+
+ function test_nonAttachedToolTipShowAndHide() {
+ var tip = createTemporaryObject(nonAttachedToolTipComponent, testCase)
+ verify(tip)
+ tip.show("hello");
+ verify(tip.visible)
+ verify(tip.text === "hello")
+ tip.hide()
+ tryCompare(tip, "visible", false)
+ tip.show("delay", 200)
+ verify(tip.visible)
+ tryCompare(tip, "visible", false)
+ }
+
+ Component {
+ id: timeoutButtonRowComponent
+
+ Row {
+ Button {
+ text: "Timeout: 1"
+ ToolTip.text: text
+ ToolTip.visible: down
+ ToolTip.timeout: 1
+ }
+
+ Button {
+ text: "Timeout: -1"
+ ToolTip.text: text
+ ToolTip.visible: down
+ }
+ }
+ }
+
+ // QTBUG-74226
+ function test_attachedTimeout() {
+ var row = createTemporaryObject(timeoutButtonRowComponent, testCase)
+ verify(row)
+
+ // Press the button that has no timeout; it should stay visible.
+ var button2 = row.children[1]
+ mousePress(button2)
+ compare(button2.down, true)
+ tryCompare(button2.ToolTip.toolTip, "opened", true)
+
+ // Wait a bit to make sure that it's still visible.
+ wait(50)
+ compare(button2.ToolTip.toolTip.opened, true)
+
+ // Release and should close.
+ mouseRelease(button2)
+ compare(button2.down, false)
+ tryCompare(button2.ToolTip, "visible", false)
+
+ // Now, press the first button that does have a timeout; it should close on its own eventually.
+ var button1 = row.children[0]
+ mousePress(button1)
+ compare(button1.down, true)
+ // We use a short timeout to speed up the test, but tryCompare(...opened, true) then
+ // fails because the dialog has already been hidden by that point, so just check that it's
+ // immediately visible, which is more or less the same thing.
+ compare(button1.ToolTip.visible, true)
+ tryCompare(button1.ToolTip, "visible", false)
+ mouseRelease(button2)
+
+ // Now, hover over the second button again. It should still stay visible until the mouse is released.
+ mousePress(button2)
+ compare(button2.down, true)
+ tryCompare(button2.ToolTip.toolTip, "opened", true)
+
+ // Wait a bit to make sure that it's still visible.
+ wait(50)
+ compare(button2.ToolTip.toolTip.opened, true)
+
+ // Release and should close.
+ mouseRelease(button2)
+ compare(button2.down, false)
+ tryCompare(button2.ToolTip, "visible", false)
+ }
+
+ Component {
+ id: wrapComponent
+
+ Item {
+ ToolTip.text: "This is some very very very very very very very very very very very very"
+ + " very very very very very very very very very very very very very very"
+ + " very very very very very very very very very very very very long text"
+ }
+ }
+
+ // QTBUG-62350
+ function test_wrap() {
+ var item = createTemporaryObject(wrapComponent, testCase)
+ verify(item)
+
+ // Avoid "cannot find window to popup in" warning that can occur if it's made visible too early.
+ item.ToolTip.visible = true
+ tryCompare(item.ToolTip.toolTip, "opened", true)
+ compare(item.ToolTip.toolTip.contentItem.wrapMode, Text.Wrap)
+ verify(item.ToolTip.toolTip.contentItem.width < item.ToolTip.toolTip.contentItem.implicitWidth)
+ }
+
+ function test_timeoutAfterOpened() {
+ let control = createTemporaryObject(toolTipWithExitTransition, testCase, { timeout: 1, exit: null })
+ verify(control)
+
+ let openedSpy = createTemporaryObject(signalSpy, testCase, { target: control, signalName: "opened" })
+ verify(openedSpy.valid)
+
+ control.show("Test")
+ tryCompare(openedSpy, "count", 1)
+ }
+
+ Component {
+ id: buttonDownToolTipComponent
+
+ Button {
+ required property string toolTipText
+
+ ToolTip.text: toolTipText
+ ToolTip.visible: down
+ }
+ }
+
+ function test_attachedSizeBug() {
+ let shortTextButton = createTemporaryObject(buttonDownToolTipComponent, testCase,
+ { toolTipText: "Short text" })
+ verify(shortTextButton)
+
+ let longTextButton = createTemporaryObject(buttonDownToolTipComponent, testCase,
+ { x: shortTextButton.width, toolTipText: "Some reeeeeeaaaaaaallly looooooooooongggggggg text" })
+ verify(longTextButton)
+
+ shortTextButton.ToolTip.toolTip.background.objectName = "ToolTipBackground"
+ shortTextButton.ToolTip.toolTip.contentItem.objectName = "ToolTipText"
+
+ // Show the tooltip with long text.
+ mousePress(longTextButton)
+ tryCompare(longTextButton.ToolTip.toolTip, "opened", true)
+ const longTextToolTipImplicitWidth = longTextButton.ToolTip.toolTip.implicitWidth
+ mouseRelease(longTextButton)
+ tryCompare(longTextButton.ToolTip.toolTip, "visible", false)
+
+ // Show the tooltip with short text.
+ mousePress(shortTextButton)
+ tryCompare(shortTextButton.ToolTip.toolTip, "opened", true)
+ mouseRelease(shortTextButton)
+ tryCompare(shortTextButton.ToolTip.toolTip, "visible", false)
+
+ // Show the tooltip with long text again. It should have its original width.
+ mousePress(longTextButton)
+ tryCompare(longTextButton.ToolTip.toolTip, "opened", true)
+ compare(longTextButton.ToolTip.toolTip.implicitWidth, longTextToolTipImplicitWidth)
+ mouseRelease(longTextButton)
+ tryCompare(longTextButton.ToolTip.toolTip, "visible", false)
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/data/tst_tumbler.qml b/tests/auto/quickcontrols2/controls/data/tst_tumbler.qml
new file mode 100644
index 0000000000..fff6fa7933
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/data/tst_tumbler.qml
@@ -0,0 +1,1281 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+
+TestCase {
+ id: testCase
+ width: 300
+ height: 300
+ visible: true
+ when: windowShown
+ name: "Tumbler"
+
+ property var tumbler: null
+ readonly property real implicitTumblerWidth: 60
+ readonly property real implicitTumblerHeight: 200
+ readonly property real defaultImplicitDelegateHeight: implicitTumblerHeight / 3
+ readonly property real defaultListViewTumblerOffset: -defaultImplicitDelegateHeight
+ readonly property real tumblerDelegateHeight: tumbler ? tumbler.availableHeight / tumbler.visibleItemCount : 0
+ property Item tumblerView: null
+
+ Component {
+ id: tumblerComponent
+
+ Tumbler {
+ visibleItemCount: 3
+ }
+ }
+
+ Component {
+ id: itemComponent
+
+ Item {
+ anchors.fill: parent
+ }
+ }
+
+ function createTumbler(args) {
+ tumbler = createTemporaryObject(tumblerComponent, testCase, args);
+ verify(tumbler, "Tumbler: failed to create an instance");
+ tumblerView = findView(tumbler);
+ verify(tumblerView);
+ }
+
+ function tumblerXCenter() {
+ return tumbler.leftPadding + tumbler.width / 2;
+ }
+
+ function tumblerYCenter() {
+ return tumbler.topPadding + tumbler.height / 2;
+ }
+
+ // visualItemIndex is from 0 to the amount of visible items.
+ function itemCenterPos(visualItemIndex) {
+ var halfDelegateHeight = tumblerDelegateHeight / 2;
+ var yCenter = tumbler.y + tumbler.topPadding + halfDelegateHeight
+ + (tumblerDelegateHeight * visualItemIndex);
+ return Qt.point(tumblerXCenter(), yCenter);
+ }
+
+ function itemTopLeftPos(visualItemIndex) {
+ return Qt.point(tumbler.leftPadding, tumbler.topPadding + (tumblerDelegateHeight * visualItemIndex));
+ }
+
+ function checkItemSizes() {
+ var contentChildren = tumbler.wrap ? tumblerView.children : tumblerView.contentItem.children;
+ verify(contentChildren.length >= tumbler.count);
+ for (var i = 0; i < contentChildren.length; ++i) {
+ compare(contentChildren[i].width, tumbler.availableWidth);
+ compare(contentChildren[i].height, tumblerDelegateHeight);
+ }
+ }
+
+ function findView(parent) {
+ for (var i = 0; i < parent.children.length; ++i) {
+ var child = parent.children[i];
+ if (child.hasOwnProperty("currentIndex")) {
+ return child;
+ }
+
+ var grandChild = findView(child);
+ if (grandChild)
+ return grandChild;
+ }
+
+ return null;
+ }
+
+ function findDelegateWithText(parent, text) {
+ for (var i = 0; i < parent.children.length; ++i) {
+ var child = parent.children[i];
+ if (child.hasOwnProperty("text") && child.text === text) {
+ return child;
+ }
+
+ var grandChild = findDelegateWithText(child, text);
+ if (grandChild)
+ return grandChild;
+ }
+
+ return null;
+ }
+
+ property Component noAttachedPropertiesDelegate: Text {
+ text: modelData
+ }
+
+ function test_wrapWithoutAttachedProperties() {
+ createTumbler();
+ verify(tumbler.wrap);
+
+ tumbler.delegate = noAttachedPropertiesDelegate;
+ // Shouldn't assert.
+ tumbler.wrap = false;
+ verify(findView(tumbler));
+ }
+
+ // TODO: test that currentIndex is maintained between contentItem changes...
+// function tst_dynamicContentItemChange() {
+// }
+
+ function test_currentIndex() {
+ createTumbler();
+ compare(tumbler.contentItem.parent, tumbler);
+
+ tumbler.model = 5;
+
+ compare(tumbler.currentIndex, 0);
+ waitForRendering(tumbler);
+
+ // Set it through user interaction.
+ var pos = Qt.point(tumblerXCenter(), tumbler.height / 2);
+ mouseDrag(tumbler, pos.x, pos.y, 0, tumbler.height / 3, Qt.LeftButton, Qt.NoModifier, 200);
+ tryCompare(tumblerView, "offset", 1);
+ compare(tumbler.currentIndex, 4);
+ compare(tumblerView.currentIndex, 4);
+
+ // Set it manually.
+ tumbler.currentIndex = 2;
+ tryCompare(tumbler, "currentIndex", 2);
+ compare(tumblerView.currentIndex, 2);
+
+ tumbler.model = null;
+ tryCompare(tumbler, "currentIndex", -1);
+ // PathView will only use 0 as the currentIndex when there are no items.
+ compare(tumblerView.currentIndex, 0);
+
+ tumbler.model = ["A", "B", "C"];
+ tryCompare(tumbler, "currentIndex", 0);
+
+ // Setting a negative current index should have no effect, because the model isn't empty.
+ tumbler.currentIndex = -1;
+ compare(tumbler.currentIndex, 0);
+
+ tumbler.model = 1;
+ compare(tumbler.currentIndex, 0);
+
+ tumbler.model = 5;
+ compare(tumbler.count, 5);
+ tumblerView = findView(tumbler);
+ tryCompare(tumblerView, "count", 5);
+ tumbler.currentIndex = 4;
+ compare(tumbler.currentIndex, 4);
+ compare(tumblerView.currentIndex, 4);
+
+ --tumbler.model;
+ compare(tumbler.count, 4);
+ compare(tumblerView.count, 4);
+ // Removing an item from an integer-based model will cause views to reset their currentIndex to 0.
+ compare(tumbler.currentIndex, 0);
+ compare(tumblerView.currentIndex, 0);
+
+ tumbler.model = 0;
+ compare(tumbler.currentIndex, -1);
+ }
+
+ Component {
+ id: currentIndexTumbler
+
+ Tumbler {
+ model: 5
+ currentIndex: 2
+ visibleItemCount: 3
+ }
+ }
+
+ Component {
+ id: currentIndexTumblerNoWrap
+
+ Tumbler {
+ model: 5
+ currentIndex: 2
+ wrap: false
+ visibleItemCount: 3
+ }
+ }
+
+ Component {
+ id: currentIndexTumblerNoWrapReversedOrder
+
+ Tumbler {
+ model: 5
+ wrap: false
+ currentIndex: 2
+ visibleItemCount: 3
+ }
+ }
+
+ Component {
+ id: negativeCurrentIndexTumblerNoWrap
+
+ Tumbler {
+ model: 5
+ wrap: false
+ currentIndex: -1
+ visibleItemCount: 3
+ }
+ }
+
+ Component {
+ id: currentIndexTooLargeTumbler
+
+ Tumbler {
+ objectName: "currentIndexTooLargeTumbler"
+ model: 10
+ currentIndex: 10
+ }
+ }
+
+
+ function test_currentIndexAtCreation_data() {
+ return [
+ { tag: "wrap: implicit, expected currentIndex: 2", currentIndex: 2, wrap: true, component: currentIndexTumbler },
+ { tag: "wrap: false, expected currentIndex: 2", currentIndex: 2, wrap: false, component: currentIndexTumblerNoWrap },
+ // Order of property assignments shouldn't matter
+ { tag: "wrap: false, expected currentIndex: 2, reversed property assignment order",
+ currentIndex: 2, wrap: false, component: currentIndexTumblerNoWrapReversedOrder },
+ { tag: "wrap: false, expected currentIndex: 0", currentIndex: 0, wrap: false, component: negativeCurrentIndexTumblerNoWrap },
+ { tag: "wrap: implicit, expected currentIndex: 0", currentIndex: 0, wrap: true, component: currentIndexTooLargeTumbler }
+ ]
+ }
+
+ function test_currentIndexAtCreation(data) {
+ // Test setting currentIndex at creation time
+ tumbler = createTemporaryObject(data.component, testCase);
+ verify(tumbler);
+ // A "statically declared" currentIndex will be pending until the count has changed,
+ // which happens when the model is set, which happens on the TumblerView's next polish.
+ tryCompare(tumbler, "currentIndex", data.currentIndex);
+
+ tumblerView = findView(tumbler);
+ tryVerify(function() { return tumblerView.currentItem });
+ compare(tumblerView.currentIndex, data.currentIndex);
+ compare(tumblerView.currentItem.text, data.currentIndex.toString());
+
+ if (data.wrap) {
+ tryCompare(tumblerView, "offset", data.currentIndex > 0 ? tumblerView.count - data.currentIndex : 0);
+ } else {
+ tryCompare(tumblerView, "contentY", tumblerDelegateHeight * data.currentIndex - tumblerView.preferredHighlightBegin);
+ }
+ }
+
+ function test_keyboardNavigation() {
+ createTumbler();
+
+ tumbler.model = 5;
+ tumbler.forceActiveFocus();
+ tumblerView.highlightMoveDuration = 0;
+
+ // Navigate upwards through entire wheel.
+ for (var j = 0; j < tumbler.count - 1; ++j) {
+ keyClick(Qt.Key_Up, Qt.NoModifier);
+ tryCompare(tumblerView, "offset", j + 1);
+ compare(tumbler.currentIndex, tumbler.count - 1 - j);
+ }
+
+ keyClick(Qt.Key_Up, Qt.NoModifier);
+ tryCompare(tumblerView, "offset", 0);
+ compare(tumbler.currentIndex, 0);
+
+ // Navigate downwards through entire wheel.
+ for (j = 0; j < tumbler.count - 1; ++j) {
+ keyClick(Qt.Key_Down, Qt.NoModifier);
+ tryCompare(tumblerView, "offset", tumbler.count - 1 - j);
+ compare(tumbler.currentIndex, j + 1);
+ }
+
+ keyClick(Qt.Key_Down, Qt.NoModifier);
+ tryCompare(tumblerView, "offset", 0);
+ compare(tumbler.currentIndex, 0);
+ }
+
+ function test_itemsCorrectlyPositioned() {
+ createTumbler();
+
+ tumbler.model = 4;
+ tumbler.height = 120;
+ compare(tumblerDelegateHeight, 40);
+ checkItemSizes();
+
+ wait(tumblerView.highlightMoveDuration);
+ var firstItemCenterPos = itemCenterPos(1);
+ var firstItem = tumblerView.itemAt(firstItemCenterPos.x, firstItemCenterPos.y);
+ var actualPos = testCase.mapFromItem(firstItem, 0, 0);
+ compare(actualPos.x, tumbler.leftPadding);
+ compare(actualPos.y, tumbler.topPadding + 40);
+
+ tumbler.forceActiveFocus();
+ keyClick(Qt.Key_Down);
+ tryCompare(tumblerView, "offset", 3.0);
+ tryCompare(tumbler, "moving", false);
+ firstItemCenterPos = itemCenterPos(0);
+ firstItem = tumblerView.itemAt(firstItemCenterPos.x, firstItemCenterPos.y);
+ verify(firstItem);
+ // Test QTBUG-40298.
+ actualPos = testCase.mapFromItem(firstItem, 0, 0);
+ fuzzyCompare(actualPos.x, tumbler.leftPadding, 0.0001);
+ fuzzyCompare(actualPos.y, tumbler.topPadding, 0.0001);
+
+ var secondItemCenterPos = itemCenterPos(1);
+ var secondItem = tumblerView.itemAt(secondItemCenterPos.x, secondItemCenterPos.y);
+ verify(secondItem);
+ verify(firstItem.y < secondItem.y);
+
+ var thirdItemCenterPos = itemCenterPos(2);
+ var thirdItem = tumblerView.itemAt(thirdItemCenterPos.x, thirdItemCenterPos.y);
+ verify(thirdItem);
+ verify(firstItem.y < thirdItem.y);
+ verify(secondItem.y < thirdItem.y);
+ }
+
+ function test_focusPastTumbler() {
+ tumbler = createTemporaryObject(tumblerComponent, testCase);
+ verify(tumbler);
+
+ var mouseArea = createTemporaryQmlObject(
+ "import QtQuick; TextInput { activeFocusOnTab: true; width: 50; height: 50 }", testCase, "");
+
+ tumbler.forceActiveFocus();
+ verify(tumbler.activeFocus);
+
+ keyClick(Qt.Key_Tab);
+ verify(!tumbler.activeFocus);
+ verify(mouseArea.activeFocus);
+ }
+
+ function test_datePicker() {
+ var component = Qt.createComponent("TumblerDatePicker.qml");
+ compare(component.status, Component.Ready, component.errorString());
+ tumbler = createTemporaryObject(component, testCase);
+ // Should not be any warnings.
+
+ tryCompare(tumbler.dayTumbler, "currentIndex", 0);
+ compare(tumbler.dayTumbler.count, 31);
+ compare(tumbler.monthTumbler.currentIndex, 0);
+ compare(tumbler.monthTumbler.count, 12);
+ compare(tumbler.yearTumbler.currentIndex, 0);
+ tryCompare(tumbler.yearTumbler, "count", 100);
+
+ verify(findView(tumbler.dayTumbler).children.length >= tumbler.dayTumbler.visibleItemCount);
+ verify(findView(tumbler.monthTumbler).children.length >= tumbler.monthTumbler.visibleItemCount);
+ // TODO: do this properly somehow
+ wait(100);
+ verify(findView(tumbler.yearTumbler).children.length >= tumbler.yearTumbler.visibleItemCount);
+
+ // March.
+ tumbler.monthTumbler.currentIndex = 2;
+ tryCompare(tumbler.monthTumbler, "currentIndex", 2);
+
+ // 30th of March.
+ tumbler.dayTumbler.currentIndex = 29;
+ tryCompare(tumbler.dayTumbler, "currentIndex", 29);
+
+ // February.
+ tumbler.monthTumbler.currentIndex = 1;
+ tryCompare(tumbler.monthTumbler, "currentIndex", 1);
+ tryCompare(tumbler.dayTumbler, "currentIndex", 27);
+ }
+
+ Component {
+ id: timePickerComponent
+
+ Row {
+ property alias minuteTumbler: minuteTumbler
+ property alias amPmTumbler: amPmTumbler
+
+ Tumbler {
+ id: minuteTumbler
+ currentIndex: 6
+ model: 60
+ width: 50
+ height: 150
+ }
+
+ Tumbler {
+ id: amPmTumbler
+ model: ["AM", "PM"]
+ width: 50
+ height: 150
+ contentItem: ListView {
+ anchors.fill: parent
+ model: amPmTumbler.model
+ delegate: amPmTumbler.delegate
+ }
+ }
+ }
+ }
+
+ function test_listViewTimePicker() {
+ var root = createTemporaryObject(timePickerComponent, testCase);
+ verify(root);
+
+ mouseDrag(root.minuteTumbler, root.minuteTumbler.width / 2, root.minuteTumbler.height / 2, 0, 50);
+ // Shouldn't crash.
+ mouseDrag(root.amPmTumbler, root.amPmTumbler.width / 2, root.amPmTumbler.height / 2, 0, 50);
+ }
+
+ function test_displacement_data() {
+ var data = [
+ // At 0 offset, the first item is current.
+ { count: 6, index: 0, offset: 0, expectedDisplacement: 0 },
+ { count: 6, index: 1, offset: 0, expectedDisplacement: -1 },
+ { count: 6, index: 5, offset: 0, expectedDisplacement: 1 },
+ // When we start to move the first item down, the second item above it starts to become current.
+ { count: 6, index: 0, offset: 0.25, expectedDisplacement: -0.25 },
+ { count: 6, index: 1, offset: 0.25, expectedDisplacement: -1.25 },
+ { count: 6, index: 5, offset: 0.25, expectedDisplacement: 0.75 },
+ { count: 6, index: 0, offset: 0.5, expectedDisplacement: -0.5 },
+ { count: 6, index: 1, offset: 0.5, expectedDisplacement: -1.5 },
+ { count: 6, index: 5, offset: 0.5, expectedDisplacement: 0.5 },
+ // By this stage, the delegate at index 1 is destroyed, so we can't test its displacement.
+ { count: 6, index: 0, offset: 0.75, expectedDisplacement: -0.75 },
+ { count: 6, index: 5, offset: 0.75, expectedDisplacement: 0.25 },
+ { count: 6, index: 0, offset: 4.75, expectedDisplacement: 1.25 },
+ { count: 6, index: 1, offset: 4.75, expectedDisplacement: 0.25 },
+ { count: 6, index: 0, offset: 4.5, expectedDisplacement: 1.5 },
+ { count: 6, index: 1, offset: 4.5, expectedDisplacement: 0.5 },
+ { count: 6, index: 0, offset: 4.25, expectedDisplacement: 1.75 },
+ { count: 6, index: 1, offset: 4.25, expectedDisplacement: 0.75 },
+ // count == visibleItemCount
+ { count: 3, index: 0, offset: 0, expectedDisplacement: 0 },
+ { count: 3, index: 1, offset: 0, expectedDisplacement: -1 },
+ { count: 3, index: 2, offset: 0, expectedDisplacement: 1 },
+ // count < visibleItemCount
+ { count: 2, index: 0, offset: 0, expectedDisplacement: 0 },
+ { count: 2, index: 1, offset: 0, expectedDisplacement: 1 },
+ // count == 1
+ { count: 1, index: 0, offset: 0, expectedDisplacement: 0 }
+ ];
+ for (var i = 0; i < data.length; ++i) {
+ var row = data[i];
+ row.tag = "delegate" + row.index + " offset=" + row.offset + " expectedDisplacement=" + row.expectedDisplacement;
+ }
+ return data;
+ }
+
+ property Component displacementDelegate: Text {
+ objectName: "delegate" + index
+ text: modelData
+ opacity: 0.2 + Math.max(0, 1 - Math.abs(Tumbler.displacement)) * 0.8
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ Text {
+ text: parent.displacement.toFixed(2)
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ property real displacement: Tumbler.displacement
+ }
+
+ function test_displacement(data) {
+ createTumbler();
+
+ // TODO: test setting these in the opposite order (delegate after model
+ // doesn't seem to cause a change in delegates in PathView)
+ tumbler.wrap = true;
+ tumbler.delegate = displacementDelegate;
+ tumbler.model = data.count;
+ compare(tumbler.count, data.count);
+
+ var delegate = findChild(tumblerView, "delegate" + data.index);
+ verify(delegate);
+
+ tumblerView.offset = data.offset;
+ compare(delegate.displacement, data.expectedDisplacement);
+
+ // test displacement after adding and removing items
+ }
+
+ function test_wrap() {
+ createTumbler();
+
+ tumbler.model = 5;
+ compare(tumbler.count, 5);
+
+ tumbler.currentIndex = 2;
+ compare(tumblerView.currentIndex, 2);
+
+ tumbler.wrap = false;
+ tumblerView = findView(tumbler);
+ compare(tumbler.count, 5);
+ compare(tumbler.currentIndex, 2);
+ // Tumbler's count hasn't changed (the model hasn't changed),
+ // but the new view needs time to instantiate its items.
+ tryCompare(tumblerView, "count", 5);
+ compare(tumblerView.currentIndex, 2);
+ }
+
+ Component {
+ id: twoItemTumbler
+
+ Tumbler {
+ model: 2
+ }
+ }
+
+ Component {
+ id: tenItemTumbler
+
+ Tumbler {
+ model: 10
+ }
+ }
+
+ function test_countWrap() {
+ tumbler = createTemporaryObject(tumblerComponent, testCase);
+ verify(tumbler);
+
+ // Check that a count that is less than visibleItemCount results in wrap being set to false.
+ verify(2 < tumbler.visibleItemCount);
+ tumbler.model = 2;
+ compare(tumbler.count, 2);
+ compare(tumbler.wrap, false);
+ }
+
+ function test_explicitlyNonwrapping() {
+ // Check that explicitly setting wrap to false works even when it was implicitly false.
+ var explicitlyNonWrapping = createTemporaryObject(twoItemTumbler, testCase);
+ verify(explicitlyNonWrapping);
+ tryCompare(explicitlyNonWrapping, "wrap", false);
+
+ explicitlyNonWrapping.wrap = false;
+ // wrap shouldn't be set to true now that there are more items than there are visible ones.
+ verify(10 > explicitlyNonWrapping.visibleItemCount);
+ explicitlyNonWrapping.model = 10;
+ compare(explicitlyNonWrapping.wrap, false);
+
+ // Test resetting wrap back to the default behavior.
+ explicitlyNonWrapping.wrap = undefined;
+ compare(explicitlyNonWrapping.wrap, true);
+ }
+
+ function test_explicitlyWrapping() {
+ // Check that explicitly setting wrap to true works even when it was implicitly true.
+ var explicitlyWrapping = createTemporaryObject(tenItemTumbler, testCase);
+ verify(explicitlyWrapping);
+ compare(explicitlyWrapping.wrap, true);
+
+ explicitlyWrapping.wrap = true;
+ // wrap shouldn't be set to false now that there are more items than there are visible ones.
+ explicitlyWrapping.model = 2;
+ compare(explicitlyWrapping.wrap, true);
+
+ // Test resetting wrap back to the default behavior.
+ explicitlyWrapping.wrap = undefined;
+ compare(explicitlyWrapping.wrap, false);
+ }
+
+ Component {
+ id: customListViewTumblerComponent
+
+ Tumbler {
+ id: listViewTumbler
+
+ contentItem: ListView {
+ anchors.fill: parent
+ model: listViewTumbler.model
+ delegate: listViewTumbler.delegate
+
+ snapMode: ListView.SnapToItem
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ preferredHighlightBegin: height / 2 - (height / listViewTumbler.visibleItemCount / 2)
+ preferredHighlightEnd: height / 2 + (height / listViewTumbler.visibleItemCount / 2)
+ clip: true
+ }
+ }
+ }
+
+ Component {
+ id: customPathViewTumblerComponent
+
+ Tumbler {
+ id: pathViewTumbler
+
+ contentItem: PathView {
+ id: pathView
+ model: pathViewTumbler.model
+ delegate: pathViewTumbler.delegate
+ clip: true
+ pathItemCount: pathViewTumbler.visibleItemCount + 1
+ preferredHighlightBegin: 0.5
+ preferredHighlightEnd: 0.5
+ dragMargin: width / 2
+
+ path: Path {
+ startX: pathView.width / 2
+ startY: -pathView.delegateHeight / 2
+ PathLine {
+ x: pathView.width / 2
+ y: pathView.pathItemCount * pathView.delegateHeight - pathView.delegateHeight / 2
+ }
+ }
+
+ property real delegateHeight: pathViewTumbler.availableHeight / pathViewTumbler.visibleItemCount
+ }
+ }
+ }
+
+ function test_customContentItemAtConstruction_data() {
+ return [
+ { tag: "ListView", component: customListViewTumblerComponent },
+ { tag: "PathView", component: customPathViewTumblerComponent }
+ ];
+ }
+
+ function test_customContentItemAtConstruction(data) {
+ var tumbler = createTemporaryObject(data.component, testCase);
+ // Shouldn't assert.
+
+ tumbler.model = 5;
+ compare(tumbler.count, 5);
+
+ tumbler.currentIndex = 2;
+ var tumblerView = findView(tumbler);
+ compare(tumblerView.currentIndex, 2);
+
+ tumblerView.incrementCurrentIndex();
+ compare(tumblerView.currentIndex, 3);
+ compare(tumbler.currentIndex, 3);
+
+ // Shouldn't have any affect.
+ tumbler.wrap = false;
+ compare(tumbler.count, 5);
+ compare(tumblerView.currentIndex, 3);
+ compare(tumbler.currentIndex, 3);
+ }
+
+ function findFirstDelegateWithText(view, text) {
+ var delegate = null;
+ var contentItem = view.hasOwnProperty("contentItem") ? view.contentItem : view;
+ for (var i = 0; i < contentItem.children.length && !delegate; ++i) {
+ var child = contentItem.children[i];
+ if (child.hasOwnProperty("text") && child.text === text)
+ delegate = child;
+ }
+ return delegate;
+ }
+
+ function test_customContentItemAfterConstruction_data() {
+ return [
+ { tag: "ListView", componentPath: "TumblerListView.qml" },
+ { tag: "PathView", componentPath: "TumblerPathView.qml" }
+ ];
+ }
+
+ function test_customContentItemAfterConstruction(data) {
+ createTumbler();
+
+ tumbler.model = 5;
+ compare(tumbler.count, 5);
+
+ tumbler.currentIndex = 2;
+ compare(tumblerView.currentIndex, 2);
+
+ var contentItemComponent = Qt.createComponent(data.componentPath);
+ compare(contentItemComponent.status, Component.Ready);
+
+ var customContentItem = createTemporaryObject(contentItemComponent, tumbler);
+ tumbler.contentItem = customContentItem;
+ compare(tumbler.count, 5);
+ tumblerView = findView(tumbler);
+ compare(tumblerView.currentIndex, 2);
+
+ var delegate = findFirstDelegateWithText(tumblerView, "Custom2");
+ verify(delegate);
+ compare(delegate.height, defaultImplicitDelegateHeight);
+ tryCompare(delegate.Tumbler, "displacement", 0);
+
+ tumblerView.incrementCurrentIndex();
+ compare(tumblerView.currentIndex, 3);
+ compare(tumbler.currentIndex, 3);
+ }
+
+ function test_displacementListView_data() {
+ var offset = defaultListViewTumblerOffset;
+
+ var data = [
+ // At 0 contentY, the first item is current.
+ { contentY: offset, expectedDisplacements: [
+ { index: 0, displacement: 0 },
+ { index: 1, displacement: -1 },
+ { index: 2, displacement: -2 } ]
+ },
+ // When we start to move the first item down, the second item above it starts to become current.
+ { contentY: offset + defaultImplicitDelegateHeight * 0.25, expectedDisplacements: [
+ { index: 0, displacement: 0.25 },
+ { index: 1, displacement: -0.75 },
+ { index: 2, displacement: -1.75 } ]
+ },
+ { contentY: offset + defaultImplicitDelegateHeight * 0.5, expectedDisplacements: [
+ { index: 0, displacement: 0.5 },
+ { index: 1, displacement: -0.5 },
+ { index: 2, displacement: -1.5 } ]
+ },
+ { contentY: offset + defaultImplicitDelegateHeight * 0.75, expectedDisplacements: [
+ { index: 0, displacement: 0.75 },
+ { index: 1, displacement: -0.25 } ]
+ },
+ { contentY: offset + defaultImplicitDelegateHeight * 3.5, expectedDisplacements: [
+ { index: 3, displacement: 0.5 },
+ { index: 4, displacement: -0.5 } ]
+ }
+ ];
+ for (var i = 0; i < data.length; ++i) {
+ var row = data[i];
+ row.tag = "contentY=" + row.contentY;
+ }
+ return data;
+ }
+
+ function test_displacementListView(data) {
+ createTumbler();
+
+ tumbler.wrap = false;
+ tumbler.delegate = displacementDelegate;
+ tumbler.model = 5;
+ compare(tumbler.count, 5);
+ // Ensure assumptions about the tumbler used in our data() function are correct.
+ tumblerView = findView(tumbler);
+ compare(tumblerView.contentY, -defaultImplicitDelegateHeight);
+ var delegateCount = 0;
+ var listView = tumblerView;
+ var listViewContentItem = tumblerView.contentItem;
+
+ // We use the mouse instead of setting contentY directly, otherwise the
+ // items snap back into place. This doesn't seem to be an issue for
+ // PathView for some reason.
+ //
+ // I tried lots of things to get this test to work with small changes
+ // in ListView's contentY (to match the tests for a PathView-based Tumbler), but they didn't work:
+ //
+ // - Pressing once and then directly moving the mouse to the correct location
+ // - Pressing once and interpolating the mouse position to the correct location
+ // - Pressing once and doing some dragging up and down to trigger the
+ // overThreshold of QQuickFlickable
+ //
+ // Even after the last item above, QQuickFlickable wouldn't consider it a drag.
+ // It seems that overThreshold is set too late, and because the drag distance is quite small
+ // to begin with, nothing changes (the displacement was always very close to 0 in the end).
+
+ // Ensure that we at least cover the distance required to reach the desired contentY.
+ var distanceToReachContentY = data.contentY - defaultListViewTumblerOffset;
+ var distance = Math.abs(distanceToReachContentY) + tumbler.height / 2;
+ // If distanceToReachContentY is 0, we're testing 0 displacement, so we don't need to do anything.
+ if (distanceToReachContentY != 0) {
+ mousePress(tumbler, tumblerXCenter(), tumblerYCenter());
+
+ var dragDirection = distanceToReachContentY > 0 ? -1 : 1;
+ for (var i = 0; i < distance && Math.floor(listView.contentY) !== Math.floor(data.contentY); ++i) {
+ mouseMove(tumbler, tumblerXCenter(), tumblerYCenter() + i * dragDirection);
+ wait(1); // because Flickable pays attention to velocity, we need some time between movements (qtdeclarative ebf07c3)
+ }
+ }
+
+ for (var i = 0; i < data.expectedDisplacements.length; ++i) {
+ var delegate = findChild(listViewContentItem, "delegate" + data.expectedDisplacements[i].index);
+ verify(delegate);
+ compare(delegate.height, defaultImplicitDelegateHeight);
+ // Due to the way we must perform this test, we can't expect high precision.
+ var expectedDisplacement = data.expectedDisplacements[i].displacement;
+ fuzzyCompare(delegate.displacement, expectedDisplacement, 0.1,
+ "Delegate of ListView-based Tumbler at index " + data.expectedDisplacements[i].index
+ + " has displacement of " + delegate.displacement + " when it should be " + expectedDisplacement);
+ }
+
+ if (distanceToReachContentY != 0)
+ mouseRelease(tumbler, tumblerXCenter(), itemCenterPos(1) + (data.contentY - defaultListViewTumblerOffset), Qt.LeftButton);
+ }
+
+ function test_listViewFlickAboveBounds_data() {
+ // Tests that flicking above the bounds when already at the top of the
+ // tumbler doesn't result in an incorrect displacement.
+ var data = [];
+ // Less than two items doesn't make sense. The default visibleItemCount
+ // is 3, so we test a bit more than double that.
+ for (var i = 2; i <= 7; ++i) {
+ data.push({ tag: i + " items", model: i });
+ }
+ return data;
+ }
+
+ function test_listViewFlickAboveBounds(data) {
+ createTumbler();
+
+ tumbler.wrap = false;
+ tumbler.delegate = displacementDelegate;
+ tumbler.model = data.model;
+ tumblerView = findView(tumbler);
+
+ mousePress(tumbler, tumblerXCenter(), tumblerYCenter());
+
+ // Ensure it's stationary.
+ var listView = tumblerView;
+ compare(listView.contentY, defaultListViewTumblerOffset);
+
+ // We could just move up until the contentY changed, but this is safer.
+ var distance = tumbler.height;
+ var changed = false;
+
+ for (var i = 0; i < distance && !changed; ++i) {
+ mouseMove(tumbler, tumblerXCenter(), tumblerYCenter() + i, 10);
+
+ // Don't test until the contentY has actually changed.
+ if (Math.abs(listView.contentY) - listView.preferredHighlightBegin > 0.01) {
+
+ for (var delegateIndex = 0; delegateIndex < Math.min(tumbler.count, tumbler.visibleItemCount); ++delegateIndex) {
+ var delegate = findChild(listView.contentItem, "delegate" + delegateIndex);
+ verify(delegate);
+
+ verify(delegate.displacement <= -delegateIndex, "Delegate at index " + delegateIndex + " has a displacement of "
+ + delegate.displacement + " when it should be less than or equal to " + -delegateIndex);
+ verify(delegate.displacement > -delegateIndex - 0.1, "Delegate at index 0 has a displacement of "
+ + delegate.displacement + " when it should be greater than ~ " + -delegateIndex - 0.1);
+ }
+
+ changed = true;
+ }
+ }
+
+ // Sanity check that something was actually tested.
+ verify(changed);
+
+ mouseRelease(tumbler, tumblerXCenter(), tumbler.topPadding);
+ }
+
+ property Component objectNameDelegate: Text {
+ objectName: "delegate" + index
+ text: modelData
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ function test_visibleItemCount_data() {
+ var data = [
+ // e.g. {0: 2} = {delegate index: y pos / delegate height}
+ // Skip item at index 3, because it's out of view.
+ { model: 6, visibleItemCount: 5, expectedYPositions: {0: 2, 1: 3, 2: 4, 4: 0} },
+ { model: 5, visibleItemCount: 3, expectedYPositions: {0: 1, 1: 2, 4: 0} },
+ // Takes up the whole view.
+ { model: 2, visibleItemCount: 1, expectedYPositions: {0: 0} },
+ ];
+
+ for (var i = 0; i < data.length; ++i) {
+ data[i].tag = "items=" + data[i].model + ", visibleItemCount=" + data[i].visibleItemCount;
+ }
+ return data;
+ }
+
+ function test_visibleItemCount(data) {
+ createTumbler();
+
+ tumbler.delegate = objectNameDelegate;
+ tumbler.visibleItemCount = data.visibleItemCount;
+
+ tumbler.model = data.model;
+ compare(tumbler.count, data.model);
+
+ for (var delegateIndex = 0; delegateIndex < data.visibleItemCount; ++delegateIndex) {
+ if (data.expectedYPositions.hasOwnProperty(delegateIndex)) {
+ var delegate = findChild(tumblerView, "delegate" + delegateIndex);
+ verify(delegate, "Delegate found at index " + delegateIndex);
+ var expectedYPos = data.expectedYPositions[delegateIndex] * tumblerDelegateHeight;
+ compare(delegate.mapToItem(tumbler.contentItem, 0, 0).y, expectedYPos);
+ }
+ }
+ }
+
+ property Component wrongDelegateTypeComponent: QtObject {
+ property real displacement: Tumbler.displacement
+ }
+
+ property Component noParentDelegateComponent: Item {
+ property real displacement: Tumbler.displacement
+ }
+
+ function test_attachedProperties() {
+ tumbler = createTemporaryObject(tumblerComponent, testCase);
+ verify(tumbler);
+
+ // TODO: crashes somewhere in QML's guts
+// tumbler.model = 5;
+// tumbler.delegate = wrongDelegateTypeComponent;
+// ignoreWarning("Attached properties of Tumbler must be accessed from within a delegate item");
+// // Cause displacement to be changed. The warning isn't triggered if we don't do this.
+// tumbler.contentItem.offset += 1;
+
+ ignoreWarning(/.*Tumbler: attached properties must be accessed through a delegate item that has a parent/);
+ createTemporaryObject(noParentDelegateComponent, null);
+
+ ignoreWarning(/.*Tumbler: attempting to access attached property on item without an \"index\" property/);
+ var object = createTemporaryObject(noParentDelegateComponent, testCase);
+ verify(object);
+ }
+
+ property Component paddingDelegate: Text {
+ objectName: "delegate" + index
+ text: modelData
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ Rectangle {
+ anchors.fill: parent
+ color: "transparent"
+ border.color: "red"
+ border.width: 1
+ }
+ }
+
+ function test_padding_data() {
+ var data = [];
+
+ data.push({ padding: 0 });
+ data.push({ padding: 10 });
+ data.push({ left: 10, top: 10 });
+ data.push({ right: 10, bottom: 10 });
+
+ for (var i = 0; i < data.length; ++i) {
+ var tag = "";
+
+ if (data[i].padding !== undefined)
+ tag += "padding: " + data[i].padding + " ";
+ if (data[i].left !== undefined)
+ tag += "left: " + data[i].left + " ";
+ if (data[i].right !== undefined)
+ tag += "right: " + data[i].right + " ";
+ if (data[i].top !== undefined)
+ tag += "top: " + data[i].top + " ";
+ if (data[i].bottom !== undefined)
+ tag += "bottom: " + data[i].bottom + " ";
+ tag = tag.slice(0, -1);
+
+ data[i].tag = tag;
+ }
+
+ return data;
+ }
+
+ function test_padding(data) {
+ createTumbler();
+
+ tumbler.delegate = paddingDelegate;
+ tumbler.model = 5;
+ compare(tumbler.padding, 0);
+ compare(tumbler.leftPadding, 0);
+ compare(tumbler.rightPadding, 0);
+ compare(tumbler.topPadding, 0);
+ compare(tumbler.bottomPadding, 0);
+ compare(tumbler.contentItem.x, 0);
+ compare(tumbler.contentItem.y, 0);
+
+ if (data.padding !== undefined)
+ tumbler.padding = data.padding;
+ if (data.left !== undefined)
+ tumbler.leftPadding = data.left;
+ if (data.right !== undefined)
+ tumbler.rightPadding = data.right;
+ if (data.top !== undefined)
+ tumbler.topPadding = data.top;
+ if (data.bottom !== undefined)
+ tumbler.bottomPadding = data.bottom;
+
+ compare(tumbler.availableWidth, tumbler.implicitWidth - tumbler.leftPadding - tumbler.rightPadding);
+ compare(tumbler.availableHeight, tumbler.implicitHeight - tumbler.topPadding - tumbler.bottomPadding);
+ compare(tumbler.contentItem.x, tumbler.leftPadding);
+ compare(tumbler.contentItem.y, tumbler.topPadding);
+
+ var pathView = tumbler.contentItem;
+ var expectedDelegateHeight = tumbler.availableHeight / tumbler.visibleItemCount;
+ var itemIndicesInVisualOrder = [4, 0, 1];
+ for (var i = 0; i < itemIndicesInVisualOrder.length; ++i) {
+ var delegate = findChild(pathView, "delegate" + itemIndicesInVisualOrder[i]);
+ verify(delegate, "Couldn't find delegate at index " + itemIndicesInVisualOrder[i]
+ + " (iteration " + i + " out of " + (pathView.children.length - 1) + ")");
+
+ compare(delegate.width, tumbler.availableWidth);
+ compare(delegate.height, expectedDelegateHeight);
+
+ var expectedY = tumbler.topPadding + i * expectedDelegateHeight;
+ var mappedPos = delegate.mapToItem(null, delegate.width / 2, 0);
+ fuzzyCompare(mappedPos.y, expectedY, 0.5,
+ "Tumbler's PathView delegate at index " + itemIndicesInVisualOrder[i]
+ + " should have a y pos of " + expectedY + ", but it's actually " + mappedPos.y.toFixed(20));
+
+ var expectedX = tumbler.leftPadding;
+ compare(delegate.mapToItem(null, 0, 0).x, expectedX,
+ "Tumbler's PathView delegate at index " + itemIndicesInVisualOrder[i]
+ + " should have a x pos of " + expectedX + ", but it's actually " + mappedPos.x.toFixed(20));
+ }
+
+ // Force new items to be created, as there was a bug where the path was correct until this happened.
+ compare(tumblerView.offset, 0);
+ ++tumbler.currentIndex;
+ tryCompare(tumblerView, "offset", 4, tumblerView.highlightMoveDuration * 2);
+ }
+
+ function test_moving_data() {
+ return [
+ { tag: "wrap:true", wrap: true },
+ { tag: "wrap:false", wrap: false }
+ ]
+ }
+
+ function test_moving(data) {
+ createTumbler({wrap: data.wrap, model: 5})
+ compare(tumbler.wrap, data.wrap)
+ compare(tumbler.moving, false)
+
+ waitForRendering(tumbler)
+
+ mousePress(tumbler, tumbler.width / 2, tumbler.height / 2, Qt.LeftButton)
+ compare(tumbler.moving, false)
+
+ for (var y = tumbler.height / 2; y >= tumbler.height / 4; y -= 10)
+ mouseMove(tumbler, tumbler.width / 2, y, 1)
+ compare(tumbler.moving, true)
+
+ mouseRelease(tumbler, tumbler.width / 2, tumbler.height / 4, Qt.LeftButton)
+ compare(tumbler.moving, true)
+ tryCompare(tumbler, "moving", false)
+ }
+
+ Component {
+ id: qtbug61374Component
+
+ Row {
+ property alias tumbler: tumbler
+ property alias label: label
+
+ Component.onCompleted: {
+ tumbler.currentIndex = 2
+ }
+
+ Tumbler {
+ id: tumbler
+ model: 5
+ // ...
+ }
+
+ Label {
+ id: label
+ text: tumbler.currentItem.text
+ }
+ }
+ }
+
+ function test_qtbug61374() {
+ var row = createTemporaryObject(qtbug61374Component, testCase);
+ verify(row);
+
+ var tumbler = row.tumbler;
+ tryCompare(tumbler, "currentIndex", 2);
+
+ tumblerView = findView(tumbler);
+
+ var label = row.label;
+ compare(label.text, "2");
+ }
+
+ function test_positionViewAtIndex_data() {
+ return [
+ // Should be 20, 21, ... but there is a documented limitation for this in positionViewAtIndex()'s docs.
+ { tag: "wrap=true, mode=Beginning", wrap: true, mode: Tumbler.Beginning, expectedVisibleIndices: [21, 22, 23, 24, 25] },
+ { tag: "wrap=true, mode=Center", wrap: true, mode: Tumbler.Center, expectedVisibleIndices: [18, 19, 20, 21, 22] },
+ { tag: "wrap=true, mode=End", wrap: true, mode: Tumbler.End, expectedVisibleIndices: [16, 17, 18, 19, 20] },
+ // Same as Beginning; should start at 20.
+ { tag: "wrap=true, mode=Contain", wrap: true, mode: Tumbler.Contain, expectedVisibleIndices: [21, 22, 23, 24, 25] },
+ { tag: "wrap=true, mode=SnapPosition", wrap: true, mode: Tumbler.SnapPosition, expectedVisibleIndices: [18, 19, 20, 21, 22] },
+ { tag: "wrap=false, mode=Beginning", wrap: false, mode: Tumbler.Beginning, expectedVisibleIndices: [20, 21, 22, 23, 24] },
+ { tag: "wrap=false, mode=Center", wrap: false, mode: Tumbler.Center, expectedVisibleIndices: [18, 19, 20, 21, 22] },
+ { tag: "wrap=false, mode=End", wrap: false, mode: Tumbler.End, expectedVisibleIndices: [16, 17, 18, 19, 20] },
+ { tag: "wrap=false, mode=Visible", wrap: false, mode: Tumbler.Visible, expectedVisibleIndices: [16, 17, 18, 19, 20] },
+ { tag: "wrap=false, mode=Contain", wrap: false, mode: Tumbler.Contain, expectedVisibleIndices: [16, 17, 18, 19, 20] },
+ { tag: "wrap=false, mode=SnapPosition", wrap: false, mode: Tumbler.SnapPosition, expectedVisibleIndices: [18, 19, 20, 21, 22] }
+ ]
+ }
+
+ function test_positionViewAtIndex(data) {
+ createTumbler({ wrap: data.wrap, model: 40, visibleItemCount: 5 })
+ compare(tumbler.wrap, data.wrap)
+
+ waitForRendering(tumbler)
+
+ tumbler.positionViewAtIndex(20, data.mode)
+ tryCompare(tumbler, "moving", false)
+
+ compare(tumbler.visibleItemCount, 5)
+ for (var i = 0; i < 5; ++i) {
+ // Find the item through its text, as that's easier than child/itemAt().
+ var text = data.expectedVisibleIndices[i].toString()
+ var item = findDelegateWithText(tumblerView, text)
+ verify(item, "found no item with text \"" + text + "\"")
+ compare(item.text, data.expectedVisibleIndices[i].toString())
+
+ // Ensure that it's at the position we expect.
+ var expectedPos = itemTopLeftPos(i)
+ var actualPos = testCase.mapFromItem(item, 0, 0)
+ compare(actualPos.x, expectedPos.x, "expected delegate with text " + item.text
+ + " to have an x pos of " + expectedPos.x + " but it was " + actualPos.x)
+ compare(actualPos.y, expectedPos.y, "expected delegate with text " + item.text
+ + " to have an y pos of " + expectedPos.y + " but it was " + actualPos.y)
+ }
+ }
+
+ Component {
+ id: setCurrentIndexOnImperativeModelChangeComponent
+
+ Tumbler {
+ onModelChanged: currentIndex = model - 2
+ }
+ }
+
+ function test_setCurrentIndexOnImperativeModelChange() {
+ var tumbler = createTemporaryObject(setCurrentIndexOnImperativeModelChangeComponent, testCase);
+ verify(tumbler);
+
+ tumbler.model = 4
+ compare(tumbler.count, 4);
+ tumblerView = findView(tumbler);
+ tryCompare(tumblerView, "count", 4);
+
+ // 4 - 2 = 2
+ compare(tumbler.currentIndex, 2);
+
+ ++tumbler.model;
+ compare(tumbler.count, 5);
+ compare(tumbler.wrap, true);
+ tumblerView = findView(tumbler);
+ tryCompare(tumblerView, "count", 5);
+ // 5 - 2 = 3
+ compare(tumbler.currentIndex, 3);
+ }
+
+ Component {
+ id: setCurrentIndexOnDeclarativeModelChangeComponent
+
+ Item {
+ property alias tumbler: tumbler
+
+ property int setting: 4
+
+ Tumbler {
+ id: tumbler
+ model: setting
+ onModelChanged: currentIndex = model - 2
+ }
+ }
+ }
+
+ function test_setCurrentIndexOnDeclarativeModelChange() {
+ var root = createTemporaryObject(setCurrentIndexOnDeclarativeModelChangeComponent, testCase);
+ verify(root);
+
+ var tumbler = root.tumbler;
+ compare(tumbler.count, 4);
+ compare(tumbler.wrap, false);
+ tumblerView = findView(tumbler);
+ tryCompare(tumblerView, "count", 4);
+ // 4 - 2 = 2
+ compare(tumbler.currentIndex, 2);
+
+ ++root.setting;
+ compare(tumbler.count, 5);
+ compare(tumbler.wrap, true);
+ tumblerView = findView(tumbler);
+ tryCompare(tumblerView, "count", 5);
+ // 5 - 2 = 3
+ compare(tumbler.currentIndex, 3);
+ }
+
+ function test_displacementAfterResizing() {
+ createTumbler({
+ width: 200,
+ wrap: false,
+ delegate: displacementDelegate,
+ model: 30,
+ visibleItemCount: 7,
+ currentIndex: 15
+ })
+
+ var delegate = findChild(tumblerView, "delegate15")
+ verify(delegate)
+
+ tryCompare(delegate, "displacement", 0)
+
+ // Resizing the Tumbler shouldn't affect the displacement.
+ tumbler.height *= 1.4
+ tryCompare(delegate, "displacement", 0)
+ }
+
+ //QTBUG-84426
+ Component {
+ id: initialCurrentIndexTumbler
+
+ Tumbler {
+ anchors.centerIn: parent
+ width: 60
+ height: 200
+ delegate: Text {text: modelData}
+ model: 10
+ currentIndex: 4
+ }
+ }
+
+ function test_initialCurrentIndex() {
+ var tumbler = createTemporaryObject(initialCurrentIndexTumbler, testCase, {wrap: true});
+ compare(tumbler.currentIndex, 4);
+ tumbler = createTemporaryObject(initialCurrentIndexTumbler, testCase, {wrap: false});
+ compare(tumbler.currentIndex, 4);
+ }
+}
diff --git a/tests/auto/quickcontrols2/controls/fusion/BLACKLIST b/tests/auto/quickcontrols2/controls/fusion/BLACKLIST
new file mode 100644
index 0000000000..bdb2af0b46
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/fusion/BLACKLIST
@@ -0,0 +1,10 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+# QTBUG-70597
+[Tumbler::test_itemsCorrectlyPositioned]
+*
+
+# QTBUG-95750
+[RangeSlider::test_overlappingHandles]
+b2qt
+qnx
diff --git a/tests/auto/quickcontrols2/controls/fusion/CMakeLists.txt b/tests/auto/quickcontrols2/controls/fusion/CMakeLists.txt
new file mode 100644
index 0000000000..6381718103
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/fusion/CMakeLists.txt
@@ -0,0 +1,40 @@
+# Generated from fusion.pro.
+
+#####################################################################
+## tst_fusion Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_fusion
+ GUI
+ QMLTEST
+ SOURCES
+ tst_fusion.cpp
+ DEFINES
+ TST_CONTROLS_DATA=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../data\\\"
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::QuickControls2
+ Qt::QuickTemplates2
+ TESTDATA ${test_data}
+)
+
+# Make the QML files available to Creator's locator.
+target_sources(tst_fusion
+ PRIVATE
+ ${test_data}
+)
+
+set_source_files_properties(${test_data}
+ PROPERTIES
+ HEADER_FILE_ONLY ON
+)
+
+#### Keys ignored in scope 1:.:.:fusion.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/../data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/controls/fusion/dependencies.qml b/tests/auto/quickcontrols2/controls/fusion/dependencies.qml
new file mode 100644
index 0000000000..f2e40e6059
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/fusion/dependencies.qml
@@ -0,0 +1,6 @@
+import QtTest
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Fusion
+
+TestCase { }
diff --git a/tests/auto/quickcontrols2/controls/fusion/dummy_imports.qml b/tests/auto/quickcontrols2/controls/fusion/dummy_imports.qml
new file mode 100644
index 0000000000..580db56d12
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/fusion/dummy_imports.qml
@@ -0,0 +1,12 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQml
+import QtQuick
+import QtQuick.NativeStyle
+import QtQuick.Layouts
+import Qt.labs.settings
+import Qt.labs.qmlmodels
+
+QtObject { }
diff --git a/tests/auto/quickcontrols2/controls/fusion/tst_fusion.cpp b/tests/auto/quickcontrols2/controls/fusion/tst_fusion.cpp
new file mode 100644
index 0000000000..7528ccea2b
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/fusion/tst_fusion.cpp
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+int main(int argc, char *argv[])
+{
+ QTEST_SET_MAIN_SOURCE_PATH
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+ QQuickStyle::setStyle("Fusion");
+ return quick_test_main(argc, argv, "tst_controls::Fusion", TST_CONTROLS_DATA);
+}
diff --git a/tests/auto/quickcontrols2/controls/imagine/BLACKLIST b/tests/auto/quickcontrols2/controls/imagine/BLACKLIST
new file mode 100644
index 0000000000..72eebcd21d
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/imagine/BLACKLIST
@@ -0,0 +1,14 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+# QTBUG-70597
+[Tumbler::test_itemsCorrectlyPositioned]
+*
+
+# QTBUG-95750
+[RangeSlider::test_overlappingHandles]
+b2qt
+qnx
+
+# QTBUG-101704
+[ToolTip::test_attachedSizeBug]
+*
diff --git a/tests/auto/quickcontrols2/controls/imagine/CMakeLists.txt b/tests/auto/quickcontrols2/controls/imagine/CMakeLists.txt
new file mode 100644
index 0000000000..962628e1b6
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/imagine/CMakeLists.txt
@@ -0,0 +1,40 @@
+# Generated from imagine.pro.
+
+#####################################################################
+## tst_imagine Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_imagine
+ GUI
+ QMLTEST
+ SOURCES
+ tst_imagine.cpp
+ DEFINES
+ TST_CONTROLS_DATA=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../data\\\"
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::QuickControls2
+ Qt::QuickTemplates2
+ TESTDATA ${test_data}
+)
+
+# Make the QML files available to Creator's locator.
+target_sources(tst_imagine
+ PRIVATE
+ ${test_data}
+)
+
+set_source_files_properties(${test_data}
+ PROPERTIES
+ HEADER_FILE_ONLY ON
+)
+
+#### Keys ignored in scope 1:.:.:imagine.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/../data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/controls/imagine/dependencies.qml b/tests/auto/quickcontrols2/controls/imagine/dependencies.qml
new file mode 100644
index 0000000000..9a31141bff
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/imagine/dependencies.qml
@@ -0,0 +1,6 @@
+import QtTest
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Imagine
+
+TestCase { }
diff --git a/tests/auto/quickcontrols2/controls/imagine/dummy_imports.qml b/tests/auto/quickcontrols2/controls/imagine/dummy_imports.qml
new file mode 100644
index 0000000000..580db56d12
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/imagine/dummy_imports.qml
@@ -0,0 +1,12 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQml
+import QtQuick
+import QtQuick.NativeStyle
+import QtQuick.Layouts
+import Qt.labs.settings
+import Qt.labs.qmlmodels
+
+QtObject { }
diff --git a/tests/auto/quickcontrols2/controls/imagine/tst_imagine.cpp b/tests/auto/quickcontrols2/controls/imagine/tst_imagine.cpp
new file mode 100644
index 0000000000..9db7ed4dc6
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/imagine/tst_imagine.cpp
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+int main(int argc, char *argv[])
+{
+ QTEST_SET_MAIN_SOURCE_PATH
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+ QQuickStyle::setStyle("Imagine");
+ return quick_test_main(argc, argv, "tst_controls::Imagine", TST_CONTROLS_DATA);
+}
diff --git a/tests/auto/quickcontrols2/controls/macos/BLACKLIST b/tests/auto/quickcontrols2/controls/macos/BLACKLIST
new file mode 100644
index 0000000000..3b77159dd2
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/macos/BLACKLIST
@@ -0,0 +1,27 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+# QTBUG-95678
+# Blacklisted in order to get the native macOS style under
+# regression control
+[ComboBox::test_font]
+*
+[ComboBox::test_implicitContentWidthPolicy_WidestText]
+*
+[ComboBox::test_popup]
+*
+[ComboBox::test_implicitContentWidthPolicy_WidestTextWhenCompleted]
+*
+[Popup::test_font]
+*
+[ScrollBar::test_flashing]
+*
+[ScrollBar::test_policy]
+*
+[ScrollView::test_keys]
+*
+[Slider::test_snapMode_touch]
+*
+[TextArea::test_implicitSize]
+*
+[TextField::test_implicitSize]
+*
diff --git a/tests/auto/quickcontrols2/controls/material/BLACKLIST b/tests/auto/quickcontrols2/controls/material/BLACKLIST
new file mode 100644
index 0000000000..bdb2af0b46
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/material/BLACKLIST
@@ -0,0 +1,10 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+# QTBUG-70597
+[Tumbler::test_itemsCorrectlyPositioned]
+*
+
+# QTBUG-95750
+[RangeSlider::test_overlappingHandles]
+b2qt
+qnx
diff --git a/tests/auto/quickcontrols2/controls/material/CMakeLists.txt b/tests/auto/quickcontrols2/controls/material/CMakeLists.txt
new file mode 100644
index 0000000000..b07a63e32d
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/material/CMakeLists.txt
@@ -0,0 +1,40 @@
+# Generated from material.pro.
+
+#####################################################################
+## tst_material Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_material
+ GUI
+ QMLTEST
+ SOURCES
+ tst_material.cpp
+ DEFINES
+ TST_CONTROLS_DATA=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../data\\\"
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::QuickControls2
+ Qt::QuickTemplates2
+ TESTDATA ${test_data}
+)
+
+# Make the QML files available to Creator's locator.
+target_sources(tst_material
+ PRIVATE
+ ${test_data}
+)
+
+set_source_files_properties(${test_data}
+ PROPERTIES
+ HEADER_FILE_ONLY ON
+)
+
+#### Keys ignored in scope 1:.:.:material.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/../data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/controls/material/dependencies.qml b/tests/auto/quickcontrols2/controls/material/dependencies.qml
new file mode 100644
index 0000000000..8bcf03013c
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/material/dependencies.qml
@@ -0,0 +1,6 @@
+import QtTest
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+TestCase { }
diff --git a/tests/auto/quickcontrols2/controls/material/dummy_imports.qml b/tests/auto/quickcontrols2/controls/material/dummy_imports.qml
new file mode 100644
index 0000000000..580db56d12
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/material/dummy_imports.qml
@@ -0,0 +1,12 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQml
+import QtQuick
+import QtQuick.NativeStyle
+import QtQuick.Layouts
+import Qt.labs.settings
+import Qt.labs.qmlmodels
+
+QtObject { }
diff --git a/tests/auto/quickcontrols2/controls/material/tst_material.cpp b/tests/auto/quickcontrols2/controls/material/tst_material.cpp
new file mode 100644
index 0000000000..ae8bb3a11e
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/material/tst_material.cpp
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+int main(int argc, char *argv[])
+{
+ QTEST_SET_MAIN_SOURCE_PATH
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+ QQuickStyle::setStyle("Material");
+ return quick_test_main(argc, argv, "tst_controls::Material", TST_CONTROLS_DATA);
+}
diff --git a/tests/auto/quickcontrols2/controls/universal/BLACKLIST b/tests/auto/quickcontrols2/controls/universal/BLACKLIST
new file mode 100644
index 0000000000..bdb2af0b46
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/universal/BLACKLIST
@@ -0,0 +1,10 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+# QTBUG-70597
+[Tumbler::test_itemsCorrectlyPositioned]
+*
+
+# QTBUG-95750
+[RangeSlider::test_overlappingHandles]
+b2qt
+qnx
diff --git a/tests/auto/quickcontrols2/controls/universal/CMakeLists.txt b/tests/auto/quickcontrols2/controls/universal/CMakeLists.txt
new file mode 100644
index 0000000000..0b3478a227
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/universal/CMakeLists.txt
@@ -0,0 +1,40 @@
+# Generated from universal.pro.
+
+#####################################################################
+## tst_universal Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_universal
+ GUI
+ QMLTEST
+ SOURCES
+ tst_universal.cpp
+ DEFINES
+ TST_CONTROLS_DATA=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../data\\\"
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::QuickControls2
+ Qt::QuickTemplates2
+ TESTDATA ${test_data}
+)
+
+# Make the QML files available to Creator's locator.
+target_sources(tst_universal
+ PRIVATE
+ ${test_data}
+)
+
+set_source_files_properties(${test_data}
+ PROPERTIES
+ HEADER_FILE_ONLY ON
+)
+
+#### Keys ignored in scope 1:.:.:universal.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/../data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/controls/universal/dependencies.qml b/tests/auto/quickcontrols2/controls/universal/dependencies.qml
new file mode 100644
index 0000000000..8ba71c8302
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/universal/dependencies.qml
@@ -0,0 +1,6 @@
+import QtTest
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Universal
+
+TestCase { }
diff --git a/tests/auto/quickcontrols2/controls/universal/dummy_imports.qml b/tests/auto/quickcontrols2/controls/universal/dummy_imports.qml
new file mode 100644
index 0000000000..580db56d12
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/universal/dummy_imports.qml
@@ -0,0 +1,12 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQml
+import QtQuick
+import QtQuick.NativeStyle
+import QtQuick.Layouts
+import Qt.labs.settings
+import Qt.labs.qmlmodels
+
+QtObject { }
diff --git a/tests/auto/quickcontrols2/controls/universal/tst_universal.cpp b/tests/auto/quickcontrols2/controls/universal/tst_universal.cpp
new file mode 100644
index 0000000000..db5b560e01
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/universal/tst_universal.cpp
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+int main(int argc, char *argv[])
+{
+ QTEST_SET_MAIN_SOURCE_PATH
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+ QQuickStyle::setStyle("Universal");
+ return quick_test_main(argc, argv, "tst_controls::Universal", TST_CONTROLS_DATA);
+}
diff --git a/tests/auto/quickcontrols2/controls/windows/BLACKLIST b/tests/auto/quickcontrols2/controls/windows/BLACKLIST
new file mode 100644
index 0000000000..476340700a
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/windows/BLACKLIST
@@ -0,0 +1,5 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+# QTBUG-70597
+[Tumbler::test_itemsCorrectlyPositioned]
+*
diff --git a/tests/auto/quickcontrols2/controls/windows/CMakeLists.txt b/tests/auto/quickcontrols2/controls/windows/CMakeLists.txt
new file mode 100644
index 0000000000..c448c55d25
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/windows/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../data/tst_*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_windows
+ GUI
+ QMLTEST
+ SOURCES
+ tst_windows.cpp
+ DEFINES
+ TST_CONTROLS_DATA=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../data\\\"
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::QuickControls2
+ TESTDATA ${test_data}
+)
+
+# Make the QML files available to Creator's locator.
+target_sources(tst_windows
+ PRIVATE
+ ${test_data}
+)
+
+set_source_files_properties(${test_data}
+ PROPERTIES
+ HEADER_FILE_ONLY ON
+)
diff --git a/tests/auto/quickcontrols2/controls/windows/dependencies.qml b/tests/auto/quickcontrols2/controls/windows/dependencies.qml
new file mode 100644
index 0000000000..f7d87422b5
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/windows/dependencies.qml
@@ -0,0 +1,5 @@
+import QtTest
+import QtQuick
+import QtQuick.Controls
+
+TestCase { }
diff --git a/tests/auto/quickcontrols2/controls/windows/tst_windows.cpp b/tests/auto/quickcontrols2/controls/windows/tst_windows.cpp
new file mode 100644
index 0000000000..b4a187bca7
--- /dev/null
+++ b/tests/auto/quickcontrols2/controls/windows/tst_windows.cpp
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+int main(int argc, char *argv[])
+{
+ QTEST_SET_MAIN_SOURCE_PATH
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+ QQuickStyle::setStyle("Windows");
+ return quick_test_main(argc, argv, "tst_controls::Windows", TST_CONTROLS_DATA);
+}
diff --git a/tests/auto/quickcontrols2/cursor/CMakeLists.txt b/tests/auto/quickcontrols2/cursor/CMakeLists.txt
new file mode 100644
index 0000000000..4a8296a0e4
--- /dev/null
+++ b/tests/auto/quickcontrols2/cursor/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from cursor.pro.
+
+#####################################################################
+## tst_cursor Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_cursor
+ SOURCES
+ tst_cursor.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:cursor.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_cursor CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_cursor CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/cursor/data/buttons.qml b/tests/auto/quickcontrols2/cursor/data/buttons.qml
new file mode 100644
index 0000000000..eb7e27cfa4
--- /dev/null
+++ b/tests/auto/quickcontrols2/cursor/data/buttons.qml
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+MouseArea {
+ width: column.width
+ height: column.height
+ cursorShape: Qt.ForbiddenCursor
+
+ Column {
+ id: column
+ padding: 10
+ spacing: 10
+
+ Button {
+ text: "Button"
+ }
+ CheckBox {
+ text: "CheckBox"
+ }
+ CheckDelegate {
+ text: "CheckDelegate"
+ }
+ ItemDelegate {
+ text: "ItemDelegate"
+ }
+ MenuItem {
+ text: "MenuItem"
+ }
+ RadioButton {
+ text: "RadioButton"
+ }
+ RadioDelegate {
+ text: "RadioDelegate"
+ }
+ RoundButton {
+ text: "X"
+ }
+ SwipeDelegate {
+ text: "SwipeDelegate"
+ }
+ Switch {
+ text: "Switch"
+ }
+ SwitchDelegate {
+ text: "SwitchDelegate"
+ }
+ TabButton {
+ text: "TabButton"
+ }
+ ToolButton {
+ text: "ToolButton"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/cursor/data/containers.qml b/tests/auto/quickcontrols2/cursor/data/containers.qml
new file mode 100644
index 0000000000..0e72297111
--- /dev/null
+++ b/tests/auto/quickcontrols2/cursor/data/containers.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+MouseArea {
+ width: column.width
+ height: column.height
+ cursorShape: Qt.ForbiddenCursor
+
+ Column {
+ id: column
+ padding: 10
+ spacing: 10
+
+ Page {
+ width: 200
+ height: 20
+ }
+ Pane {
+ width: 200
+ height: 20
+ }
+ ToolBar {
+ width: 200
+ height: 20
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/cursor/data/editable.qml b/tests/auto/quickcontrols2/cursor/data/editable.qml
new file mode 100644
index 0000000000..04bf4b7cb0
--- /dev/null
+++ b/tests/auto/quickcontrols2/cursor/data/editable.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+MouseArea {
+ width: column.width
+ height: column.height
+ cursorShape: Qt.ForbiddenCursor
+
+ Column {
+ id: column
+ padding: 10
+ spacing: 10
+
+ ComboBox {
+ editable: true
+ model: "ComboBox"
+ }
+ SpinBox {
+ editable: true
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/cursor/data/pageindicator.qml b/tests/auto/quickcontrols2/cursor/data/pageindicator.qml
new file mode 100644
index 0000000000..f71fbf7563
--- /dev/null
+++ b/tests/auto/quickcontrols2/cursor/data/pageindicator.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+MouseArea {
+ width: 200
+ height: 200
+ cursorShape: Qt.ForbiddenCursor
+
+ PageIndicator {
+ anchors.centerIn: parent
+ }
+}
diff --git a/tests/auto/quickcontrols2/cursor/data/scrollbar.qml b/tests/auto/quickcontrols2/cursor/data/scrollbar.qml
new file mode 100644
index 0000000000..997abd4b65
--- /dev/null
+++ b/tests/auto/quickcontrols2/cursor/data/scrollbar.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias textArea: textArea
+ property alias scrollBar: scrollBar
+
+ Flickable {
+ anchors.fill: parent
+ TextArea.flickable: TextArea {
+ id: textArea
+ }
+ ScrollBar.vertical: ScrollBar {
+ id: scrollBar
+ // Need to explicitly set this to account for platforms like Android,
+ // where the UiEffects style hint does not include HoverEffect, and
+ // hence QQuickControlPrivate::calcHoverEnabled() would otherwise return false.
+ hoverEnabled: true
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/cursor/data/sliders.qml b/tests/auto/quickcontrols2/cursor/data/sliders.qml
new file mode 100644
index 0000000000..687450ec05
--- /dev/null
+++ b/tests/auto/quickcontrols2/cursor/data/sliders.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+MouseArea {
+ width: column.width
+ height: column.height
+ cursorShape: Qt.ForbiddenCursor
+
+ Column {
+ id: column
+ padding: 10
+ spacing: 10
+
+ Dial {
+ }
+ Slider {
+ }
+ RangeSlider {
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/cursor/tst_cursor.cpp b/tests/auto/quickcontrols2/cursor/tst_cursor.cpp
new file mode 100644
index 0000000000..d9f7f4cc4f
--- /dev/null
+++ b/tests/auto/quickcontrols2/cursor/tst_cursor.cpp
@@ -0,0 +1,226 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+
+#include <QtQuick/qquickview.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickcontrol_p.h>
+#include <QtQuickTemplates2/private/qquickpageindicator_p.h>
+#include <QtQuickTemplates2/private/qquickscrollbar_p.h>
+#include <QtQuickTemplates2/private/qquicktextarea_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+#if QT_CONFIG(cursor)
+# include <QtGui/qscreen.h>
+# include <QtGui/qcursor.h>
+#endif
+
+using namespace QQuickControlsTestUtils;
+
+class tst_cursor : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_cursor();
+
+private slots:
+ void init();
+ void controls_data();
+ void controls();
+ void editable();
+ void pageIndicator();
+ void scrollBar();
+};
+
+tst_cursor::tst_cursor()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+ QQuickStyle::setStyle("Basic");
+}
+
+void tst_cursor::init()
+{
+#if QT_CONFIG(cursor)
+ // Ensure mouse cursor was not left by previous tests where widgets
+ // will appear, as it could cause events and interfere with the tests.
+ const QScreen *screen = QGuiApplication::primaryScreen();
+ const QRect availableGeometry = screen->availableGeometry();
+ QCursor::setPos(availableGeometry.topLeft());
+#endif
+}
+
+void tst_cursor::controls_data()
+{
+ QTest::addColumn<QString>("testFile");
+
+ QTest::newRow("buttons") << "buttons.qml";
+ QTest::newRow("containers") << "containers.qml";
+ QTest::newRow("sliders") << "sliders.qml";
+}
+
+void tst_cursor::controls()
+{
+ QFETCH(QString, testFile);
+
+ QQuickView view(testFileUrl(testFile));
+ view.show();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickItem *mouseArea = view.rootObject();
+ QVERIFY(mouseArea);
+ QCOMPARE(mouseArea->cursor().shape(), Qt::ForbiddenCursor);
+
+ QQuickItem *column = mouseArea->childItems().value(0);
+ QVERIFY(column);
+
+ const auto controls = column->childItems();
+ for (QQuickItem *control : controls) {
+ QCOMPARE(control->cursor().shape(), Qt::ArrowCursor);
+
+ QTest::mouseMove(&view, control->mapToScene(QPointF(-1, -1)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::ForbiddenCursor);
+
+ QTest::mouseMove(&view, control->mapToScene(QPointF(0, 0)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::ArrowCursor);
+
+ QTest::mouseMove(&view, control->mapToScene(QPointF(control->width() + 1, control->height() + 1)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::ForbiddenCursor);
+ }
+}
+
+void tst_cursor::editable()
+{
+ QQuickView view(testFileUrl("editable.qml"));
+ view.show();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickItem *mouseArea = view.rootObject();
+ QVERIFY(mouseArea);
+ QCOMPARE(mouseArea->cursor().shape(), Qt::ForbiddenCursor);
+
+ QQuickItem *column = mouseArea->childItems().value(0);
+ QVERIFY(column);
+
+ const auto children = column->childItems();
+ for (QQuickItem *child : children) {
+ QQuickControl *control = qobject_cast<QQuickControl *>(child);
+ QVERIFY(control);
+ QCOMPARE(control->cursor().shape(), Qt::ArrowCursor);
+ QCOMPARE(control->contentItem()->cursor().shape(), Qt::IBeamCursor);
+
+ QTest::mouseMove(&view, control->mapToScene(QPointF(-1, -1)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::ForbiddenCursor);
+
+ QTest::mouseMove(&view, control->mapToScene(QPointF(control->width() / 2, control->height() / 2)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::IBeamCursor);
+
+ control->setProperty("editable", false);
+ QCOMPARE(control->cursor().shape(), Qt::ArrowCursor);
+ QCOMPARE(control->contentItem()->cursor().shape(), Qt::ArrowCursor);
+ QCOMPARE(view.cursor().shape(), Qt::ArrowCursor);
+
+ QTest::mouseMove(&view, control->mapToScene(QPointF(control->width() + 1, control->height() + 1)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::ForbiddenCursor);
+ }
+}
+
+void tst_cursor::pageIndicator()
+{
+ QQuickView view(testFileUrl("pageindicator.qml"));
+ view.show();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickItem *mouseArea = view.rootObject();
+ QVERIFY(mouseArea);
+ QCOMPARE(mouseArea->cursor().shape(), Qt::ForbiddenCursor);
+
+ QQuickPageIndicator *indicator = qobject_cast<QQuickPageIndicator *>(mouseArea->childItems().value(0));
+ QVERIFY(indicator);
+
+ QTest::mouseMove(&view, indicator->mapToScene(QPointF(-1, -1)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::ForbiddenCursor);
+
+ QTest::mouseMove(&view, indicator->mapToScene(QPointF(0, 0)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::ForbiddenCursor);
+
+ indicator->setInteractive(true);
+ QCOMPARE(view.cursor().shape(), Qt::ArrowCursor);
+
+ QTest::mouseMove(&view, indicator->mapToScene(QPointF(indicator->width() + 1, indicator->height() + 1)).toPoint());
+ QCOMPARE(view.cursor().shape(), Qt::ForbiddenCursor);
+}
+
+// QTBUG-59629
+void tst_cursor::scrollBar()
+{
+ // Ensure that the mouse cursor has the correct shape when over a scrollbar
+ // which is itself over a text area with IBeamCursor.
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("scrollbar.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickScrollBar *scrollBar = helper.appWindow->property("scrollBar").value<QQuickScrollBar*>();
+ QVERIFY(scrollBar);
+
+ QQuickTextArea *textArea = helper.appWindow->property("textArea").value<QQuickTextArea*>();
+ QVERIFY(textArea);
+
+ textArea->setText(QString("\n").repeated(100));
+
+ const QPoint textAreaPos(window->width() / 2, window->height() / 2);
+ QTest::mouseMove(window, textAreaPos);
+ QCOMPARE(window->cursor().shape(), textArea->cursor().shape());
+ QCOMPARE(textArea->cursor().shape(), Qt::CursorShape::IBeamCursor);
+
+ const QPoint scrollBarPos(window->width() - scrollBar->width() / 2, window->height() / 2);
+ QTest::mouseMove(window, scrollBarPos);
+
+ QVERIFY(scrollBar->isActive());
+ QCOMPARE(window->cursor().shape(), scrollBar->cursor().shape());
+ QCOMPARE(scrollBar->cursor().shape(), Qt::CursorShape::ArrowCursor);
+
+ scrollBar->setInteractive(false);
+ QCOMPARE(window->cursor().shape(), textArea->cursor().shape());
+}
+
+QTEST_MAIN(tst_cursor)
+
+#include "tst_cursor.moc"
diff --git a/tests/auto/quickcontrols2/customization/CMakeLists.txt b/tests/auto/quickcontrols2/customization/CMakeLists.txt
new file mode 100644
index 0000000000..cf86185aca
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Generated from customization.pro.
+
+#####################################################################
+## tst_customization Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_customization
+ SOURCES
+ tst_customization.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_customization CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_customization CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/AbstractButton.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/AbstractButton.qml
new file mode 100644
index 0000000000..b30d4a5628
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/AbstractButton.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.AbstractButton {
+ id: control
+ objectName: "abstractbutton-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ApplicationWindow.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ApplicationWindow.qml
new file mode 100644
index 0000000000..6a1f1b098b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ApplicationWindow.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ApplicationWindow {
+ id: control
+ objectName: "applicationwindow-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/BusyIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/BusyIndicator.qml
new file mode 100644
index 0000000000..388de3af36
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/BusyIndicator.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.BusyIndicator {
+ id: control
+ objectName: "busyindicator-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Button.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Button.qml
new file mode 100644
index 0000000000..20426d2ede
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Button.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Button {
+ id: control
+ objectName: "button-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/CheckBox.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/CheckBox.qml
new file mode 100644
index 0000000000..3d8b5a8e09
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/CheckBox.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.CheckBox {
+ id: control
+ objectName: "checkbox-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/CheckDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/CheckDelegate.qml
new file mode 100644
index 0000000000..a0547ec418
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/CheckDelegate.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.CheckDelegate {
+ id: control
+ objectName: "checkdelegate-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ComboBox.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ComboBox.qml
new file mode 100644
index 0000000000..84cf6e35e4
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ComboBox.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ComboBox {
+ id: control
+ objectName: "combobox-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Container.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Container.qml
new file mode 100644
index 0000000000..7519d7bd18
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Container.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Container {
+ id: control
+ objectName: "container-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Control.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Control.qml
new file mode 100644
index 0000000000..55a456c764
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Control.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Control {
+ id: control
+ objectName: "control-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/DelayButton.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/DelayButton.qml
new file mode 100644
index 0000000000..ce34f25f28
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/DelayButton.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DelayButton {
+ id: control
+ objectName: "delaybutton-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Dial.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Dial.qml
new file mode 100644
index 0000000000..de83e56400
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Dial.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Dial {
+ id: control
+ objectName: "dial-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Dialog.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Dialog.qml
new file mode 100644
index 0000000000..8b056a8833
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Dialog.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Dialog {
+ id: control
+ objectName: "dialog-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/DialogButtonBox.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/DialogButtonBox.qml
new file mode 100644
index 0000000000..5ce5f504e1
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/DialogButtonBox.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DialogButtonBox {
+ id: control
+ objectName: "dialogbuttonbox-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Drawer.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Drawer.qml
new file mode 100644
index 0000000000..b4da57c000
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Drawer.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Drawer {
+ id: control
+ objectName: "drawer-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Frame.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Frame.qml
new file mode 100644
index 0000000000..00f4d79c7a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Frame.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Frame {
+ id: control
+ objectName: "frame-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/GroupBox.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/GroupBox.qml
new file mode 100644
index 0000000000..900770cdba
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/GroupBox.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.GroupBox {
+ id: control
+ objectName: "groupbox-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ItemDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ItemDelegate.qml
new file mode 100644
index 0000000000..19de468d8a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ItemDelegate.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ItemDelegate {
+ id: control
+ objectName: "itemdelegate-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Label.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Label.qml
new file mode 100644
index 0000000000..bfc4a83966
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Label.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Label {
+ id: control
+ objectName: "label-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Menu.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Menu.qml
new file mode 100644
index 0000000000..27b8a01431
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Menu.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Menu {
+ id: control
+ objectName: "menu-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/MenuBar.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/MenuBar.qml
new file mode 100644
index 0000000000..24f7c6edf4
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/MenuBar.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuBar {
+ id: control
+ objectName: "menubar-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/MenuBarItem.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/MenuBarItem.qml
new file mode 100644
index 0000000000..d66e899a49
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/MenuBarItem.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuBarItem {
+ id: control
+ objectName: "menubaritem-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/MenuItem.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/MenuItem.qml
new file mode 100644
index 0000000000..11f38a1b06
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/MenuItem.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuItem {
+ id: control
+ objectName: "menuitem-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/MenuSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/MenuSeparator.qml
new file mode 100644
index 0000000000..effd32c0ed
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/MenuSeparator.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuSeparator {
+ id: control
+ objectName: "menuseparator-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Page.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Page.qml
new file mode 100644
index 0000000000..353fb9cc65
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Page.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Page {
+ id: control
+ objectName: "page-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/PageIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/PageIndicator.qml
new file mode 100644
index 0000000000..98976ae255
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/PageIndicator.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.PageIndicator {
+ id: control
+ objectName: "pageindicator-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Pane.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Pane.qml
new file mode 100644
index 0000000000..2429e2c6c1
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Pane.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Pane {
+ id: control
+ objectName: "pane-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Popup.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Popup.qml
new file mode 100644
index 0000000000..fdcb49ac8f
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Popup.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Popup {
+ id: control
+ objectName: "popup-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ProgressBar.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ProgressBar.qml
new file mode 100644
index 0000000000..a2afa03bc4
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ProgressBar.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ProgressBar {
+ id: control
+ objectName: "progressbar-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/RadioButton.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/RadioButton.qml
new file mode 100644
index 0000000000..8776629230
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/RadioButton.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RadioButton {
+ id: control
+ objectName: "radiobutton-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/RadioDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/RadioDelegate.qml
new file mode 100644
index 0000000000..bbb711c7ed
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/RadioDelegate.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RadioDelegate {
+ id: control
+ objectName: "radiodelegate-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/RangeSlider.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/RangeSlider.qml
new file mode 100644
index 0000000000..0043b40775
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/RangeSlider.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RangeSlider {
+ id: control
+ objectName: "rangeslider-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/RoundButton.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/RoundButton.qml
new file mode 100644
index 0000000000..5b06801db8
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/RoundButton.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RoundButton {
+ id: control
+ objectName: "roundbutton-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollBar.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollBar.qml
new file mode 100644
index 0000000000..80a6782e34
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollBar.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollBar {
+ id: control
+ objectName: "scrollbar-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollIndicator.qml
new file mode 100644
index 0000000000..56c73cb8f4
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollIndicator.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollIndicator {
+ id: control
+ objectName: "scrollindicator-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollView.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollView.qml
new file mode 100644
index 0000000000..198936c2b5
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ScrollView.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+ objectName: "scrollview-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Slider.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Slider.qml
new file mode 100644
index 0000000000..6cfa3e919b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Slider.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Slider {
+ id: control
+ objectName: "slider-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/SpinBox.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/SpinBox.qml
new file mode 100644
index 0000000000..9e334ecf35
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/SpinBox.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SpinBox {
+ id: control
+ objectName: "spinbox-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/StackView.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/StackView.qml
new file mode 100644
index 0000000000..0a55abf812
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/StackView.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.StackView {
+ id: control
+ objectName: "stackview-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/SwipeDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/SwipeDelegate.qml
new file mode 100644
index 0000000000..d05f1e9c5c
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/SwipeDelegate.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeDelegate {
+ id: control
+ objectName: "swipedelegate-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/SwipeView.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/SwipeView.qml
new file mode 100644
index 0000000000..51b411aab9
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/SwipeView.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeView {
+ id: control
+ objectName: "swipeview-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Switch.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Switch.qml
new file mode 100644
index 0000000000..da00b0e872
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Switch.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Switch {
+ id: control
+ objectName: "switch-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/SwitchDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/SwitchDelegate.qml
new file mode 100644
index 0000000000..fe0a9f5222
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/SwitchDelegate.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwitchDelegate {
+ id: control
+ objectName: "switchdelegate-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/TabBar.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/TabBar.qml
new file mode 100644
index 0000000000..0f38b66077
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/TabBar.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabBar {
+ id: control
+ objectName: "tabbar-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/TabButton.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/TabButton.qml
new file mode 100644
index 0000000000..6ee896366b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/TabButton.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabButton {
+ id: control
+ objectName: "tabbutton-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/TextArea.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/TextArea.qml
new file mode 100644
index 0000000000..e2ee786690
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/TextArea.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TextArea {
+ id: control
+ objectName: "textarea-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/TextField.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/TextField.qml
new file mode 100644
index 0000000000..3fcf63d528
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/TextField.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TextField {
+ id: control
+ objectName: "textfield-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ToolBar.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ToolBar.qml
new file mode 100644
index 0000000000..6696336d8f
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ToolBar.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolBar {
+ id: control
+ objectName: "toolbar-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ToolButton.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ToolButton.qml
new file mode 100644
index 0000000000..8d4ef1b58a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ToolButton.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolButton {
+ id: control
+ objectName: "toolbutton-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ToolSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ToolSeparator.qml
new file mode 100644
index 0000000000..63985f7fdf
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ToolSeparator.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolSeparator {
+ id: control
+ objectName: "toolseparator-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/ToolTip.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/ToolTip.qml
new file mode 100644
index 0000000000..a1aff94132
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/ToolTip.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolTip {
+ id: control
+ objectName: "tooltip-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/Tumbler.qml b/tests/auto/quickcontrols2/customization/data/styles/empty/Tumbler.qml
new file mode 100644
index 0000000000..c8b3bfebb7
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/Tumbler.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Tumbler {
+ id: control
+ objectName: "tumbler-empty"
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/empty/qmldir b/tests/auto/quickcontrols2/customization/data/styles/empty/qmldir
new file mode 100644
index 0000000000..a5fcc4c7e5
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/empty/qmldir
@@ -0,0 +1,59 @@
+module empty
+
+AbstractButton 6.0 AbstractButton.qml
+Action 6.0 Action.qml
+ActionGroup 6.0 ActionGroup.qml
+ApplicationWindow 6.0 ApplicationWindow.qml
+BusyIndicator 6.0 BusyIndicator.qml
+Button 6.0 Button.qml
+ButtonGroup 6.0 ButtonGroup.qml
+CheckBox 6.0 CheckBox.qml
+CheckDelegate 6.0 CheckDelegate.qml
+ComboBox 6.0 ComboBox.qml
+Container 6.0 Container.qml
+Control 6.0 Control.qml
+DelayButton 6.0 DelayButton.qml
+Dial 6.0 Dial.qml
+Dialog 6.0 Dialog.qml
+DialogButtonBox 6.0 DialogButtonBox.qml
+Drawer 6.0 Drawer.qml
+Frame 6.0 Frame.qml
+GroupBox 6.0 GroupBox.qml
+HorizontalHeaderView 6.0 HorizontalHeaderView.qml
+ItemDelegate 6.0 ItemDelegate.qml
+Label 6.0 Label.qml
+Menu 6.0 Menu.qml
+MenuBar 6.0 MenuBar.qml
+MenuBarItem 6.0 MenuBarItem.qml
+MenuItem 6.0 MenuItem.qml
+MenuSeparator 6.0 MenuSeparator.qml
+Page 6.0 Page.qml
+PageIndicator 6.0 PageIndicator.qml
+Pane 6.0 Pane.qml
+Popup 6.0 Popup.qml
+ProgressBar 6.0 ProgressBar.qml
+RadioButton 6.0 RadioButton.qml
+RadioDelegate 6.0 RadioDelegate.qml
+RangeSlider 6.0 RangeSlider.qml
+RoundButton 6.0 RoundButton.qml
+ScrollBar 6.0 ScrollBar.qml
+ScrollIndicator 6.0 ScrollIndicator.qml
+ScrollView 6.0 ScrollView.qml
+Slider 6.0 Slider.qml
+SpinBox 6.0 SpinBox.qml
+SplitView 6.0 SplitView.qml
+StackView 6.0 StackView.qml
+SwipeDelegate 6.0 SwipeDelegate.qml
+SwipeView 6.0 SwipeView.qml
+Switch 6.0 Switch.qml
+SwitchDelegate 6.0 SwitchDelegate.qml
+TabBar 6.0 TabBar.qml
+TabButton 6.0 TabButton.qml
+TextArea 6.0 TextArea.qml
+TextField 6.0 TextField.qml
+ToolBar 6.0 ToolBar.qml
+ToolButton 6.0 ToolButton.qml
+ToolSeparator 6.0 ToolSeparator.qml
+ToolTip 6.0 ToolTip.qml
+Tumbler 6.0 Tumbler.qml
+VerticalHeaderView 6.0 VerticalHeaderView.qml
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/AbstractButton.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/AbstractButton.qml
new file mode 100644
index 0000000000..1c5bd31823
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/AbstractButton.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.AbstractButton {
+ id: control
+ objectName: "abstractbutton-identified"
+
+ indicator: Item {
+ id: indicator
+ objectName: "abstractbutton-indicator-identified"
+ Accessible.name: objectName
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "abstractbutton-contentItem-identified"
+ Accessible.name: objectName
+ }
+
+ background: Item {
+ id: background
+ objectName: "abstractbutton-background-identified"
+ Accessible.name: objectName
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ApplicationWindow.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ApplicationWindow.qml
new file mode 100644
index 0000000000..dc3f0db12c
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ApplicationWindow.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ApplicationWindow {
+ id: control
+ objectName: "applicationwindow-identified"
+
+ background: Item {
+ id: background
+ objectName: "applicationwindow-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/BusyIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/BusyIndicator.qml
new file mode 100644
index 0000000000..2deab67904
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/BusyIndicator.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.BusyIndicator {
+ id: control
+ objectName: "busyindicator-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "busyindicator-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "busyindicator-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Button.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Button.qml
new file mode 100644
index 0000000000..dc80508047
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Button.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Button {
+ id: control
+ objectName: "button-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "button-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "button-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/CheckBox.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/CheckBox.qml
new file mode 100644
index 0000000000..13f98af9b9
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/CheckBox.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.CheckBox {
+ id: control
+ objectName: "checkbox-identified"
+
+ indicator: Item {
+ id: indicator
+ objectName: "checkbox-indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "checkbox-contentItem-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/CheckDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/CheckDelegate.qml
new file mode 100644
index 0000000000..b0d8a8d2f7
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/CheckDelegate.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.CheckDelegate {
+ id: control
+ objectName: "checkdelegate-identified"
+
+ indicator: Item {
+ id: indicator
+ objectName: "checkdelegate-indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "checkdelegate-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "checkdelegate-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ComboBox.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ComboBox.qml
new file mode 100644
index 0000000000..ff117ce812
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ComboBox.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Templates as T
+
+T.ComboBox {
+ id: control
+ objectName: "combobox-identified"
+
+ indicator: Item {
+ id: indicator
+ objectName: "combobox-indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "combobox-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "combobox-background-identified"
+ }
+
+ popup: T.Popup {
+ id: popup
+ objectName: "combobox-popup-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Container.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Container.qml
new file mode 100644
index 0000000000..a282528d45
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Container.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Container {
+ id: control
+ objectName: "container-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "container-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "container-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Control.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Control.qml
new file mode 100644
index 0000000000..90229e4788
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Control.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Control {
+ id: control
+ objectName: "control-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "control-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "control-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/DelayButton.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/DelayButton.qml
new file mode 100644
index 0000000000..90f980eaec
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/DelayButton.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DelayButton {
+ id: control
+ objectName: "delaybutton-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "delaybutton-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "delaybutton-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Dial.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Dial.qml
new file mode 100644
index 0000000000..9260972c95
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Dial.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Dial {
+ id: control
+ objectName: "dial-identified"
+
+ handle: Item {
+ id: handle
+ objectName: "dial-handle-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "dial-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Dialog.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Dialog.qml
new file mode 100644
index 0000000000..6392be7d7b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Dialog.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Dialog {
+ id: control
+ objectName: "dialog-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "dialog-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "dialog-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/DialogButtonBox.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/DialogButtonBox.qml
new file mode 100644
index 0000000000..11c596a1b0
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/DialogButtonBox.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DialogButtonBox {
+ id: control
+ objectName: "dialogbuttonbox-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "dialogbuttonbox-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "dialogbuttonbox-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Drawer.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Drawer.qml
new file mode 100644
index 0000000000..6b340f2adb
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Drawer.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Drawer {
+ id: control
+ objectName: "drawer-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "drawer-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "drawer-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Frame.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Frame.qml
new file mode 100644
index 0000000000..830ac584d0
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Frame.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Frame {
+ id: control
+ objectName: "frame-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "frame-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "frame-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/GroupBox.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/GroupBox.qml
new file mode 100644
index 0000000000..fffd44e8f6
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/GroupBox.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.GroupBox {
+ id: control
+ objectName: "groupbox-identified"
+
+ label: Text {
+ id: label
+ objectName: "groupbox-label-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "groupbox-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "groupbox-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ItemDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ItemDelegate.qml
new file mode 100644
index 0000000000..b04d2f59e8
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ItemDelegate.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ItemDelegate {
+ id: control
+ objectName: "itemdelegate-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "itemdelegate-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "itemdelegate-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Label.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Label.qml
new file mode 100644
index 0000000000..95d1f19180
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Label.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Label {
+ id: control
+ objectName: "label-identified"
+
+ background: Item {
+ id: background
+ objectName: "label-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Menu.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Menu.qml
new file mode 100644
index 0000000000..662392546b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Menu.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Menu {
+ id: control
+ objectName: "menu-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "menu-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "menu-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/MenuBar.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/MenuBar.qml
new file mode 100644
index 0000000000..f815b73fac
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/MenuBar.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuBar {
+ id: control
+ objectName: "menubar-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "menubar-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "menubar-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/MenuBarItem.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/MenuBarItem.qml
new file mode 100644
index 0000000000..abf3be5db0
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/MenuBarItem.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuBarItem {
+ id: control
+ objectName: "menubaritem-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "menubaritem-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "menubaritem-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/MenuItem.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/MenuItem.qml
new file mode 100644
index 0000000000..3a174ecfa1
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/MenuItem.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuItem {
+ id: control
+ objectName: "menuitem-identified"
+
+ arrow: Item {
+ id: arrow
+ objectName: "menuitem-arrow-identified"
+ }
+
+ indicator: Item {
+ id: indicator
+ objectName: "menuitem-indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "menuitem-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "menuitem-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/MenuSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/MenuSeparator.qml
new file mode 100644
index 0000000000..7ecb176b8c
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/MenuSeparator.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuSeparator {
+ id: control
+ objectName: "menuseparator-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "menuseparator-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "menuseparator-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Page.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Page.qml
new file mode 100644
index 0000000000..b24162476f
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Page.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Page {
+ id: control
+ objectName: "page-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "page-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "page-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/PageIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/PageIndicator.qml
new file mode 100644
index 0000000000..2370a334bf
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/PageIndicator.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.PageIndicator {
+ id: control
+ objectName: "pageindicator-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "pageindicator-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "pageindicator-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Pane.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Pane.qml
new file mode 100644
index 0000000000..0dbf4b1c97
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Pane.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Pane {
+ id: control
+ objectName: "pane-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "pane-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "pane-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Popup.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Popup.qml
new file mode 100644
index 0000000000..b6381170c1
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Popup.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Popup {
+ id: control
+ objectName: "popup-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "popup-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "popup-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ProgressBar.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ProgressBar.qml
new file mode 100644
index 0000000000..dc7d7658ef
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ProgressBar.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ProgressBar {
+ id: control
+ objectName: "progressbar-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "progressbar-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "progressbar-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/RadioButton.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/RadioButton.qml
new file mode 100644
index 0000000000..2b4a0b626c
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/RadioButton.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RadioButton {
+ id: control
+ objectName: "radiobutton-identified"
+
+ indicator: Item {
+ id: indicator
+ objectName: "radiobutton-indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "radiobutton-contentItem-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/RadioDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/RadioDelegate.qml
new file mode 100644
index 0000000000..75cda63d60
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/RadioDelegate.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RadioDelegate {
+ id: control
+ objectName: "radiodelegate-identified"
+
+ indicator: Item {
+ id: indicator
+ objectName: "radiodelegate-indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "radiodelegate-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "radiodelegate-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/RangeSlider.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/RangeSlider.qml
new file mode 100644
index 0000000000..fab56fcdc9
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/RangeSlider.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RangeSlider {
+ id: control
+ objectName: "rangeslider-identified"
+
+ first.handle: Item {
+ id: firstHandle
+ objectName: "rangeslider-first.handle-identified"
+ }
+
+ second.handle: Item {
+ id: secondHandle
+ objectName: "rangeslider-second.handle-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "rangeslider-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/RoundButton.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/RoundButton.qml
new file mode 100644
index 0000000000..ec075db314
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/RoundButton.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RoundButton {
+ id: control
+ objectName: "roundbutton-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "roundbutton-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "roundbutton-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollBar.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollBar.qml
new file mode 100644
index 0000000000..418f290884
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollBar.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollBar {
+ id: control
+ objectName: "scrollbar-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "scrollbar-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "scrollbar-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollIndicator.qml
new file mode 100644
index 0000000000..b427b757d7
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollIndicator.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollIndicator {
+ id: control
+ objectName: "scrollindicator-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "scrollindicator-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "scrollindicator-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollView.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollView.qml
new file mode 100644
index 0000000000..7f4e2c4079
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ScrollView.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+ objectName: "scrollview-identified"
+
+ background: Item {
+ id: background
+ objectName: "scrollview-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Slider.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Slider.qml
new file mode 100644
index 0000000000..88c5b22fce
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Slider.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Slider {
+ id: control
+ objectName: "slider-identified"
+
+ handle: Item {
+ id: handle
+ objectName: "slider-handle-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "slider-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/SpinBox.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/SpinBox.qml
new file mode 100644
index 0000000000..0c058269a5
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/SpinBox.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SpinBox {
+ id: control
+ objectName: "spinbox-identified"
+
+ up.indicator: Item {
+ id: upIndicator
+ objectName: "spinbox-up.indicator-identified"
+ }
+
+ down.indicator: Item {
+ id: downIndicator
+ objectName: "spinbox-down.indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "spinbox-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "spinbox-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/StackView.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/StackView.qml
new file mode 100644
index 0000000000..1bc5bf50f0
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/StackView.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.StackView {
+ id: control
+ objectName: "stackview-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "stackview-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "stackview-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/SwipeDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/SwipeDelegate.qml
new file mode 100644
index 0000000000..dadb54a5ea
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/SwipeDelegate.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeDelegate {
+ id: control
+ objectName: "swipedelegate-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "swipedelegate-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "swipedelegate-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/SwipeView.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/SwipeView.qml
new file mode 100644
index 0000000000..aa256d9908
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/SwipeView.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeView {
+ id: control
+ objectName: "swipeview-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "swipeview-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "swipeview-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Switch.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Switch.qml
new file mode 100644
index 0000000000..be10b52006
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Switch.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Switch {
+ id: control
+ objectName: "switch-identified"
+
+ indicator: Item {
+ id: indicator
+ objectName: "switch-indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "switch-contentItem-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/SwitchDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/SwitchDelegate.qml
new file mode 100644
index 0000000000..7205c973ee
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/SwitchDelegate.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwitchDelegate {
+ id: control
+ objectName: "switchdelegate-identified"
+
+ indicator: Item {
+ id: indicator
+ objectName: "switchdelegate-indicator-identified"
+ }
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "switchdelegate-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "switchdelegate-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/TabBar.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/TabBar.qml
new file mode 100644
index 0000000000..5d360cb1cf
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/TabBar.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabBar {
+ id: control
+ objectName: "tabbar-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "tabbar-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "tabbar-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/TabButton.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/TabButton.qml
new file mode 100644
index 0000000000..bc065b222d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/TabButton.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabButton {
+ id: control
+ objectName: "tabbutton-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "tabbutton-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "tabbutton-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/TextArea.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/TextArea.qml
new file mode 100644
index 0000000000..5667124028
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/TextArea.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TextArea {
+ id: control
+ objectName: "textarea-identified"
+
+ background: Item {
+ id: background
+ objectName: "textarea-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/TextField.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/TextField.qml
new file mode 100644
index 0000000000..1fef7ab523
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/TextField.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TextField {
+ id: control
+ objectName: "textfield-identified"
+
+ background: Item {
+ id: background
+ objectName: "textfield-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ToolBar.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ToolBar.qml
new file mode 100644
index 0000000000..2061949cd2
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ToolBar.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolBar {
+ id: control
+ objectName: "toolbar-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "toolbar-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "toolbar-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ToolButton.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ToolButton.qml
new file mode 100644
index 0000000000..253391a8be
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ToolButton.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolButton {
+ id: control
+ objectName: "toolbutton-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "toolbutton-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "toolbutton-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ToolSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ToolSeparator.qml
new file mode 100644
index 0000000000..b8cf9daa1a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ToolSeparator.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolSeparator {
+ id: control
+ objectName: "toolseparator-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "toolseparator-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "toolseparator-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/ToolTip.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/ToolTip.qml
new file mode 100644
index 0000000000..1ef95c9936
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/ToolTip.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolTip {
+ id: control
+ objectName: "tooltip-identified"
+
+ contentItem: Item {
+ id: contentItem
+ objectName: "tooltip-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "tooltip-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/Tumbler.qml b/tests/auto/quickcontrols2/customization/data/styles/identified/Tumbler.qml
new file mode 100644
index 0000000000..3bfdafc428
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/Tumbler.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Tumbler {
+ id: control
+ objectName: "tumbler-identified"
+
+ contentItem: ListView {
+ id: contentItem
+ objectName: "tumbler-contentItem-identified"
+ }
+
+ background: Item {
+ id: background
+ objectName: "tumbler-background-identified"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/identified/qmldir b/tests/auto/quickcontrols2/customization/data/styles/identified/qmldir
new file mode 100644
index 0000000000..1ee2a92e11
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/identified/qmldir
@@ -0,0 +1,59 @@
+module identified
+
+AbstractButton 6.0 AbstractButton.qml
+Action 6.0 Action.qml
+ActionGroup 6.0 ActionGroup.qml
+ApplicationWindow 6.0 ApplicationWindow.qml
+BusyIndicator 6.0 BusyIndicator.qml
+Button 6.0 Button.qml
+ButtonGroup 6.0 ButtonGroup.qml
+CheckBox 6.0 CheckBox.qml
+CheckDelegate 6.0 CheckDelegate.qml
+ComboBox 6.0 ComboBox.qml
+Container 6.0 Container.qml
+Control 6.0 Control.qml
+DelayButton 6.0 DelayButton.qml
+Dial 6.0 Dial.qml
+Dialog 6.0 Dialog.qml
+DialogButtonBox 6.0 DialogButtonBox.qml
+Drawer 6.0 Drawer.qml
+Frame 6.0 Frame.qml
+GroupBox 6.0 GroupBox.qml
+HorizontalHeaderView 6.0 HorizontalHeaderView.qml
+ItemDelegate 6.0 ItemDelegate.qml
+Label 6.0 Label.qml
+Menu 6.0 Menu.qml
+MenuBar 6.0 MenuBar.qml
+MenuBarItem 6.0 MenuBarItem.qml
+MenuItem 6.0 MenuItem.qml
+MenuSeparator 6.0 MenuSeparator.qml
+Page 6.0 Page.qml
+PageIndicator 6.0 PageIndicator.qml
+Pane 6.0 Pane.qml
+Popup 6.0 Popup.qml
+ProgressBar 6.0 ProgressBar.qml
+RadioButton 6.0 RadioButton.qml
+RadioDelegate 6.0 RadioDelegate.qml
+RangeSlider 6.0 RangeSlider.qml
+RoundButton 6.0 RoundButton.qml
+ScrollBar 6.0 ScrollBar.qml
+ScrollIndicator 6.0 ScrollIndicator.qml
+ScrollView 6.0 ScrollView.qml
+Slider 6.0 Slider.qml
+SpinBox 6.0 SpinBox.qml
+SplitView 6.0 SplitView.qml
+StackView 6.0 StackView.qml
+SwipeDelegate 6.0 SwipeDelegate.qml
+SwipeView 6.0 SwipeView.qml
+Switch 6.0 Switch.qml
+SwitchDelegate 6.0 SwitchDelegate.qml
+TabBar 6.0 TabBar.qml
+TabButton 6.0 TabButton.qml
+TextArea 6.0 TextArea.qml
+TextField 6.0 TextField.qml
+ToolBar 6.0 ToolBar.qml
+ToolButton 6.0 ToolButton.qml
+ToolSeparator 6.0 ToolSeparator.qml
+ToolTip 6.0 ToolTip.qml
+Tumbler 6.0 Tumbler.qml
+VerticalHeaderView 6.0 VerticalHeaderView.qml
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/AbstractButton.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/AbstractButton.qml
new file mode 100644
index 0000000000..7e3710509b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/AbstractButton.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.AbstractButton {
+ id: control
+ objectName: "abstractbutton-incomplete"
+
+ indicator: Item {
+ objectName: "abstractbutton-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "abstractbutton-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "abstractbutton-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ApplicationWindow.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ApplicationWindow.qml
new file mode 100644
index 0000000000..8fbdd1a4b6
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ApplicationWindow.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ApplicationWindow {
+ id: control
+ objectName: "applicationwindow-incomplete"
+
+ background: Item {
+ objectName: "applicationwindow-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/BusyIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/BusyIndicator.qml
new file mode 100644
index 0000000000..b046163e2d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/BusyIndicator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.BusyIndicator {
+ id: control
+ objectName: "busyindicator-incomplete"
+
+ contentItem: Item {
+ objectName: "busyindicator-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "busyindicator-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Button.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Button.qml
new file mode 100644
index 0000000000..7daa248c07
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Button.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Button {
+ id: control
+ objectName: "button-incomplete"
+
+ contentItem: Item {
+ objectName: "button-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "button-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/CheckBox.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/CheckBox.qml
new file mode 100644
index 0000000000..50bfa058cc
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/CheckBox.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.CheckBox {
+ id: control
+ objectName: "checkbox-incomplete"
+
+ indicator: Item {
+ objectName: "checkbox-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "checkbox-contentItem-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/CheckDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/CheckDelegate.qml
new file mode 100644
index 0000000000..13c0e4729f
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/CheckDelegate.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.CheckDelegate {
+ id: control
+ objectName: "checkdelegate-incomplete"
+
+ indicator: Item {
+ objectName: "checkdelegate-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "checkdelegate-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "checkdelegate-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ComboBox.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ComboBox.qml
new file mode 100644
index 0000000000..b0ff62578b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ComboBox.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ComboBox {
+ id: control
+ objectName: "combobox-incomplete"
+
+ indicator: Item {
+ objectName: "combobox-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "combobox-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "combobox-background-incomplete"
+ }
+
+ popup: T.Popup {
+ objectName: "combobox-popup-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Container.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Container.qml
new file mode 100644
index 0000000000..0ad81beaa3
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Container.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Container {
+ id: control
+ objectName: "container-incomplete"
+
+ contentItem: Item {
+ objectName: "container-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "container-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Control.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Control.qml
new file mode 100644
index 0000000000..6f07f5da9c
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Control.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Control {
+ id: control
+ objectName: "control-incomplete"
+
+ contentItem: Item {
+ objectName: "control-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "control-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/DelayButton.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/DelayButton.qml
new file mode 100644
index 0000000000..b6ab635bfd
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/DelayButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DelayButton {
+ id: control
+ objectName: "delaybutton-incomplete"
+
+ contentItem: Item {
+ objectName: "delaybutton-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "delaybutton-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Dial.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Dial.qml
new file mode 100644
index 0000000000..66600c63c2
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Dial.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Dial {
+ id: control
+ objectName: "dial-incomplete"
+
+ handle: Item {
+ objectName: "dial-handle-incomplete"
+ }
+
+ background: Item {
+ objectName: "dial-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Dialog.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Dialog.qml
new file mode 100644
index 0000000000..d8ab999e2e
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Dialog.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Dialog {
+ id: control
+ objectName: "dialog-incomplete"
+
+ contentItem: Item {
+ objectName: "dialog-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "dialog-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/DialogButtonBox.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/DialogButtonBox.qml
new file mode 100644
index 0000000000..d7f954befe
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/DialogButtonBox.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DialogButtonBox {
+ id: control
+ objectName: "dialogbuttonbox-incomplete"
+
+ contentItem: Item {
+ objectName: "dialogbuttonbox-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "dialogbuttonbox-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Drawer.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Drawer.qml
new file mode 100644
index 0000000000..5dadbd7793
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Drawer.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Drawer {
+ id: control
+ objectName: "drawer-incomplete"
+
+ contentItem: Item {
+ objectName: "drawer-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "drawer-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Frame.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Frame.qml
new file mode 100644
index 0000000000..e447b5c2df
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Frame.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Frame {
+ id: control
+ objectName: "frame-incomplete"
+
+ contentItem: Item {
+ objectName: "frame-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "frame-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/GroupBox.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/GroupBox.qml
new file mode 100644
index 0000000000..3597f1587d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/GroupBox.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.GroupBox {
+ id: control
+ objectName: "groupbox-incomplete"
+
+ label: Text {
+ objectName: "groupbox-label-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "groupbox-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "groupbox-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ItemDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ItemDelegate.qml
new file mode 100644
index 0000000000..79334dcbd8
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ItemDelegate.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ItemDelegate {
+ id: control
+ objectName: "itemdelegate-incomplete"
+
+ contentItem: Item {
+ objectName: "itemdelegate-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "itemdelegate-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Label.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Label.qml
new file mode 100644
index 0000000000..e60ea00c4d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Label.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Label {
+ id: control
+ objectName: "label-incomplete"
+
+ background: Item {
+ objectName: "label-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Menu.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Menu.qml
new file mode 100644
index 0000000000..220d0038b9
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Menu.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Menu {
+ id: control
+ objectName: "menu-incomplete"
+
+ contentItem: Item {
+ objectName: "menu-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "menu-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuBar.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuBar.qml
new file mode 100644
index 0000000000..b782eb4d09
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuBar {
+ id: control
+ objectName: "menubar-incomplete"
+
+ contentItem: Item {
+ objectName: "menubar-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "menubar-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuBarItem.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuBarItem.qml
new file mode 100644
index 0000000000..a979ecb7fa
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuBarItem.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuBarItem {
+ id: control
+ objectName: "menubaritem-incomplete"
+
+ contentItem: Item {
+ objectName: "menubaritem-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "menubaritem-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuItem.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuItem.qml
new file mode 100644
index 0000000000..b14f9089a6
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuItem.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuItem {
+ id: control
+ objectName: "menuitem-incomplete"
+
+ arrow: Item {
+ objectName: "menuitem-arrow-incomplete"
+ }
+
+ indicator: Item {
+ objectName: "menuitem-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "menuitem-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "menuitem-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuSeparator.qml
new file mode 100644
index 0000000000..ba6d27ecea
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/MenuSeparator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuSeparator {
+ id: control
+ objectName: "menuseparator-incomplete"
+
+ contentItem: Item {
+ objectName: "menuseparator-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "menuseparator-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Page.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Page.qml
new file mode 100644
index 0000000000..dbd29521ac
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Page.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Page {
+ id: control
+ objectName: "page-incomplete"
+
+ contentItem: Item {
+ objectName: "page-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "page-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/PageIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/PageIndicator.qml
new file mode 100644
index 0000000000..b18363407d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/PageIndicator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.PageIndicator {
+ id: control
+ objectName: "pageindicator-incomplete"
+
+ contentItem: Item {
+ objectName: "pageindicator-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "pageindicator-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Pane.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Pane.qml
new file mode 100644
index 0000000000..ecd7cbdf21
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Pane.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Pane {
+ id: control
+ objectName: "pane-incomplete"
+
+ contentItem: Item {
+ objectName: "pane-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "pane-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Popup.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Popup.qml
new file mode 100644
index 0000000000..a3d7d8d5dc
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Popup.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Popup {
+ id: control
+ objectName: "popup-incomplete"
+
+ contentItem: Item {
+ objectName: "popup-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "popup-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ProgressBar.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ProgressBar.qml
new file mode 100644
index 0000000000..293fe25481
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ProgressBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ProgressBar {
+ id: control
+ objectName: "progressbar-incomplete"
+
+ contentItem: Item {
+ objectName: "progressbar-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "progressbar-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/RadioButton.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/RadioButton.qml
new file mode 100644
index 0000000000..f17729f791
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/RadioButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RadioButton {
+ id: control
+ objectName: "radiobutton-incomplete"
+
+ indicator: Item {
+ objectName: "radiobutton-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "radiobutton-contentItem-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/RadioDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/RadioDelegate.qml
new file mode 100644
index 0000000000..8dd08aea84
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/RadioDelegate.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RadioDelegate {
+ id: control
+ objectName: "radiodelegate-incomplete"
+
+ indicator: Item {
+ objectName: "radiodelegate-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "radiodelegate-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "radiodelegate-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/RangeSlider.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/RangeSlider.qml
new file mode 100644
index 0000000000..3a6ba580df
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/RangeSlider.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RangeSlider {
+ id: control
+ objectName: "rangeslider-incomplete"
+
+ first.handle: Item {
+ objectName: "rangeslider-first.handle-incomplete"
+ }
+
+ second.handle: Item {
+ objectName: "rangeslider-second.handle-incomplete"
+ }
+
+ background: Item {
+ objectName: "rangeslider-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/RoundButton.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/RoundButton.qml
new file mode 100644
index 0000000000..d51ef732f3
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/RoundButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RoundButton {
+ id: control
+ objectName: "roundbutton-incomplete"
+
+ contentItem: Item {
+ objectName: "roundbutton-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "roundbutton-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollBar.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollBar.qml
new file mode 100644
index 0000000000..906a9847f8
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollBar {
+ id: control
+ objectName: "scrollbar-incomplete"
+
+ contentItem: Item {
+ objectName: "scrollbar-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "scrollbar-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollIndicator.qml
new file mode 100644
index 0000000000..b34d40970d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollIndicator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollIndicator {
+ id: control
+ objectName: "scrollindicator-incomplete"
+
+ contentItem: Item {
+ objectName: "scrollindicator-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "scrollindicator-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollView.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollView.qml
new file mode 100644
index 0000000000..a120e05f97
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ScrollView.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+ objectName: "scrollview-incomplete"
+
+ background: Item {
+ objectName: "scrollview-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Slider.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Slider.qml
new file mode 100644
index 0000000000..02b06d92e4
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Slider.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Slider {
+ id: control
+ objectName: "slider-incomplete"
+
+ handle: Item {
+ objectName: "slider-handle-incomplete"
+ }
+
+ background: Item {
+ objectName: "slider-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/SpinBox.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/SpinBox.qml
new file mode 100644
index 0000000000..9ec62e016e
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/SpinBox.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SpinBox {
+ id: control
+ objectName: "spinbox-incomplete"
+
+ up.indicator: Item {
+ objectName: "spinbox-up.indicator-incomplete"
+ }
+
+ down.indicator: Item {
+ objectName: "spinbox-down.indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "spinbox-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "spinbox-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/StackView.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/StackView.qml
new file mode 100644
index 0000000000..4108e16678
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/StackView.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.StackView {
+ id: control
+ objectName: "stackview-incomplete"
+
+ contentItem: Item {
+ objectName: "stackview-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "stackview-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwipeDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwipeDelegate.qml
new file mode 100644
index 0000000000..0da62d0fd9
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwipeDelegate.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeDelegate {
+ id: control
+ objectName: "swipedelegate-incomplete"
+
+ contentItem: Item {
+ objectName: "swipedelegate-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "swipedelegate-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwipeView.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwipeView.qml
new file mode 100644
index 0000000000..434f900361
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwipeView.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeView {
+ id: control
+ objectName: "swipeview-incomplete"
+
+ contentItem: Item {
+ objectName: "swipeview-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "swipeview-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Switch.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Switch.qml
new file mode 100644
index 0000000000..9f24763fa6
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Switch.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Switch {
+ id: control
+ objectName: "switch-incomplete"
+
+ indicator: Item {
+ objectName: "switch-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "switch-contentItem-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwitchDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwitchDelegate.qml
new file mode 100644
index 0000000000..a33809c7df
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/SwitchDelegate.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwitchDelegate {
+ id: control
+ objectName: "switchdelegate-incomplete"
+
+ indicator: Item {
+ objectName: "switchdelegate-indicator-incomplete"
+ }
+
+ contentItem: Item {
+ objectName: "switchdelegate-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "switchdelegate-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/TabBar.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/TabBar.qml
new file mode 100644
index 0000000000..68e4f62700
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/TabBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabBar {
+ id: control
+ objectName: "tabbar-incomplete"
+
+ contentItem: Item {
+ objectName: "tabbar-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "tabbar-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/TabButton.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/TabButton.qml
new file mode 100644
index 0000000000..9ab619a934
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/TabButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabButton {
+ id: control
+ objectName: "tabbutton-incomplete"
+
+ contentItem: Item {
+ objectName: "tabbutton-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "tabbutton-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/TextArea.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/TextArea.qml
new file mode 100644
index 0000000000..42f3d2fdeb
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/TextArea.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TextArea {
+ id: control
+ objectName: "textarea-incomplete"
+
+ background: Item {
+ objectName: "textarea-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/TextField.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/TextField.qml
new file mode 100644
index 0000000000..001d86b1c5
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/TextField.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TextField {
+ id: control
+ objectName: "textfield-incomplete"
+
+ background: Item {
+ objectName: "textfield-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolBar.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolBar.qml
new file mode 100644
index 0000000000..de0bdb392d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolBar {
+ id: control
+ objectName: "toolbar-incomplete"
+
+ contentItem: Item {
+ objectName: "toolbar-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "toolbar-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolButton.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolButton.qml
new file mode 100644
index 0000000000..12b55b15a2
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolButton {
+ id: control
+ objectName: "toolbutton-incomplete"
+
+ contentItem: Item {
+ objectName: "toolbutton-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "toolbutton-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolSeparator.qml
new file mode 100644
index 0000000000..aa413dd093
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolSeparator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolSeparator {
+ id: control
+ objectName: "toolseparator-incomplete"
+
+ contentItem: Item {
+ objectName: "toolseparator-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "toolseparator-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolTip.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolTip.qml
new file mode 100644
index 0000000000..d2104f9eeb
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/ToolTip.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolTip {
+ id: control
+ objectName: "tooltip-incomplete"
+
+ contentItem: Item {
+ objectName: "tooltip-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "tooltip-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/Tumbler.qml b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Tumbler.qml
new file mode 100644
index 0000000000..996af0d2cd
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/Tumbler.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Tumbler {
+ id: control
+ objectName: "tumbler-incomplete"
+
+ contentItem: ListView {
+ objectName: "tumbler-contentItem-incomplete"
+ }
+
+ background: Item {
+ objectName: "tumbler-background-incomplete"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/incomplete/qmldir b/tests/auto/quickcontrols2/customization/data/styles/incomplete/qmldir
new file mode 100644
index 0000000000..e8813bd518
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/incomplete/qmldir
@@ -0,0 +1,59 @@
+module incomplete
+
+AbstractButton 6.0 AbstractButton.qml
+Action 6.0 Action.qml
+ActionGroup 6.0 ActionGroup.qml
+ApplicationWindow 6.0 ApplicationWindow.qml
+BusyIndicator 6.0 BusyIndicator.qml
+Button 6.0 Button.qml
+ButtonGroup 6.0 ButtonGroup.qml
+CheckBox 6.0 CheckBox.qml
+CheckDelegate 6.0 CheckDelegate.qml
+ComboBox 6.0 ComboBox.qml
+Container 6.0 Container.qml
+Control 6.0 Control.qml
+DelayButton 6.0 DelayButton.qml
+Dial 6.0 Dial.qml
+Dialog 6.0 Dialog.qml
+DialogButtonBox 6.0 DialogButtonBox.qml
+Drawer 6.0 Drawer.qml
+Frame 6.0 Frame.qml
+GroupBox 6.0 GroupBox.qml
+HorizontalHeaderView 6.0 HorizontalHeaderView.qml
+ItemDelegate 6.0 ItemDelegate.qml
+Label 6.0 Label.qml
+Menu 6.0 Menu.qml
+MenuBar 6.0 MenuBar.qml
+MenuBarItem 6.0 MenuBarItem.qml
+MenuItem 6.0 MenuItem.qml
+MenuSeparator 6.0 MenuSeparator.qml
+Page 6.0 Page.qml
+PageIndicator 6.0 PageIndicator.qml
+Pane 6.0 Pane.qml
+Popup 6.0 Popup.qml
+ProgressBar 6.0 ProgressBar.qml
+RadioButton 6.0 RadioButton.qml
+RadioDelegate 6.0 RadioDelegate.qml
+RangeSlider 6.0 RangeSlider.qml
+RoundButton 6.0 RoundButton.qml
+ScrollBar 6.0 ScrollBar.qml
+ScrollIndicator 6.0 ScrollIndicator.qml
+ScrollView 6.0 ScrollView.qml
+Slider 6.0 Slider.qml
+SpinBox 6.0 SpinBox.qml
+SplitView 6.0 SplitView.qml
+StackView 6.0 StackView.qml
+SwipeDelegate 6.0 SwipeDelegate.qml
+SwipeView 6.0 SwipeView.qml
+Switch 6.0 Switch.qml
+SwitchDelegate 6.0 SwitchDelegate.qml
+TabBar 6.0 TabBar.qml
+TabButton 6.0 TabButton.qml
+TextArea 6.0 TextArea.qml
+TextField 6.0 TextField.qml
+ToolBar 6.0 ToolBar.qml
+ToolButton 6.0 ToolButton.qml
+ToolSeparator 6.0 ToolSeparator.qml
+ToolTip 6.0 ToolTip.qml
+Tumbler 6.0 Tumbler.qml
+VerticalHeaderView 6.0 VerticalHeaderView.qml
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/AbstractButton.qml b/tests/auto/quickcontrols2/customization/data/styles/override/AbstractButton.qml
new file mode 100644
index 0000000000..e8bf0b90f5
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/AbstractButton.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.AbstractButton {
+ id: control
+ objectName: "abstractbutton-override"
+
+ indicator: Item {
+ objectName: "abstractbutton-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "abstractbutton-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "abstractbutton-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ApplicationWindow.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ApplicationWindow.qml
new file mode 100644
index 0000000000..43b94010e6
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ApplicationWindow.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ApplicationWindow {
+ id: control
+ objectName: "applicationwindow-override"
+
+ background: Item {
+ objectName: "applicationwindow-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/BusyIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/override/BusyIndicator.qml
new file mode 100644
index 0000000000..12418ff720
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/BusyIndicator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.BusyIndicator {
+ id: control
+ objectName: "busyindicator-override"
+
+ contentItem: Item {
+ objectName: "busyindicator-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "busyindicator-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Button.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Button.qml
new file mode 100644
index 0000000000..692c2fda2e
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Button.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Button {
+ id: control
+ objectName: "button-override"
+
+ contentItem: Item {
+ objectName: "button-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "button-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/CheckBox.qml b/tests/auto/quickcontrols2/customization/data/styles/override/CheckBox.qml
new file mode 100644
index 0000000000..9830931b16
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/CheckBox.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.CheckBox {
+ id: control
+ objectName: "checkbox-override"
+
+ indicator: Item {
+ objectName: "checkbox-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "checkbox-contentItem-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/CheckDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/override/CheckDelegate.qml
new file mode 100644
index 0000000000..77cdf23d28
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/CheckDelegate.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.CheckDelegate {
+ id: control
+ objectName: "checkdelegate-override"
+
+ indicator: Item {
+ objectName: "checkdelegate-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "checkdelegate-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "checkdelegate-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ComboBox.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ComboBox.qml
new file mode 100644
index 0000000000..c3276dccdf
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ComboBox.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+import "../simple" as Simple
+
+Simple.ComboBox {
+ id: control
+ objectName: "combobox-override"
+
+ indicator: Item {
+ objectName: "combobox-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "combobox-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "combobox-background-override"
+ }
+
+ popup: T.Popup {
+ objectName: "combobox-popup-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Container.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Container.qml
new file mode 100644
index 0000000000..b732aefa7a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Container.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Container {
+ id: control
+ objectName: "container-override"
+
+ contentItem: Item {
+ objectName: "container-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "container-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Control.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Control.qml
new file mode 100644
index 0000000000..b4fefcf57b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Control.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Control {
+ id: control
+ objectName: "control-override"
+
+ contentItem: Item {
+ objectName: "control-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "control-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/DelayButton.qml b/tests/auto/quickcontrols2/customization/data/styles/override/DelayButton.qml
new file mode 100644
index 0000000000..5ee03d57eb
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/DelayButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.DelayButton {
+ id: control
+ objectName: "delaybutton-override"
+
+ contentItem: Item {
+ objectName: "delaybutton-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "delaybutton-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Dial.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Dial.qml
new file mode 100644
index 0000000000..d452a58f31
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Dial.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Dial {
+ id: control
+ objectName: "dial-override"
+
+ handle: Item {
+ objectName: "dial-handle-override"
+ }
+
+ background: Item {
+ objectName: "dial-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Dialog.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Dialog.qml
new file mode 100644
index 0000000000..29e3d26d33
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Dialog.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Dialog {
+ id: control
+ objectName: "dialog-override"
+
+ contentItem: Item {
+ objectName: "dialog-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "dialog-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/DialogButtonBox.qml b/tests/auto/quickcontrols2/customization/data/styles/override/DialogButtonBox.qml
new file mode 100644
index 0000000000..c79b9f815b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/DialogButtonBox.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.DialogButtonBox {
+ id: control
+ objectName: "dialogbuttonbox-override"
+
+ contentItem: Item {
+ objectName: "dialogbuttonbox-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "dialogbuttonbox-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Drawer.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Drawer.qml
new file mode 100644
index 0000000000..65aa625c00
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Drawer.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Drawer {
+ id: control
+ objectName: "drawer-override"
+
+ contentItem: Item {
+ objectName: "drawer-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "drawer-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Frame.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Frame.qml
new file mode 100644
index 0000000000..b31b70aa95
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Frame.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Frame {
+ id: control
+ objectName: "frame-override"
+
+ contentItem: Item {
+ objectName: "frame-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "frame-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/GroupBox.qml b/tests/auto/quickcontrols2/customization/data/styles/override/GroupBox.qml
new file mode 100644
index 0000000000..0d0bfbd9aa
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/GroupBox.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.GroupBox {
+ id: control
+ objectName: "groupbox-override"
+
+ label: Text {
+ objectName: "groupbox-label-override"
+ }
+
+ contentItem: Item {
+ objectName: "groupbox-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "groupbox-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ItemDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ItemDelegate.qml
new file mode 100644
index 0000000000..4a087c75aa
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ItemDelegate.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ItemDelegate {
+ id: control
+ objectName: "itemdelegate-override"
+
+ contentItem: Item {
+ objectName: "itemdelegate-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "itemdelegate-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Label.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Label.qml
new file mode 100644
index 0000000000..883cff743d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Label.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Label {
+ id: control
+ objectName: "label-override"
+
+ background: Item {
+ objectName: "label-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Menu.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Menu.qml
new file mode 100644
index 0000000000..f551fae8fe
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Menu.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Menu {
+ id: control
+ objectName: "menu-override"
+
+ contentItem: Item {
+ objectName: "menu-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "menu-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/MenuBar.qml b/tests/auto/quickcontrols2/customization/data/styles/override/MenuBar.qml
new file mode 100644
index 0000000000..b7f54cfbac
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/MenuBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.MenuBar {
+ id: control
+ objectName: "menubar-override"
+
+ contentItem: Item {
+ objectName: "menubar-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "menubar-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/MenuBarItem.qml b/tests/auto/quickcontrols2/customization/data/styles/override/MenuBarItem.qml
new file mode 100644
index 0000000000..513b59ce87
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/MenuBarItem.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.MenuBarItem {
+ id: control
+ objectName: "menubaritem-override"
+
+ contentItem: Item {
+ objectName: "menubaritem-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "menubaritem-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/MenuItem.qml b/tests/auto/quickcontrols2/customization/data/styles/override/MenuItem.qml
new file mode 100644
index 0000000000..7f7f569a0e
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/MenuItem.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.MenuItem {
+ id: control
+ objectName: "menuitem-override"
+
+ arrow: Item {
+ objectName: "menuitem-arrow-override"
+ }
+
+ indicator: Item {
+ objectName: "menuitem-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "menuitem-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "menuitem-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/MenuSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/override/MenuSeparator.qml
new file mode 100644
index 0000000000..57a2db1517
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/MenuSeparator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.MenuSeparator {
+ id: control
+ objectName: "menuseparator-override"
+
+ contentItem: Item {
+ objectName: "menuseparator-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "menuseparator-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Page.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Page.qml
new file mode 100644
index 0000000000..c51d1e7313
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Page.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Page {
+ id: control
+ objectName: "page-override"
+
+ contentItem: Item {
+ objectName: "page-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "page-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/PageIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/override/PageIndicator.qml
new file mode 100644
index 0000000000..3d58299e1b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/PageIndicator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.PageIndicator {
+ id: control
+ objectName: "pageindicator-override"
+
+ contentItem: Item {
+ objectName: "pageindicator-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "pageindicator-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Pane.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Pane.qml
new file mode 100644
index 0000000000..70a2944179
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Pane.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Pane {
+ id: control
+ objectName: "pane-override"
+
+ contentItem: Item {
+ objectName: "pane-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "pane-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Popup.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Popup.qml
new file mode 100644
index 0000000000..a63879bd26
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Popup.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Popup {
+ id: control
+ objectName: "popup-override"
+
+ contentItem: Item {
+ objectName: "popup-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "popup-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ProgressBar.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ProgressBar.qml
new file mode 100644
index 0000000000..2a9e636ada
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ProgressBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ProgressBar {
+ id: control
+ objectName: "progressbar-override"
+
+ contentItem: Item {
+ objectName: "progressbar-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "progressbar-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/RadioButton.qml b/tests/auto/quickcontrols2/customization/data/styles/override/RadioButton.qml
new file mode 100644
index 0000000000..5bd5c721d0
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/RadioButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.RadioButton {
+ id: control
+ objectName: "radiobutton-override"
+
+ indicator: Item {
+ objectName: "radiobutton-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "radiobutton-contentItem-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/RadioDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/override/RadioDelegate.qml
new file mode 100644
index 0000000000..7fbe3833f1
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/RadioDelegate.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.RadioDelegate {
+ id: control
+ objectName: "radiodelegate-override"
+
+ indicator: Item {
+ objectName: "radiodelegate-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "radiodelegate-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "radiodelegate-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/RangeSlider.qml b/tests/auto/quickcontrols2/customization/data/styles/override/RangeSlider.qml
new file mode 100644
index 0000000000..0f4cda9999
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/RangeSlider.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.RangeSlider {
+ id: control
+ objectName: "rangeslider-override"
+
+ first.handle: Item {
+ objectName: "rangeslider-first.handle-override"
+ }
+
+ second.handle: Item {
+ objectName: "rangeslider-second.handle-override"
+ }
+
+ background: Item {
+ objectName: "rangeslider-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/RoundButton.qml b/tests/auto/quickcontrols2/customization/data/styles/override/RoundButton.qml
new file mode 100644
index 0000000000..1a0b0e05e8
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/RoundButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.RoundButton {
+ id: control
+ objectName: "roundbutton-override"
+
+ contentItem: Item {
+ objectName: "roundbutton-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "roundbutton-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ScrollBar.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ScrollBar.qml
new file mode 100644
index 0000000000..fc551710e2
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ScrollBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ScrollBar {
+ id: control
+ objectName: "scrollbar-override"
+
+ contentItem: Item {
+ objectName: "scrollbar-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "scrollbar-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ScrollIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ScrollIndicator.qml
new file mode 100644
index 0000000000..06497abb6e
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ScrollIndicator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ScrollIndicator {
+ id: control
+ objectName: "scrollindicator-override"
+
+ contentItem: Item {
+ objectName: "scrollindicator-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "scrollindicator-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ScrollView.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ScrollView.qml
new file mode 100644
index 0000000000..bc02c26583
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ScrollView.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ScrollView {
+ id: control
+ objectName: "scrollview-override"
+
+ background: Item {
+ objectName: "scrollview-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Slider.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Slider.qml
new file mode 100644
index 0000000000..052c523be3
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Slider.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Slider {
+ id: control
+ objectName: "slider-override"
+
+ handle: Item {
+ objectName: "slider-handle-override"
+ }
+
+ background: Item {
+ objectName: "slider-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/SpinBox.qml b/tests/auto/quickcontrols2/customization/data/styles/override/SpinBox.qml
new file mode 100644
index 0000000000..d074ec6372
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/SpinBox.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.SpinBox {
+ id: control
+ objectName: "spinbox-override"
+
+ up.indicator: Item {
+ objectName: "spinbox-up.indicator-override"
+ }
+
+ down.indicator: Item {
+ objectName: "spinbox-down.indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "spinbox-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "spinbox-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/StackView.qml b/tests/auto/quickcontrols2/customization/data/styles/override/StackView.qml
new file mode 100644
index 0000000000..bc33d64bae
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/StackView.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.StackView {
+ id: control
+ objectName: "stackview-override"
+
+ contentItem: Item {
+ objectName: "stackview-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "stackview-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/SwipeDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/override/SwipeDelegate.qml
new file mode 100644
index 0000000000..bb38737036
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/SwipeDelegate.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.SwipeDelegate {
+ id: control
+ objectName: "swipedelegate-override"
+
+ contentItem: Item {
+ objectName: "swipedelegate-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "swipedelegate-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/SwipeView.qml b/tests/auto/quickcontrols2/customization/data/styles/override/SwipeView.qml
new file mode 100644
index 0000000000..63646a0bbf
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/SwipeView.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.SwipeView {
+ id: control
+ objectName: "swipeview-override"
+
+ contentItem: Item {
+ objectName: "swipeview-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "swipeview-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Switch.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Switch.qml
new file mode 100644
index 0000000000..57a3f8049f
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Switch.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Switch {
+ id: control
+ objectName: "switch-override"
+
+ indicator: Item {
+ objectName: "switch-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "switch-contentItem-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/SwitchDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/override/SwitchDelegate.qml
new file mode 100644
index 0000000000..6b9986d8f6
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/SwitchDelegate.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.SwitchDelegate {
+ id: control
+ objectName: "switchdelegate-override"
+
+ indicator: Item {
+ objectName: "switchdelegate-indicator-override"
+ }
+
+ contentItem: Item {
+ objectName: "switchdelegate-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "switchdelegate-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/TabBar.qml b/tests/auto/quickcontrols2/customization/data/styles/override/TabBar.qml
new file mode 100644
index 0000000000..b3e03bddad
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/TabBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.TabBar {
+ id: control
+ objectName: "tabbar-override"
+
+ contentItem: Item {
+ objectName: "tabbar-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "tabbar-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/TabButton.qml b/tests/auto/quickcontrols2/customization/data/styles/override/TabButton.qml
new file mode 100644
index 0000000000..f2852f684f
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/TabButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.TabButton {
+ id: control
+ objectName: "tabbutton-override"
+
+ contentItem: Item {
+ objectName: "tabbutton-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "tabbutton-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/TextArea.qml b/tests/auto/quickcontrols2/customization/data/styles/override/TextArea.qml
new file mode 100644
index 0000000000..ad4a3c7b11
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/TextArea.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.TextArea {
+ id: control
+ objectName: "textarea-override"
+
+ background: Item {
+ objectName: "textarea-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/TextField.qml b/tests/auto/quickcontrols2/customization/data/styles/override/TextField.qml
new file mode 100644
index 0000000000..39bb695e34
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/TextField.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.TextField {
+ id: control
+ objectName: "textfield-override"
+
+ background: Item {
+ objectName: "textfield-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ToolBar.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ToolBar.qml
new file mode 100644
index 0000000000..8af7238ee3
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ToolBar.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ToolBar {
+ id: control
+ objectName: "toolbar-override"
+
+ contentItem: Item {
+ objectName: "toolbar-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "toolbar-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ToolButton.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ToolButton.qml
new file mode 100644
index 0000000000..a9e285fb5c
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ToolButton.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ToolButton {
+ id: control
+ objectName: "toolbutton-override"
+
+ contentItem: Item {
+ objectName: "toolbutton-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "toolbutton-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ToolSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ToolSeparator.qml
new file mode 100644
index 0000000000..5c6b408d8a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ToolSeparator.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ToolSeparator {
+ id: control
+ objectName: "toolseparator-override"
+
+ contentItem: Item {
+ objectName: "toolseparator-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "toolseparator-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/ToolTip.qml b/tests/auto/quickcontrols2/customization/data/styles/override/ToolTip.qml
new file mode 100644
index 0000000000..642d618400
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/ToolTip.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.ToolTip {
+ id: control
+ objectName: "tooltip-override"
+
+ contentItem: Item {
+ objectName: "tooltip-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "tooltip-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/Tumbler.qml b/tests/auto/quickcontrols2/customization/data/styles/override/Tumbler.qml
new file mode 100644
index 0000000000..72d68f8a31
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/Tumbler.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import "../simple" as Simple
+
+Simple.Tumbler {
+ id: control
+ objectName: "tumbler-override"
+
+ contentItem: ListView {
+ objectName: "tumbler-contentItem-override"
+ }
+
+ background: Item {
+ objectName: "tumbler-background-override"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/override/qmldir b/tests/auto/quickcontrols2/customization/data/styles/override/qmldir
new file mode 100644
index 0000000000..f15ba96ab3
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/override/qmldir
@@ -0,0 +1,59 @@
+module override
+
+AbstractButton 6.0 AbstractButton.qml
+Action 6.0 Action.qml
+ActionGroup 6.0 ActionGroup.qml
+ApplicationWindow 6.0 ApplicationWindow.qml
+BusyIndicator 6.0 BusyIndicator.qml
+Button 6.0 Button.qml
+ButtonGroup 6.0 ButtonGroup.qml
+CheckBox 6.0 CheckBox.qml
+CheckDelegate 6.0 CheckDelegate.qml
+ComboBox 6.0 ComboBox.qml
+Container 6.0 Container.qml
+Control 6.0 Control.qml
+DelayButton 6.0 DelayButton.qml
+Dial 6.0 Dial.qml
+Dialog 6.0 Dialog.qml
+DialogButtonBox 6.0 DialogButtonBox.qml
+Drawer 6.0 Drawer.qml
+Frame 6.0 Frame.qml
+GroupBox 6.0 GroupBox.qml
+HorizontalHeaderView 6.0 HorizontalHeaderView.qml
+ItemDelegate 6.0 ItemDelegate.qml
+Label 6.0 Label.qml
+Menu 6.0 Menu.qml
+MenuBar 6.0 MenuBar.qml
+MenuBarItem 6.0 MenuBarItem.qml
+MenuItem 6.0 MenuItem.qml
+MenuSeparator 6.0 MenuSeparator.qml
+Page 6.0 Page.qml
+PageIndicator 6.0 PageIndicator.qml
+Pane 6.0 Pane.qml
+Popup 6.0 Popup.qml
+ProgressBar 6.0 ProgressBar.qml
+RadioButton 6.0 RadioButton.qml
+RadioDelegate 6.0 RadioDelegate.qml
+RangeSlider 6.0 RangeSlider.qml
+RoundButton 6.0 RoundButton.qml
+ScrollBar 6.0 ScrollBar.qml
+ScrollIndicator 6.0 ScrollIndicator.qml
+ScrollView 6.0 ScrollView.qml
+Slider 6.0 Slider.qml
+SpinBox 6.0 SpinBox.qml
+SplitView 6.0 SplitView.qml
+StackView 6.0 StackView.qml
+SwipeDelegate 6.0 SwipeDelegate.qml
+SwipeView 6.0 SwipeView.qml
+Switch 6.0 Switch.qml
+SwitchDelegate 6.0 SwitchDelegate.qml
+TabBar 6.0 TabBar.qml
+TabButton 6.0 TabButton.qml
+TextArea 6.0 TextArea.qml
+TextField 6.0 TextField.qml
+ToolBar 6.0 ToolBar.qml
+ToolButton 6.0 ToolButton.qml
+ToolSeparator 6.0 ToolSeparator.qml
+ToolTip 6.0 ToolTip.qml
+Tumbler 6.0 Tumbler.qml
+VerticalHeaderView 6.0 VerticalHeaderView.qml
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/AbstractButton.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/AbstractButton.qml
new file mode 100644
index 0000000000..f8eaef0c25
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/AbstractButton.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.AbstractButton {
+ id: control
+ objectName: "abstractbutton-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth + indicator.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight, background.implicitHeight)
+
+ indicator: Text {
+ objectName: "abstractbutton-indicator-simple"
+ text: control.checked ? "V" : ""
+ }
+
+ contentItem: Text {
+ objectName: "abstractbutton-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "abstractbutton-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ApplicationWindow.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ApplicationWindow.qml
new file mode 100644
index 0000000000..ec39193b43
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ApplicationWindow.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ApplicationWindow {
+ id: control
+ objectName: "applicationwindow-simple"
+
+ minimumWidth: background.implicitWidth
+ minimumHeight: background.implicitHeight
+
+ background: Rectangle {
+ objectName: "applicationwindow-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/BusyIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/BusyIndicator.qml
new file mode 100644
index 0000000000..1dcebb9b7a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/BusyIndicator.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.BusyIndicator {
+ id: control
+ objectName: "busyindicator-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "busyindicator-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "busyindicator-background-simple"
+ color: control.running ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Button.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Button.qml
new file mode 100644
index 0000000000..993c585bd9
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Button.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Button {
+ id: control
+ objectName: "button-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "button-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "button-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/CheckBox.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/CheckBox.qml
new file mode 100644
index 0000000000..f4a95f0feb
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/CheckBox.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.CheckBox {
+ id: control
+ objectName: "checkbox-simple"
+
+ implicitWidth: contentItem.implicitWidth + indicator.implicitWidth
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight)
+
+ indicator: Text {
+ objectName: "checkbox-indicator-simple"
+ text: control.checked ? "V" : ""
+ }
+
+ contentItem: Text {
+ objectName: "checkbox-contentItem-simple"
+ text: control.text
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/CheckDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/CheckDelegate.qml
new file mode 100644
index 0000000000..563db32945
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/CheckDelegate.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.CheckDelegate {
+ id: control
+ objectName: "checkdelegate-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth + indicator.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight, background.implicitHeight)
+
+ indicator: Text {
+ objectName: "checkdelegate-indicator-simple"
+ text: control.checked ? "V" : ""
+ }
+
+ contentItem: Text {
+ objectName: "checkdelegate-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "checkdelegate-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ComboBox.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ComboBox.qml
new file mode 100644
index 0000000000..ed8613891b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ComboBox.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ComboBox {
+ id: control
+ objectName: "combobox-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth + indicator.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight, background.implicitHeight)
+
+ indicator: Text {
+ objectName: "combobox-indicator-simple"
+ text: control.comboed ? "V" : ""
+ }
+
+ contentItem: Text {
+ objectName: "combobox-contentItem-simple"
+ text: control.currentText
+ }
+
+ background: Rectangle {
+ objectName: "combobox-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.down ? "red" : "green"
+ }
+
+ popup: T.Popup {
+ objectName: "combobox-popup-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Container.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Container.qml
new file mode 100644
index 0000000000..4a15009647
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Container.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Container {
+ id: control
+ objectName: "container-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "container-contentItem-simple"
+ }
+
+ background: Item {
+ objectName: "container-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Control.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Control.qml
new file mode 100644
index 0000000000..e083f8acb1
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Control.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Control {
+ id: control
+ objectName: "control-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "control-contentItem-simple"
+ }
+
+ background: Item {
+ objectName: "control-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/DelayButton.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/DelayButton.qml
new file mode 100644
index 0000000000..8f33c40156
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/DelayButton.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DelayButton {
+ id: control
+ objectName: "delaybutton-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "delaybutton-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "delaybutton-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Dial.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Dial.qml
new file mode 100644
index 0000000000..c1a9b50ba0
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Dial.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Dial {
+ id: control
+ objectName: "dial-simple"
+
+ implicitWidth: Math.max(handle.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(handle.implicitHeight, background.implicitHeight)
+
+ handle: Rectangle {
+ objectName: "dial-handle-simple"
+ color: control.pressed ? "red" : "green"
+ }
+
+ background: Rectangle {
+ objectName: "dial-background-simple"
+ implicitWidth: 200
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Dialog.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Dialog.qml
new file mode 100644
index 0000000000..787acca9b3
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Dialog.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Dialog {
+ id: control
+ objectName: "dialog-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "dialog-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "dialog-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/DialogButtonBox.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/DialogButtonBox.qml
new file mode 100644
index 0000000000..d7da32e0ad
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/DialogButtonBox.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DialogButtonBox {
+ id: control
+ objectName: "dialogbuttonbox-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "dialogbuttonbox-contentItem-simple"
+ }
+
+ background: Item {
+ objectName: "dialogbuttonbox-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Drawer.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Drawer.qml
new file mode 100644
index 0000000000..8239b1afca
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Drawer.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Drawer {
+ id: control
+ objectName: "drawer-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "drawer-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "drawer-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Frame.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Frame.qml
new file mode 100644
index 0000000000..cbeb3c5dc5
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Frame.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Frame {
+ id: control
+ objectName: "frame-simple"
+
+ implicitWidth: Math.max(background.implicitWidth, contentWidth)
+ implicitHeight: Math.max(background.implicitHeight, contentHeight)
+
+ contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0)
+ contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0)
+
+ contentItem: Item {
+ objectName: "frame-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "frame-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/GroupBox.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/GroupBox.qml
new file mode 100644
index 0000000000..14dc33414d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/GroupBox.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.GroupBox {
+ id: control
+ objectName: "groupbox-simple"
+
+ implicitWidth: Math.max(background.implicitWidth, contentWidth)
+ implicitHeight: Math.max(background.implicitHeight, contentHeight)
+
+ contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0)
+ contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0)
+
+ contentItem: Item {
+ objectName: "groupbox-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "groupbox-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+
+ label: Text {
+ objectName: "groupbox-label-simple"
+ text: control.title
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ItemDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ItemDelegate.qml
new file mode 100644
index 0000000000..a22ec3aa39
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ItemDelegate.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ItemDelegate {
+ id: control
+ objectName: "itemdelegate-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "itemdelegate-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "itemdelegate-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Label.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Label.qml
new file mode 100644
index 0000000000..80b34723c7
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Label.qml
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Label {
+ id: control
+ objectName: "label-simple"
+
+ background: Rectangle {
+ objectName: "label-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Menu.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Menu.qml
new file mode 100644
index 0000000000..7538bd5b7e
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Menu.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Menu {
+ id: control
+ objectName: "menu-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: ListView {
+ objectName: "menu-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "menu-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/MenuBar.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/MenuBar.qml
new file mode 100644
index 0000000000..a38c876e9a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/MenuBar.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuBar {
+ id: control
+ objectName: "menubar-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "menubar-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "menubar-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/MenuBarItem.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/MenuBarItem.qml
new file mode 100644
index 0000000000..de9dc92911
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/MenuBarItem.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuBarItem {
+ id: control
+ objectName: "menubaritem-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "menubaritem-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "menubaritem-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/MenuItem.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/MenuItem.qml
new file mode 100644
index 0000000000..28d5998b22
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/MenuItem.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuItem {
+ id: control
+ objectName: "menuitem-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth + indicator.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight, background.implicitHeight)
+
+ arrow: Text {
+ objectName: "menuitem-arrow-simple"
+ text: control.mirrored ? "<" : ">"
+ }
+
+ indicator: Text {
+ objectName: "menuitem-indicator-simple"
+ text: control.checked ? "V" : ""
+ }
+
+ contentItem: Text {
+ objectName: "menuitem-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "menuitem-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/MenuSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/MenuSeparator.qml
new file mode 100644
index 0000000000..3df17b5825
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/MenuSeparator.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.MenuSeparator {
+ id: control
+ objectName: "menuseparator-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "menuseparator-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "menuseparator-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Page.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Page.qml
new file mode 100644
index 0000000000..51ec606363
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Page.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Page {
+ id: control
+ objectName: "page-simple"
+
+ implicitWidth: Math.max(background.implicitWidth, contentWidth)
+ implicitHeight: Math.max(background.implicitHeight, contentHeight)
+
+ contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0)
+ contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0)
+
+ contentItem: Item {
+ objectName: "page-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "page-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/PageIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/PageIndicator.qml
new file mode 100644
index 0000000000..d508687f1c
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/PageIndicator.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.PageIndicator {
+ id: control
+ objectName: "pageindicator-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "pageindicator-contentItem-simple"
+ }
+
+ background: Item {
+ objectName: "pageindicator-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Pane.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Pane.qml
new file mode 100644
index 0000000000..3b9e12b8c3
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Pane.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Pane {
+ id: control
+ objectName: "pane-simple"
+
+ implicitWidth: Math.max(background.implicitWidth, contentWidth)
+ implicitHeight: Math.max(background.implicitHeight, contentHeight)
+
+ contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0)
+ contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0)
+
+ contentItem: Item {
+ objectName: "pane-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "pane-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Popup.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Popup.qml
new file mode 100644
index 0000000000..8b62fcade0
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Popup.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Popup {
+ id: control
+ objectName: "popup-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "popup-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "popup-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ProgressBar.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ProgressBar.qml
new file mode 100644
index 0000000000..3f04e6b22a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ProgressBar.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ProgressBar {
+ id: control
+ objectName: "progressbar-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "progressbar-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "progressbar-background-simple"
+ color: control.indeterminate ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/RadioButton.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/RadioButton.qml
new file mode 100644
index 0000000000..7ca5973bc3
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/RadioButton.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RadioButton {
+ id: control
+ objectName: "radiobutton-simple"
+
+ implicitWidth: contentItem.implicitWidth + indicator.implicitWidth
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight)
+
+ indicator: Text {
+ objectName: "radiobutton-indicator-simple"
+ text: control.checked ? "O" : ""
+ }
+
+ contentItem: Text {
+ objectName: "radiobutton-contentItem-simple"
+ text: control.text
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/RadioDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/RadioDelegate.qml
new file mode 100644
index 0000000000..bc96ad47aa
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/RadioDelegate.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RadioDelegate {
+ id: control
+ objectName: "radiodelegate-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth + indicator.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight, background.implicitHeight)
+
+ indicator: Text {
+ objectName: "radiodelegate-indicator-simple"
+ text: control.radioed ? "V" : ""
+ }
+
+ contentItem: Text {
+ objectName: "radiodelegate-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "radiodelegate-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/RangeSlider.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/RangeSlider.qml
new file mode 100644
index 0000000000..202688c48b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/RangeSlider.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RangeSlider {
+ id: control
+ objectName: "rangeslider-simple"
+
+ implicitWidth: Math.max(control.first.handle.implicitWidth, control.second.handle.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(control.first.handle.implicitHeight, control.second.handle.implicitHeight, background.implicitHeight)
+
+ first.handle: Rectangle {
+ objectName: "rangeslider-first.handle-simple"
+ color: control.first.pressed ? "red" : "green"
+ }
+
+ second.handle: Rectangle {
+ objectName: "rangeslider-second.handle-simple"
+ color: control.second.pressed ? "red" : "green"
+ }
+
+ background: Rectangle {
+ objectName: "rangeslider-background-simple"
+ implicitWidth: 200
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/RoundButton.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/RoundButton.qml
new file mode 100644
index 0000000000..3547239f39
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/RoundButton.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.RoundButton {
+ id: control
+ objectName: "roundbutton-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "roundbutton-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "roundbutton-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ radius: control.radius
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollBar.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollBar.qml
new file mode 100644
index 0000000000..25bc3e09ec
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollBar.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollBar {
+ id: control
+ objectName: "scrollbar-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "scrollbar-contentItem-simple"
+ }
+
+ background: Item {
+ objectName: "scrollbar-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollIndicator.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollIndicator.qml
new file mode 100644
index 0000000000..a901671bba
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollIndicator.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollIndicator {
+ id: control
+ objectName: "scrollindicator-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "scrollindicator-contentItem-simple"
+ }
+
+ background: Item {
+ objectName: "scrollindicator-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollView.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollView.qml
new file mode 100644
index 0000000000..56334d841d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ScrollView.qml
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+ objectName: "scrollview-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ background: Rectangle {
+ objectName: "scrollview-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Slider.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Slider.qml
new file mode 100644
index 0000000000..d5417404f0
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Slider.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Slider {
+ id: control
+ objectName: "slider-simple"
+
+ implicitWidth: Math.max(handle.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(handle.implicitHeight, background.implicitHeight)
+
+ handle: Rectangle {
+ objectName: "slider-handle-simple"
+ color: control.pressed ? "red" : "green"
+ }
+
+ background: Rectangle {
+ objectName: "slider-background-simple"
+ implicitWidth: 200
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/SpinBox.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/SpinBox.qml
new file mode 100644
index 0000000000..0facffad59
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/SpinBox.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SpinBox {
+ id: control
+ objectName: "spinbox-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth + up.indicator.implicitWidth + down.indicator.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, up.indicator.implicitHeight, down.indicator.implicitHeight, background.implicitHeight)
+
+ up.indicator: Rectangle {
+ objectName: "spinbox-up.indicator-simple"
+ color: control.up.pressed ? "red" : "green"
+ }
+
+ down.indicator: Rectangle {
+ objectName: "spinbox-down.indicator-simple"
+ color: control.down.pressed ? "red" : "green"
+ }
+
+ contentItem: Text {
+ objectName: "spinbox-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "spinbox-background-simple"
+ implicitWidth: 200
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/StackView.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/StackView.qml
new file mode 100644
index 0000000000..e16b9938bc
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/StackView.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.StackView {
+ id: control
+ objectName: "stackview-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "stackview-contentItem-simple"
+ }
+
+ background: Item {
+ objectName: "stackview-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/SwipeDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/SwipeDelegate.qml
new file mode 100644
index 0000000000..fec9f120fa
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/SwipeDelegate.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeDelegate {
+ id: control
+ objectName: "swipedelegate-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "swipedelegate-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "swipedelegate-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/SwipeView.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/SwipeView.qml
new file mode 100644
index 0000000000..cf154b6b97
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/SwipeView.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeView {
+ id: control
+ objectName: "swipeview-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Item {
+ objectName: "swipeview-contentItem-simple"
+ }
+
+ background: Item {
+ objectName: "swipeview-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Switch.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Switch.qml
new file mode 100644
index 0000000000..9e9613084a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Switch.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Switch {
+ id: control
+ objectName: "switch-simple"
+
+ implicitWidth: contentItem.implicitWidth + indicator.implicitWidth
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight)
+
+ indicator: Item {
+ objectName: "switch-indicator-simple"
+ }
+
+ contentItem: Item {
+ objectName: "switch-contentItem-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/SwitchDelegate.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/SwitchDelegate.qml
new file mode 100644
index 0000000000..f7eb1d5c37
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/SwitchDelegate.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwitchDelegate {
+ id: control
+ objectName: "switchdelegate-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth + indicator.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, indicator.implicitHeight, background.implicitHeight)
+
+ indicator: Text {
+ objectName: "switchdelegate-indicator-simple"
+ text: control.radioed ? "V" : ""
+ }
+
+ contentItem: Text {
+ objectName: "switchdelegate-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "switchdelegate-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/TabBar.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/TabBar.qml
new file mode 100644
index 0000000000..6b0f2b6327
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/TabBar.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabBar {
+ id: control
+ objectName: "tabbar-simple"
+
+ implicitWidth: Math.max(background.implicitWidth, contentItem.implicitWidth)
+ implicitHeight: Math.max(background.implicitHeight, contentItem.implicitHeight)
+
+ contentItem: Item {
+ objectName: "tabbar-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "tabbar-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/TabButton.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/TabButton.qml
new file mode 100644
index 0000000000..4c8a30ba81
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/TabButton.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabButton {
+ id: control
+ objectName: "tabbutton-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "tabbutton-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "tabbutton-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/TextArea.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/TextArea.qml
new file mode 100644
index 0000000000..7e906433fe
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/TextArea.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TextArea {
+ id: control
+ objectName: "textarea-simple"
+
+ implicitWidth: Math.max(contentWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentHeight, background.implicitHeight)
+
+ background: Rectangle {
+ objectName: "textarea-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/TextField.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/TextField.qml
new file mode 100644
index 0000000000..71a685349b
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/TextField.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TextField {
+ id: control
+ objectName: "textfield-simple"
+
+ implicitWidth: Math.max(contentWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentHeight, background.implicitHeight)
+
+ background: Rectangle {
+ objectName: "textfield-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ToolBar.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ToolBar.qml
new file mode 100644
index 0000000000..30bba195e4
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ToolBar.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolBar {
+ id: control
+ objectName: "toolbar-simple"
+
+ implicitWidth: Math.max(background.implicitWidth, contentWidth)
+ implicitHeight: Math.max(background.implicitHeight, contentHeight)
+
+ contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0)
+ contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0)
+
+ contentItem: Item {
+ objectName: "toolbar-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "toolbar-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ToolButton.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ToolButton.qml
new file mode 100644
index 0000000000..229b75368a
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ToolButton.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolButton {
+ id: control
+ objectName: "toolbutton-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "toolbutton-contentItem-simple"
+ text: control.text
+ }
+
+ background: Rectangle {
+ objectName: "toolbutton-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ color: control.pressed ? "red" : "green"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ToolSeparator.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ToolSeparator.qml
new file mode 100644
index 0000000000..8ee00bc36c
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ToolSeparator.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolSeparator {
+ id: control
+ objectName: "toolseparator-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "toolseparator-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "toolseparator-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/ToolTip.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/ToolTip.qml
new file mode 100644
index 0000000000..0299adf181
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/ToolTip.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ToolTip {
+ id: control
+ objectName: "tooltip-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: Text {
+ objectName: "tooltip-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "tooltip-background-simple"
+ implicitWidth: 20
+ implicitHeight: 20
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/Tumbler.qml b/tests/auto/quickcontrols2/customization/data/styles/simple/Tumbler.qml
new file mode 100644
index 0000000000..34f423c7eb
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/Tumbler.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Tumbler {
+ id: control
+ objectName: "tumbler-simple"
+
+ implicitWidth: Math.max(contentItem.implicitWidth, background.implicitWidth)
+ implicitHeight: Math.max(contentItem.implicitHeight, background.implicitHeight)
+
+ contentItem: ListView {
+ objectName: "tumbler-contentItem-simple"
+ }
+
+ background: Rectangle {
+ objectName: "tumbler-background-simple"
+ }
+}
diff --git a/tests/auto/quickcontrols2/customization/data/styles/simple/qmldir b/tests/auto/quickcontrols2/customization/data/styles/simple/qmldir
new file mode 100644
index 0000000000..e5159885cb
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/data/styles/simple/qmldir
@@ -0,0 +1,59 @@
+module simple
+
+AbstractButton 6.0 AbstractButton.qml
+Action 6.0 Action.qml
+ActionGroup 6.0 ActionGroup.qml
+ApplicationWindow 6.0 ApplicationWindow.qml
+BusyIndicator 6.0 BusyIndicator.qml
+Button 6.0 Button.qml
+ButtonGroup 6.0 ButtonGroup.qml
+CheckBox 6.0 CheckBox.qml
+CheckDelegate 6.0 CheckDelegate.qml
+ComboBox 6.0 ComboBox.qml
+Container 6.0 Container.qml
+Control 6.0 Control.qml
+DelayButton 6.0 DelayButton.qml
+Dial 6.0 Dial.qml
+Dialog 6.0 Dialog.qml
+DialogButtonBox 6.0 DialogButtonBox.qml
+Drawer 6.0 Drawer.qml
+Frame 6.0 Frame.qml
+GroupBox 6.0 GroupBox.qml
+HorizontalHeaderView 6.0 HorizontalHeaderView.qml
+ItemDelegate 6.0 ItemDelegate.qml
+Label 6.0 Label.qml
+Menu 6.0 Menu.qml
+MenuBar 6.0 MenuBar.qml
+MenuBarItem 6.0 MenuBarItem.qml
+MenuItem 6.0 MenuItem.qml
+MenuSeparator 6.0 MenuSeparator.qml
+Page 6.0 Page.qml
+PageIndicator 6.0 PageIndicator.qml
+Pane 6.0 Pane.qml
+Popup 6.0 Popup.qml
+ProgressBar 6.0 ProgressBar.qml
+RadioButton 6.0 RadioButton.qml
+RadioDelegate 6.0 RadioDelegate.qml
+RangeSlider 6.0 RangeSlider.qml
+RoundButton 6.0 RoundButton.qml
+ScrollBar 6.0 ScrollBar.qml
+ScrollIndicator 6.0 ScrollIndicator.qml
+ScrollView 6.0 ScrollView.qml
+Slider 6.0 Slider.qml
+SpinBox 6.0 SpinBox.qml
+SplitView 6.0 SplitView.qml
+StackView 6.0 StackView.qml
+SwipeDelegate 6.0 SwipeDelegate.qml
+SwipeView 6.0 SwipeView.qml
+Switch 6.0 Switch.qml
+SwitchDelegate 6.0 SwitchDelegate.qml
+TabBar 6.0 TabBar.qml
+TabButton 6.0 TabButton.qml
+TextArea 6.0 TextArea.qml
+TextField 6.0 TextField.qml
+ToolBar 6.0 ToolBar.qml
+ToolButton 6.0 ToolButton.qml
+ToolSeparator 6.0 ToolSeparator.qml
+ToolTip 6.0 ToolTip.qml
+Tumbler 6.0 Tumbler.qml
+VerticalHeaderView 6.0 VerticalHeaderView.qml
diff --git a/tests/auto/quickcontrols2/customization/dummy_imports.qml b/tests/auto/quickcontrols2/customization/dummy_imports.qml
new file mode 100644
index 0000000000..40d9cea712
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/dummy_imports.qml
@@ -0,0 +1,9 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+QtObject { }
diff --git a/tests/auto/quickcontrols2/customization/tst_customization.cpp b/tests/auto/quickcontrols2/customization/tst_customization.cpp
new file mode 100644
index 0000000000..0829e29e3d
--- /dev/null
+++ b/tests/auto/quickcontrols2/customization/tst_customization.cpp
@@ -0,0 +1,543 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtCore/private/qhooks_p.h>
+#include <QtCore/qregularexpression.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQuick/qquickitem.h>
+#include <QtQuick/qquickwindow.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+#include <QtQuickTemplates2/private/qquickcontrol_p_p.h>
+
+using namespace QQuickControlsTestUtils;
+
+struct ControlInfo
+{
+ QString type;
+ QStringList delegates;
+};
+
+static const ControlInfo ControlInfos[] = {
+ { "AbstractButton", QStringList() << "background" << "contentItem" << "indicator" },
+ { "ApplicationWindow", QStringList() << "background" },
+ { "BusyIndicator", QStringList() << "background" << "contentItem" },
+ { "Button", QStringList() << "background" << "contentItem" },
+ { "CheckBox", QStringList() << "contentItem" << "indicator" },
+ { "CheckDelegate", QStringList() << "background" << "contentItem" << "indicator" },
+ { "ComboBox", QStringList() << "background" << "contentItem" << "indicator" }, // popup not created until needed
+ { "Container", QStringList() << "background" << "contentItem" },
+ { "Control", QStringList() << "background" << "contentItem" },
+ { "DelayButton", QStringList() << "background" << "contentItem" },
+ { "Dial", QStringList() << "background" << "handle" },
+ { "Dialog", QStringList() << "background" << "contentItem" },
+ { "DialogButtonBox", QStringList() << "background" << "contentItem" },
+ { "Drawer", QStringList() << "background" << "contentItem" },
+ { "Frame", QStringList() << "background" << "contentItem" },
+ { "GroupBox", QStringList() << "background" << "contentItem" << "label" },
+ { "ItemDelegate", QStringList() << "background" << "contentItem" },
+ { "Label", QStringList() << "background" },
+ { "Menu", QStringList() << "background" << "contentItem" },
+ { "MenuBar", QStringList() << "background" << "contentItem" },
+ { "MenuBarItem", QStringList() << "background" << "contentItem" },
+ { "MenuItem", QStringList() << "arrow" << "background" << "contentItem" << "indicator" },
+ { "MenuSeparator", QStringList() << "background" << "contentItem" },
+ { "Page", QStringList() << "background" << "contentItem" },
+ { "PageIndicator", QStringList() << "background" << "contentItem" },
+ { "Pane", QStringList() << "background" << "contentItem" },
+ { "Popup", QStringList() << "background" << "contentItem" },
+ { "ProgressBar", QStringList() << "background" << "contentItem" },
+ { "RadioButton", QStringList() << "contentItem" << "indicator" },
+ { "RadioDelegate", QStringList() << "background" << "contentItem" << "indicator" },
+ { "RangeSlider", QStringList() << "background" << "first.handle" << "second.handle" },
+ { "RoundButton", QStringList() << "background" << "contentItem" },
+ { "ScrollBar", QStringList() << "background" << "contentItem" },
+ { "ScrollIndicator", QStringList() << "background" << "contentItem" },
+ { "ScrollView", QStringList() << "background" },
+ { "Slider", QStringList() << "background" << "handle" },
+ { "SpinBox", QStringList() << "background" << "contentItem" << "up.indicator" << "down.indicator" },
+ { "StackView", QStringList() << "background" << "contentItem" },
+ { "SwipeDelegate", QStringList() << "background" << "contentItem" },
+ { "SwipeView", QStringList() << "background" << "contentItem" },
+ { "Switch", QStringList() << "contentItem" << "indicator" },
+ { "SwitchDelegate", QStringList() << "background" << "contentItem" << "indicator" },
+ { "TabBar", QStringList() << "background" << "contentItem" },
+ { "TabButton", QStringList() << "background" << "contentItem" },
+ { "TextField", QStringList() << "background" },
+ { "TextArea", QStringList() << "background" },
+ { "ToolBar", QStringList() << "background" << "contentItem" },
+ { "ToolButton", QStringList() << "background" << "contentItem" },
+ { "ToolSeparator", QStringList() << "background" << "contentItem" },
+ { "ToolTip", QStringList() << "background" << "contentItem" },
+ { "Tumbler", QStringList() << "background" << "contentItem" }
+};
+
+class tst_customization : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_customization();
+
+private slots:
+ void initTestCase() override;
+ void cleanupTestCase();
+
+ void init();
+ void cleanup();
+
+ void creation_data();
+ void creation();
+
+ void override_data();
+ void override();
+
+ void comboPopup();
+
+private:
+ void reset();
+ void addHooks();
+ void removeHooks();
+
+ QObject* createControl(const QString &type, const QString &qml, QString *error);
+
+ QQmlEngine *engine = nullptr;
+};
+
+typedef QHash<QObject *, QString> QObjectNameHash;
+Q_GLOBAL_STATIC(QObjectNameHash, qt_objectNames)
+Q_GLOBAL_STATIC(QStringList, qt_createdQObjects)
+Q_GLOBAL_STATIC(QStringList, qt_destroyedQObjects)
+Q_GLOBAL_STATIC(QStringList, qt_destroyedParentQObjects)
+static int qt_unparentedItemCount = 0;
+
+class ItemParentListener : public QQuickItem
+{
+ Q_OBJECT
+
+public:
+ ItemParentListener()
+ {
+ m_slotIndex = metaObject()->indexOfSlot("onParentChanged()");
+ m_signalIndex = QMetaObjectPrivate::signalIndex(QMetaMethod::fromSignal(&QQuickItem::parentChanged));
+ }
+
+ int signalIndex() const { return m_signalIndex; }
+ int slotIndex() const { return m_slotIndex; }
+
+public slots:
+ void onParentChanged()
+ {
+ const QQuickItem *item = qobject_cast<QQuickItem *>(sender());
+ if (!item)
+ return;
+
+ if (!item->parentItem())
+ ++qt_unparentedItemCount;
+ }
+
+private:
+ int m_slotIndex;
+ int m_signalIndex;
+};
+static ItemParentListener *qt_itemParentListener = nullptr;
+
+extern "C" Q_DECL_EXPORT void qt_addQObject(QObject *object)
+{
+ // objectName is not set at construction time
+ QObject::connect(object, &QObject::objectNameChanged, [object](const QString &objectName) {
+ QString oldObjectName = qt_objectNames()->value(object);
+ if (!oldObjectName.isEmpty())
+ qt_createdQObjects()->removeOne(oldObjectName);
+ // Only track object names from our QML files,
+ // not e.g. contentItem object names (like "ApplicationWindow").
+ if (objectName.contains("-")) {
+ qt_createdQObjects()->append(objectName);
+ qt_objectNames()->insert(object, objectName);
+ }
+ });
+
+ if (qt_itemParentListener) {
+ static const int signalIndex = qt_itemParentListener->signalIndex();
+ static const int slotIndex = qt_itemParentListener->slotIndex();
+ QMetaObject::connect(object, signalIndex, qt_itemParentListener, slotIndex);
+ }
+}
+
+extern "C" Q_DECL_EXPORT void qt_removeQObject(QObject *object)
+{
+ QString objectName = object->objectName();
+ if (!objectName.isEmpty())
+ qt_destroyedQObjects()->append(objectName);
+ qt_objectNames()->remove(object);
+
+ QObject *parent = object->parent();
+ if (parent) {
+ QString parentName = parent->objectName();
+ if (!parentName.isEmpty())
+ qt_destroyedParentQObjects()->append(parentName);
+ }
+}
+
+tst_customization::tst_customization()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_customization::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+
+ qt_itemParentListener = new ItemParentListener;
+}
+
+void tst_customization::cleanupTestCase()
+{
+ delete qt_itemParentListener;
+ qt_itemParentListener = nullptr;
+}
+
+void tst_customization::init()
+{
+ engine = new QQmlEngine(this);
+ engine->addImportPath(testFile("styles"));
+
+ qtHookData[QHooks::AddQObject] = reinterpret_cast<quintptr>(&qt_addQObject);
+ qtHookData[QHooks::RemoveQObject] = reinterpret_cast<quintptr>(&qt_removeQObject);
+}
+
+void tst_customization::cleanup()
+{
+ qtHookData[QHooks::AddQObject] = 0;
+ qtHookData[QHooks::RemoveQObject] = 0;
+
+ delete engine;
+ engine = nullptr;
+
+ qmlClearTypeRegistrations();
+
+ reset();
+}
+
+void tst_customization::reset()
+{
+ qt_unparentedItemCount = 0;
+ qt_createdQObjects()->clear();
+ qt_destroyedQObjects()->clear();
+ qt_destroyedParentQObjects()->clear();
+}
+
+QObject* tst_customization::createControl(const QString &name, const QString &qml, QString *error)
+{
+ QQmlComponent component(engine);
+ component.setData("import QtQuick; import QtQuick.Window; import QtQuick.Controls; " + name.toUtf8() + " { " + qml.toUtf8() + " }", QUrl());
+ QObject *obj = component.create();
+ if (!obj)
+ *error = component.errorString();
+ return obj;
+}
+
+void tst_customization::creation_data()
+{
+ QTest::addColumn<QString>("style");
+ QTest::addColumn<QString>("type");
+ QTest::addColumn<QStringList>("delegates");
+
+ // the "empty" style does not contain any delegates
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable("empty:" + control.type)) << "empty" << control.type << QStringList();
+
+ // the "incomplete" style is missing bindings to the delegates (must be created regardless)
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable("incomplete:" + control.type)) << "incomplete" << control.type << control.delegates;
+
+ // the "identified" style has IDs in the delegates (prevents deferred execution)
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable("identified:" + control.type)) << "identified" << control.type << control.delegates;
+
+ // the "simple" style simulates a proper style and contains bindings to/in delegates
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable("simple:" + control.type)) << "simple" << control.type << control.delegates;
+
+ // the "override" style overrides all delegates in the "simple" style
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable("override:" + control.type)) << "override" << control.type << control.delegates;
+}
+
+void tst_customization::creation()
+{
+ QFETCH(QString, style);
+ QFETCH(QString, type);
+ QFETCH(QStringList, delegates);
+
+ QQuickStyle::setStyle(style);
+
+ QString error;
+ QScopedPointer<QObject> control(createControl(type, "", &error));
+ QVERIFY2(control, qPrintable(error));
+
+ QByteArray templateType = "QQuick" + type.toUtf8();
+ QVERIFY2(control->inherits(templateType), qPrintable(type + " does not inherit " + templateType + " (" + control->metaObject()->className() + ")"));
+
+ // <control>-<style>
+ QString controlName = type.toLower() + "-" + style;
+ QCOMPARE(control->objectName(), controlName);
+ QVERIFY2(qt_createdQObjects()->removeOne(controlName), qPrintable(controlName + " was not created as expected"));
+
+ for (QString delegate : qAsConst(delegates)) {
+ QStringList properties = delegate.split(".", Qt::SkipEmptyParts);
+
+ // <control>-<delegate>-<style>(-<override>)
+ delegate.append("-" + style);
+ delegate.prepend(type.toLower() + "-");
+
+ QVERIFY2(qt_createdQObjects()->removeOne(delegate), qPrintable(delegate + " was not created as expected"));
+
+ // verify that the delegate instance has the expected object name
+ // in case of grouped properties, we must query the properties step by step
+ QObject *instance = control.data();
+ while (!properties.isEmpty()) {
+ QString property = properties.takeFirst();
+ instance = instance->property(property.toUtf8()).value<QObject *>();
+ QVERIFY2(instance, qPrintable("property was null: " + property));
+ }
+ QCOMPARE(instance->objectName(), delegate);
+ }
+
+ QEXPECT_FAIL("identified:ComboBox", "ComboBox::popup with an ID is created at construction time", Continue);
+
+ QVERIFY2(qt_createdQObjects()->isEmpty(), qPrintable("unexpectedly created: " + qt_createdQObjects->join(", ")));
+ QVERIFY2(qt_destroyedQObjects()->isEmpty(), qPrintable("unexpectedly destroyed: " + qt_destroyedQObjects->join(", ") + " were unexpectedly destroyed"));
+
+ QVERIFY2(qt_destroyedParentQObjects()->isEmpty(), qPrintable("delegates/children of: " + qt_destroyedParentQObjects->join(", ") + " were unexpectedly destroyed"));
+}
+
+void tst_customization::override_data()
+{
+ QTest::addColumn<QString>("style");
+ QTest::addColumn<QString>("type");
+ QTest::addColumn<QStringList>("delegates");
+ QTest::addColumn<QString>("nonDeferred");
+ QTest::addColumn<bool>("identify");
+
+ // NOTE: delegates with IDs prevent deferred execution
+
+ // default delegates with IDs, override with custom delegates with no IDs
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable("identified:" + control.type)) << "identified" << control.type << control.delegates << "identified" << false;
+
+ // default delegates with no IDs, override with custom delegates with IDs
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable("simple:" + control.type)) << "simple" << control.type << control.delegates << "" << true;
+
+ // default delegates with IDs, override with custom delegates with IDs
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable("overidentified:" + control.type)) << "identified" << control.type << control.delegates << "identified" << true;
+
+#ifndef Q_OS_MACOS // QTBUG-65671
+
+ // test that the built-in styles don't have undesired IDs in their delegates
+ const QStringList styles = QQuickStylePrivate::builtInStyles();
+ for (const QString &style : styles) {
+ for (const ControlInfo &control : ControlInfos)
+ QTest::newRow(qPrintable(style + ":" + control.type)) << style << control.type << control.delegates << "" << false;
+ }
+
+#endif
+}
+
+void tst_customization::override()
+{
+ QFETCH(QString, style);
+ QFETCH(QString, type);
+ QFETCH(QStringList, delegates);
+ QFETCH(QString, nonDeferred);
+ QFETCH(bool, identify);
+
+ QQuickStyle::setStyle(style);
+
+ QString qml;
+ qml += QString("objectName: '%1-%2-override'; ").arg(type.toLower()).arg(style);
+ for (const QString &delegate : delegates) {
+ QString id = identify ? QString("id: %1;").arg(delegate) : QString();
+ qml += QString("%1: Item { %2 objectName: '%3-%1-%4-override' } ").arg(delegate).arg(id.replace(".", "")).arg(type.toLower()).arg(style);
+ }
+
+ QString error;
+ QScopedPointer<QObject> control(createControl(type, qml, &error));
+ QVERIFY2(control, qPrintable(error));
+
+ // If there are no intentional IDs in the default delegates nor in the overridden custom
+ // delegates, no item should get un-parented during the creation process. An item being
+ // unparented means that a delegate got destroyed, so there must be an internal ID in one
+ // of the delegates in the tested style.
+ if (!identify && nonDeferred.isEmpty()) {
+ QEXPECT_FAIL("Universal:ApplicationWindow", "ApplicationWindow.qml contains an intentionally unparented FocusRectangle", Continue);
+ QCOMPARE(qt_unparentedItemCount, 0);
+ }
+
+ // <control>-<style>-override
+ QString controlName = type.toLower() + "-" + style + "-override";
+ QCOMPARE(control->objectName(), controlName);
+ QVERIFY2(qt_createdQObjects()->removeOne(controlName), qPrintable(controlName + " was not created as expected"));
+
+ for (QString delegate : qAsConst(delegates)) {
+ QStringList properties = delegate.split(".", Qt::SkipEmptyParts);
+
+ // <control>-<delegate>-<style>(-override)
+ delegate.append("-" + style);
+ delegate.prepend(type.toLower() + "-");
+
+ if (!nonDeferred.isEmpty())
+ QVERIFY2(qt_createdQObjects()->removeOne(delegate), qPrintable(delegate + " was not created as expected"));
+
+ delegate.append("-override");
+ QVERIFY2(qt_createdQObjects()->removeOne(delegate), qPrintable(delegate + " was not created as expected"));
+
+ // verify that the delegate instance has the expected object name
+ // in case of grouped properties, we must query the properties step by step
+ QObject *instance = control.data();
+ while (!properties.isEmpty()) {
+ QString property = properties.takeFirst();
+ instance = instance->property(property.toUtf8()).value<QObject *>();
+ QVERIFY2(instance, qPrintable("property was null: " + property));
+ }
+ QCOMPARE(instance->objectName(), delegate);
+ }
+
+ QEXPECT_FAIL("identified:ComboBox", "ComboBox::popup with an ID is created at construction time", Continue);
+ QEXPECT_FAIL("overidentified:ComboBox", "ComboBox::popup with an ID is created at construction time", Continue);
+ QVERIFY2(qt_createdQObjects()->isEmpty(), qPrintable("unexpectedly created: " + qt_createdQObjects->join(", ")));
+
+ if (!nonDeferred.isEmpty()) {
+ // There were items for which deferred execution was not possible.
+ for (QString delegateName : qAsConst(delegates)) {
+ if (!delegateName.contains("-"))
+ delegateName.append("-" + nonDeferred);
+ delegateName.prepend(type.toLower() + "-");
+
+ const int delegateIndex = qt_destroyedQObjects()->indexOf(delegateName);
+ QVERIFY2(delegateIndex == -1, qPrintable(delegateName + " was unexpectedly destroyed"));
+
+ const auto controlChildren = control->children();
+ const auto childIt = std::find_if(controlChildren.constBegin(), controlChildren.constEnd(), [delegateName](const QObject *child) {
+ return child->objectName() == delegateName;
+ });
+ // We test other delegates (like the background) here, so make sure we don't end up with XPASSes by using the wrong delegate.
+ if (delegateName.contains(QLatin1String("handle"))) {
+ QEXPECT_FAIL("identified:RangeSlider", "For some reason, items that are belong to grouped properties fail here", Abort);
+ QEXPECT_FAIL("overidentified:RangeSlider", "For some reason, items that are belong to grouped properties fail here", Abort);
+ }
+ if (delegateName.contains(QLatin1String("indicator"))) {
+ QEXPECT_FAIL("identified:SpinBox", "For some reason, items that are belong to grouped properties fail here", Abort);
+ QEXPECT_FAIL("overidentified:SpinBox", "For some reason, items that are belong to grouped properties fail here", Abort);
+ }
+ QVERIFY2(childIt != controlChildren.constEnd(), qPrintable(QString::fromLatin1(
+ "Expected delegate \"%1\" to still be a QObject child of \"%2\"").arg(delegateName).arg(controlName)));
+
+ const auto *delegate = qobject_cast<QQuickItem*>(*childIt);
+ // Ensure that the item is hidden, etc.
+ QVERIFY(delegate);
+ QCOMPARE(delegate->isVisible(), false);
+ QCOMPARE(delegate->parentItem(), nullptr);
+ }
+ }
+
+ QVERIFY2(qt_destroyedQObjects()->isEmpty(), qPrintable("unexpectedly destroyed: " + qt_destroyedQObjects->join(", ")));
+}
+
+void tst_customization::comboPopup()
+{
+ QQuickStyle::setStyle("simple");
+
+ {
+ // test that ComboBox::popup is created when accessed
+ QQmlComponent component(engine);
+ component.setData("import QtQuick.Controls; ComboBox { }", QUrl());
+ QScopedPointer<QQuickItem> comboBox(qobject_cast<QQuickItem *>(component.create()));
+ QVERIFY(comboBox);
+
+ QVERIFY(!qt_createdQObjects()->contains("combobox-popup-simple"));
+
+ QObject *popup = comboBox->property("popup").value<QObject *>();
+ QVERIFY(popup);
+ QVERIFY(qt_createdQObjects()->contains("combobox-popup-simple"));
+ }
+
+ reset();
+
+ {
+ // test that ComboBox::popup is created when it becomes visible
+ QQuickWindow window;
+ window.resize(300, 300);
+ window.show();
+ window.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ QQmlComponent component(engine);
+ component.setData("import QtQuick.Controls; ComboBox { }", QUrl());
+ QScopedPointer<QQuickItem> comboBox(qobject_cast<QQuickItem *>(component.create()));
+ QVERIFY(comboBox);
+
+ comboBox->setParentItem(window.contentItem());
+ QVERIFY(!qt_createdQObjects()->contains("combobox-popup-simple"));
+
+ QTest::mouseClick(&window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QVERIFY(qt_createdQObjects()->contains("combobox-popup-simple"));
+ }
+
+ reset();
+
+ {
+ // test that ComboBox::popup is completed upon component completion (if appropriate)
+ QQmlComponent component(engine);
+ component.setData("import QtQuick; import QtQuick.Controls; ComboBox { id: control; contentItem: Item { visible: !control.popup.visible } popup: Popup { property bool wasCompleted: false; Component.onCompleted: wasCompleted = true } }", QUrl());
+ QScopedPointer<QQuickItem> comboBox(qobject_cast<QQuickItem *>(component.create()));
+ QVERIFY(comboBox);
+
+ QObject *popup = comboBox->property("popup").value<QObject *>();
+ QVERIFY(popup);
+ QCOMPARE(popup->property("wasCompleted"), QVariant(true));
+ }
+}
+
+QTEST_MAIN(tst_customization)
+
+#include "tst_customization.moc"
diff --git a/tests/auto/quickcontrols2/designer/CMakeLists.txt b/tests/auto/quickcontrols2/designer/CMakeLists.txt
new file mode 100644
index 0000000000..d13b014c93
--- /dev/null
+++ b/tests/auto/quickcontrols2/designer/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Generated from designer.pro.
+
+#####################################################################
+## tst_designer Test:
+#####################################################################
+
+qt_internal_add_test(tst_designer
+ SOURCES
+ tst_designer.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::Quick
+ Qt::QuickControls2
+ Qt::QuickTemplates2
+ Qt::QuickPrivate
+)
+
+#### Keys ignored in scope 1:.:.:designer.pro:<TRUE>:
+# TEMPLATE = "app"
+
+## Scopes:
+#####################################################################
diff --git a/tests/auto/quickcontrols2/designer/dummy_imports.qml b/tests/auto/quickcontrols2/designer/dummy_imports.qml
new file mode 100644
index 0000000000..401692e570
--- /dev/null
+++ b/tests/auto/quickcontrols2/designer/dummy_imports.qml
@@ -0,0 +1,8 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQuick
+import QtQuick.Controls
+
+QtObject { }
diff --git a/tests/auto/quickcontrols2/designer/tst_designer.cpp b/tests/auto/quickcontrols2/designer/tst_designer.cpp
new file mode 100644
index 0000000000..0f6598a600
--- /dev/null
+++ b/tests/auto/quickcontrols2/designer/tst_designer.cpp
@@ -0,0 +1,162 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest>
+#include <QtQuick>
+
+#include <QtQuickControls2>
+#include <QQmlComponent>
+#include <QDir>
+
+#include <private/qquickdesignersupportitems_p.h>
+
+class tst_Designer : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+
+ void test_controls();
+ void test_controls_data();
+};
+
+
+void tst_Designer::initTestCase()
+{
+ QQuickStyle::setStyle("Basic");
+}
+
+void doComponentCompleteRecursive(QObject *object)
+{
+ if (object) {
+ QQuickItem *item = qobject_cast<QQuickItem*>(object);
+
+ if (item && DesignerSupport::isComponentComplete(item))
+ return;
+
+ DesignerSupport::emitComponentCompleteSignalForAttachedProperty(qobject_cast<QQuickItem*>(object));
+
+ QList<QObject*> childList = object->children();
+
+ if (item) {
+ for (QQuickItem *childItem : item->childItems()) {
+ if (!childList.contains(childItem))
+ childList.append(childItem);
+ }
+ }
+
+ for (QObject *child : childList)
+ doComponentCompleteRecursive(child);
+
+ if (item) {
+ static_cast<QQmlParserStatus*>(item)->componentComplete();
+ } else {
+ QQmlParserStatus *qmlParserStatus = dynamic_cast< QQmlParserStatus*>(object);
+ if (qmlParserStatus)
+ qmlParserStatus->componentComplete();
+ }
+ }
+}
+
+
+void tst_Designer::test_controls()
+{
+ QFETCH(QString, type);
+
+ const QByteArray before("import QtQuick\n"
+ "import QtQuick.Controls\n"
+ "Item {\n");
+
+ QByteArray source = before;
+ source.append(type.toUtf8());
+
+ const QByteArray after(" {"
+ "}\n"
+ "}\n");
+
+ source.append(after);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+
+ {
+ ComponentCompleteDisabler disableComponentComplete;
+ component.setData(source, QUrl::fromLocalFile(QDir::current().absolutePath()));
+ }
+
+ QObject *root = component.create();
+ QVERIFY(root);
+ doComponentCompleteRecursive(root);
+}
+
+void tst_Designer::test_controls_data()
+{
+ QTest::addColumn<QString>("type");
+
+ QTest::newRow("Button") << "Button";
+ QTest::newRow("CheckBox") << "CheckBox";
+ QTest::newRow("ComboBox") << "ComboBox";
+ QTest::newRow("DelayButton") << "DelayButton";
+ QTest::newRow("Dial") << "Dial";
+ QTest::newRow("Frame") << "Frame";
+ QTest::newRow("GroupBox") << "GroupBox";
+ QTest::newRow("Label") << "Label";
+ QTest::newRow("Page") << "Page";
+ QTest::newRow("Pane") << "Pane";
+ QTest::newRow("ProgressBar") << "ProgressBar";
+ QTest::newRow("RadioButton") << "RadioButton";
+ QTest::newRow("RangeSlider") << "RangeSlider";
+ QTest::newRow("RoundButton") << "RoundButton";
+ QTest::newRow("ScrollView") << "ScrollView";
+ QTest::newRow("Slider") << "Slider";
+ QTest::newRow("SpinBox") << "SpinBox";
+ QTest::newRow("StackView") << "StackView";
+ QTest::newRow("SwipeView") << "SwipeView";
+ QTest::newRow("Switch") << "Switch";
+ QTest::newRow("Switch") << "Switch";
+ QTest::newRow("TabBar") << "TabBar";
+ QTest::newRow("TabButton") << "TabButton";
+ QTest::newRow("TextArea") << "TextArea";
+ QTest::newRow("TextField") << "TextField";
+ QTest::newRow("ToolBar") << "ToolBar";
+ QTest::newRow("ToolButton") << "ToolButton";
+ QTest::newRow("Tumbler") << "Tumbler";
+}
+
+QTEST_MAIN(tst_Designer)
+
+#include "tst_designer.moc"
diff --git a/tests/auto/quickcontrols2/focus/BLACKLIST b/tests/auto/quickcontrols2/focus/BLACKLIST
new file mode 100644
index 0000000000..730d384475
--- /dev/null
+++ b/tests/auto/quickcontrols2/focus/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-78261
+[policy]
+opensuse-leap
diff --git a/tests/auto/quickcontrols2/focus/CMakeLists.txt b/tests/auto/quickcontrols2/focus/CMakeLists.txt
new file mode 100644
index 0000000000..8f6d53f7da
--- /dev/null
+++ b/tests/auto/quickcontrols2/focus/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Generated from focus.pro.
+
+#####################################################################
+## tst_focus Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_focus
+ SOURCES
+ tst_focus.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_focus CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_focus CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/focus/data/activeFocusOnTab.qml b/tests/auto/quickcontrols2/focus/data/activeFocusOnTab.qml
new file mode 100644
index 0000000000..6b57f39b1e
--- /dev/null
+++ b/tests/auto/quickcontrols2/focus/data/activeFocusOnTab.qml
@@ -0,0 +1,203 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ id: main
+ objectName: "main"
+ width: 400
+ height: 800
+ focus: true
+ Component.onCompleted: button1.focus = true
+ Column {
+ anchors.fill: parent
+ id: column
+ objectName: "column"
+ BusyIndicator {
+ id: busyindicator
+ objectName: "busyindicator"
+ }
+ Button {
+ id: button1
+ objectName: "button1"
+ text: "button1"
+ }
+ Button {
+ id: button2
+ objectName: "button2"
+ text: "button2"
+ }
+ CheckBox {
+ id: checkbox
+ objectName: "checkbox"
+ text: "checkbox"
+ }
+ GroupBox {
+ id: groupbox1
+ objectName: "groupbox1"
+ title: "grouppox1"
+ Column {
+ anchors.fill: parent
+ CheckBox {
+ id: checkbox1
+ objectName: "checkbox1"
+ text: "checkbox1"
+ }
+ CheckBox {
+ id: checkbox2
+ objectName: "checkbox2"
+ text: "checkbox2"
+ }
+ }
+ }
+ Label {
+ id: label
+ objectName: "label"
+ text: "label"
+ }
+ PageIndicator {
+ id: pageindicator
+ objectName: "pageindicator"
+ }
+ ProgressBar {
+ id: progressbar
+ objectName: "progressbar"
+ indeterminate: true
+ }
+ RadioButton {
+ id: radiobutton
+ objectName: "radiobutton"
+ text: "radiobutton"
+ }
+ GroupBox {
+ id: groupbox2
+ objectName: "groupbox2"
+ title: "groupbox2"
+ Column {
+ anchors.fill: parent
+ RadioButton {
+ id: radiobutton1
+ objectName: "radiobutton1"
+ text: "radiobutton1"
+ }
+ RadioButton {
+ id: radiobutton2
+ objectName: "radiobutton2"
+ text: "radiobutton2"
+ }
+ }
+ }
+ RangeSlider {
+ id: rangeslider
+ objectName: "rangeslider"
+ first.handle.objectName: "rangeslider.first"
+ second.handle.objectName: "rangeslider.second"
+ }
+ // ScrollBar
+ ScrollIndicator {
+ id: scrollindicator
+ objectName: "scrollindicator"
+ }
+ Slider {
+ id: slider
+ objectName: "slider"
+ value: 0.5
+ }
+ SpinBox {
+ id: spinbox
+ objectName: "spinbox"
+ editable: true
+ value: 50
+ }
+ // StackView
+ Switch {
+ id: swtich // switch
+ objectName: "switch"
+ text: "switch"
+ }
+ TabBar {
+ width: parent.width
+ id: tabbar
+ objectName: "tabbar"
+ TabButton {
+ id: tabbutton1
+ objectName: "tabbutton1"
+ text: "tabbutton1"
+ }
+ TabButton {
+ id: tabbutton2
+ objectName: "tabbutton2"
+ text: "tabbutton2"
+ }
+ }
+ TextField {
+ id: textfield
+ objectName: "textfield"
+ text: "abc"
+ }
+ ToolBar {
+ width: parent.width
+ id: toolbar
+ objectName: "toolbar"
+ ToolButton {
+ id: toolbutton
+ objectName: "toolbutton"
+ text: "toolbutton"
+ }
+ }
+ TextArea {
+ id: textarea
+ objectName: "textarea"
+ text: "abc"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/focus/data/focusReason.qml b/tests/auto/quickcontrols2/focus/data/focusReason.qml
new file mode 100644
index 0000000000..0f8a61f05e
--- /dev/null
+++ b/tests/auto/quickcontrols2/focus/data/focusReason.qml
@@ -0,0 +1,99 @@
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Item {
+ Component.onCompleted: control.focus = true
+ width: 640
+ height: 480
+
+ Column {
+ anchors.top: parent.top
+ anchors.topMargin: 10
+ spacing: 10
+
+ Control {
+ id: control
+ implicitWidth: 100
+ implicitHeight: 20
+ objectName: "control"
+ activeFocusOnTab: true
+
+ Menu {
+ id: contextMenu
+ objectName: "contextMenu"
+ MenuItem {
+ text: "Hello"
+ }
+ MenuItem {
+ text: "World"
+ }
+ }
+ MouseArea {
+ anchors.fill: parent
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+ onClicked: function onClicked(mouseEvent) {
+ if (mouseEvent.button == Qt.RightButton)
+ contextMenu.visible = true
+ }
+ }
+ }
+
+ ComboBox {
+ id: combobox
+ objectName: "combobox"
+ model: ["Banana", "Apple", "Coconut"]
+ activeFocusOnTab: true
+ }
+
+ ComboBox {
+ id: editcombo
+ objectName: "editcombo"
+ editable: true
+ model: ["Kiwi", "Mango", "Pomelo"]
+ activeFocusOnTab: true
+ }
+
+ SpinBox {
+ id: spinbox
+ objectName: "spinbox"
+ from: 0
+ to: 100
+ value: 20
+ editable: true
+ activeFocusOnTab: true
+ }
+
+ Control {
+ id: customText
+ objectName: "customText"
+ implicitWidth: 100
+ implicitHeight: 50
+ contentItem: TextInput {
+ text: parent.visualFocus ? "focus" : "no focus"
+ }
+ activeFocusOnTab: true
+ }
+
+ Control {
+ id: customItem
+ objectName: "customItem"
+ implicitWidth: 100
+ implicitHeight: 50
+ contentItem: Rectangle {
+ anchors.fill: parent
+ color: parent.activeFocus ? "red" : "blue"
+ opacity: 0.3
+ }
+ focusPolicy: Qt.WheelFocus
+ activeFocusOnTab: true
+ }
+
+ TextField {
+ id: textfield
+ objectName: "textfield"
+ text: "test123"
+ activeFocusOnTab: true
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/focus/data/keyNavigation.qml b/tests/auto/quickcontrols2/focus/data/keyNavigation.qml
new file mode 100644
index 0000000000..7ac8e014cd
--- /dev/null
+++ b/tests/auto/quickcontrols2/focus/data/keyNavigation.qml
@@ -0,0 +1,260 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ id: main
+ objectName: "main"
+ width: 400
+ height: 800
+ focus: true
+ Component.onCompleted: button1.focus = true
+ Column {
+ anchors.fill: parent
+ id: column
+ objectName: "column"
+ BusyIndicator {
+ id: busyindicator
+ objectName: "busyindicator"
+ }
+ Button {
+ id: button1
+ objectName: "button1"
+ text: "button1"
+ KeyNavigation.up: textarea
+ KeyNavigation.down: button2
+ KeyNavigation.left: toolbutton
+ KeyNavigation.right: button2
+ }
+ Button {
+ id: button2
+ objectName: "button2"
+ text: "button2"
+ KeyNavigation.up: button1
+ KeyNavigation.down: checkbox
+ KeyNavigation.left: button1
+ KeyNavigation.right: checkbox
+ }
+ CheckBox {
+ id: checkbox
+ objectName: "checkbox"
+ text: "checkbox"
+ KeyNavigation.up: button2
+ KeyNavigation.down: checkbox1
+ KeyNavigation.left: button2
+ KeyNavigation.right: checkbox1
+ }
+ GroupBox {
+ id: groupbox1
+ objectName: "groupbox1"
+ title: "grouppox1"
+ Column {
+ anchors.fill: parent
+ CheckBox {
+ id: checkbox1
+ objectName: "checkbox1"
+ text: "checkbox1"
+ KeyNavigation.up: checkbox
+ KeyNavigation.down: checkbox2
+ KeyNavigation.left: checkbox
+ KeyNavigation.right: checkbox2
+ }
+ CheckBox {
+ id: checkbox2
+ objectName: "checkbox2"
+ text: "checkbox2"
+ KeyNavigation.up: checkbox1
+ KeyNavigation.down: radiobutton
+ KeyNavigation.left: checkbox1
+ KeyNavigation.right: radiobutton
+ }
+ }
+ }
+ Label {
+ id: label
+ objectName: "label"
+ text: "label"
+ }
+ PageIndicator {
+ id: pageindicator
+ objectName: "pageindicator"
+ }
+ ProgressBar {
+ id: progressbar
+ objectName: "progressbar"
+ indeterminate: true
+ }
+ RadioButton {
+ id: radiobutton
+ objectName: "radiobutton"
+ text: "radiobutton"
+ KeyNavigation.up: checkbox2
+ KeyNavigation.down: radiobutton1
+ KeyNavigation.left: checkbox2
+ KeyNavigation.right: radiobutton1
+ }
+ GroupBox {
+ id: groupbox2
+ objectName: "groupbox2"
+ title: "groupbox2"
+ Column {
+ anchors.fill: parent
+ RadioButton {
+ id: radiobutton1
+ objectName: "radiobutton1"
+ text: "radiobutton1"
+ KeyNavigation.up: radiobutton
+ KeyNavigation.down: radiobutton2
+ KeyNavigation.left: radiobutton
+ KeyNavigation.right: radiobutton2
+ }
+ RadioButton {
+ id: radiobutton2
+ objectName: "radiobutton2"
+ text: "radiobutton2"
+ KeyNavigation.up: radiobutton1
+ KeyNavigation.down: rangeslider
+ KeyNavigation.left: radiobutton1
+ KeyNavigation.right: spinbox
+ }
+ }
+ }
+ RangeSlider {
+ id: rangeslider
+ objectName: "rangeslider"
+ first.handle.objectName: "rangeslider.first"
+ second.handle.objectName: "rangeslider.second"
+ KeyNavigation.up: radiobutton2
+ KeyNavigation.down: slider
+ }
+ // ScrollBar
+ ScrollIndicator {
+ id: scrollindicator
+ objectName: "scrollindicator"
+ }
+ Slider {
+ id: slider
+ objectName: "slider"
+ value: 0.5
+ KeyNavigation.up: rangeslider
+ KeyNavigation.down: swtich
+ }
+ SpinBox {
+ id: spinbox
+ objectName: "spinbox"
+ value: 50
+ KeyNavigation.left: radiobutton2
+ KeyNavigation.right: swtich
+ }
+ // StackView
+ Switch {
+ id: swtich // switch
+ objectName: "switch"
+ text: "switch"
+ KeyNavigation.up: slider
+ KeyNavigation.down: tabbutton1
+ KeyNavigation.left: spinbox
+ KeyNavigation.right: tabbutton1
+ }
+ TabBar {
+ width: parent.width
+ id: tabbar
+ objectName: "tabbar"
+ TabButton {
+ id: tabbutton1
+ objectName: "tabbutton1"
+ text: "tabbutton1"
+ KeyNavigation.up: swtich
+ KeyNavigation.down: tabbutton2
+ KeyNavigation.left: swtich
+ KeyNavigation.right: tabbutton2
+ }
+ TabButton {
+ id: tabbutton2
+ objectName: "tabbutton2"
+ text: "tabbutton2"
+ KeyNavigation.up: tabbutton1
+ KeyNavigation.down: textfield
+ KeyNavigation.left: tabbutton1
+ KeyNavigation.right: toolbutton
+ }
+ }
+ TextField {
+ id: textfield
+ objectName: "textfield"
+ text: "abc"
+ KeyNavigation.up: tabbutton2
+ KeyNavigation.down: toolbutton
+ }
+ ToolBar {
+ width: parent.width
+ id: toolbar
+ objectName: "toolbar"
+ ToolButton {
+ id: toolbutton
+ objectName: "toolbutton"
+ text: "toolbutton"
+ KeyNavigation.up: textfield
+ KeyNavigation.down: textarea
+ KeyNavigation.left: tabbutton2
+ KeyNavigation.right: button1
+ }
+ }
+ TextArea {
+ id: textarea
+ objectName: "textarea"
+ text: "abc"
+ KeyNavigation.up: toolbutton
+ KeyNavigation.down: button1
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/focus/data/visualFocus.qml b/tests/auto/quickcontrols2/focus/data/visualFocus.qml
new file mode 100644
index 0000000000..2f516be767
--- /dev/null
+++ b/tests/auto/quickcontrols2/focus/data/visualFocus.qml
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Column {
+ width: 400
+ height: 400
+ Button {
+ text: "Button"
+ property bool showFocus: visualFocus
+ }
+ TextField {
+ text: "TextField"
+ }
+}
diff --git a/tests/auto/quickcontrols2/focus/tst_focus.cpp b/tests/auto/quickcontrols2/focus/tst_focus.cpp
new file mode 100644
index 0000000000..daa6a9991a
--- /dev/null
+++ b/tests/auto/quickcontrols2/focus/tst_focus.cpp
@@ -0,0 +1,549 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QtTest/QSignalSpy>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/qpointingdevice.h>
+#include <QtGui/qstylehints.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickcontrol_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+
+using namespace QQuickVisualTestUtils;
+using namespace QQuickControlsTestUtils;
+
+class tst_focus : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_focus();
+
+private slots:
+ void initTestCase() override;
+
+ void navigation_data();
+ void navigation();
+
+ void policy_data();
+ void policy();
+
+ void reason();
+
+ void visualFocus();
+
+ void scope_data();
+ void scope();
+};
+
+tst_focus::tst_focus()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_focus::initTestCase()
+{
+ QQuickStyle::setStyle("Basic");
+ QQmlDataTest::initTestCase();
+}
+
+void tst_focus::navigation_data()
+{
+ QTest::addColumn<Qt::Key>("key");
+ QTest::addColumn<QString>("testFile");
+ QTest::addColumn<Qt::TabFocusBehavior>("behavior");
+ QTest::addColumn<QStringList>("order");
+
+ QTest::newRow("tab-all-controls") << Qt::Key_Tab << QString("activeFocusOnTab.qml") << Qt::TabFocusAllControls << (QStringList() << "button2" << "checkbox" << "checkbox1" << "checkbox2" << "radiobutton" << "radiobutton1" << "radiobutton2" << "rangeslider.first" << "rangeslider.second" << "slider" << "spinbox" << "switch" << "tabbutton1" << "tabbutton2" << "textfield" << "toolbutton" << "textarea" << "button1");
+ QTest::newRow("backtab-all-controls") << Qt::Key_Backtab << QString("activeFocusOnTab.qml") << Qt::TabFocusAllControls << (QStringList() << "textarea" << "toolbutton" << "textfield" << "tabbutton2" << "tabbutton1" << "switch" << "spinbox" << "slider" << "rangeslider.second" << "rangeslider.first" << "radiobutton2" << "radiobutton1" << "radiobutton" << "checkbox2" << "checkbox1" << "checkbox" << "button2" << "button1");
+
+ QTest::newRow("tab-text-controls") << Qt::Key_Tab << QString("activeFocusOnTab.qml") << Qt::TabFocusTextControls << (QStringList() << "spinbox" << "textfield" << "textarea");
+ QTest::newRow("backtab-text-controls") << Qt::Key_Backtab << QString("activeFocusOnTab.qml") << Qt::TabFocusTextControls << (QStringList() << "textarea" << "textfield" << "spinbox");
+
+ QTest::newRow("key-up") << Qt::Key_Up << QString("keyNavigation.qml") << Qt::TabFocusAllControls << (QStringList() << "textarea" << "toolbutton" << "textfield" << "tabbutton2" << "tabbutton1" << "switch" << "slider" << "rangeslider.first" << "radiobutton2" << "radiobutton1" << "radiobutton" << "checkbox2" << "checkbox1" << "checkbox" << "button2" << "button1");
+ QTest::newRow("key-down") << Qt::Key_Down << QString("keyNavigation.qml") << Qt::TabFocusAllControls << (QStringList() << "button2" << "checkbox" << "checkbox1" << "checkbox2" << "radiobutton" << "radiobutton1" << "radiobutton2" << "rangeslider.first" << "slider" << "switch" << "tabbutton1" << "tabbutton2" << "textfield" << "toolbutton" << "textarea" << "button1");
+ QTest::newRow("key-left") << Qt::Key_Left << QString("keyNavigation.qml") << Qt::TabFocusAllControls << (QStringList() << "toolbutton" << "tabbutton2" << "tabbutton1" << "switch" << "spinbox" << "radiobutton2" << "radiobutton1" << "radiobutton" << "checkbox2" << "checkbox1" << "checkbox" << "button2" << "button1");
+ QTest::newRow("key-right") << Qt::Key_Right << QString("keyNavigation.qml") << Qt::TabFocusAllControls << (QStringList() << "button2" << "checkbox" << "checkbox1" << "checkbox2" << "radiobutton" << "radiobutton1" << "radiobutton2" << "spinbox" << "switch" << "tabbutton1" << "tabbutton2" << "toolbutton" << "button1");
+}
+
+void tst_focus::navigation()
+{
+ QFETCH(Qt::Key, key);
+ QFETCH(QString, testFile);
+ QFETCH(Qt::TabFocusBehavior, behavior);
+ QFETCH(QStringList, order);
+
+ QGuiApplication::styleHints()->setTabFocusBehavior(behavior);
+
+ QQuickView view;
+ view.contentItem()->setObjectName("contentItem");
+
+ view.setSource(testFileUrl(testFile));
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+ QVERIFY(QGuiApplication::focusWindow() == &view);
+
+ for (const QString &name : qAsConst(order)) {
+ QKeyEvent event(QEvent::KeyPress, key, Qt::NoModifier);
+ QGuiApplication::sendEvent(&view, &event);
+ QVERIFY(event.isAccepted());
+
+ QQuickItem *item = findItem<QQuickItem>(view.rootObject(), name);
+ QVERIFY2(item, qPrintable(name));
+ QVERIFY2(item->hasActiveFocus(), qPrintable(QString("expected: '%1', actual: '%2'").arg(name).arg(view.activeFocusItem() ? view.activeFocusItem()->objectName() : "null")));
+ }
+
+ QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusBehavior(-1));
+}
+
+void tst_focus::policy_data()
+{
+ QTest::addColumn<QString>("name");
+
+ QTest::newRow("Control") << "Control";
+ QTest::newRow("ComboBox") << "ComboBox";
+ QTest::newRow("Button") << "Button";
+ QTest::newRow("Slider") << "Slider";
+ QTest::newRow("ScrollBar") << "ScrollBar";
+}
+
+void tst_focus::policy()
+{
+ QFETCH(QString, name);
+
+ QQmlEngine engine;
+ QScopedPointer<QPointingDevice> device(QTest::createTouchDevice());
+ QQmlComponent component(&engine);
+ component.setData(QString("import QtQuick.Controls; ApplicationWindow { width: 100; height: 100; %1 { anchors.fill: parent } }").arg(name).toUtf8(), QUrl());
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY(window);
+
+ QQuickControl *control = qobject_cast<QQuickControl *>(window->contentItem()->childItems().first());
+ QVERIFY(control);
+
+ QVERIFY(!control->hasActiveFocus());
+ QVERIFY(!control->hasVisualFocus());
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ control->setFocusPolicy(Qt::NoFocus);
+ QCOMPARE(control->focusPolicy(), Qt::NoFocus);
+
+ // Qt::TabFocus vs. QQuickItem::activeFocusOnTab
+ control->setActiveFocusOnTab(true);
+ QCOMPARE(control->focusPolicy(), Qt::TabFocus);
+ control->setActiveFocusOnTab(false);
+ QCOMPARE(control->focusPolicy(), Qt::NoFocus);
+
+ control->setFocusPolicy(Qt::TabFocus);
+ QCOMPARE(control->focusPolicy(), Qt::TabFocus);
+ QCOMPARE(control->activeFocusOnTab(), true);
+
+ // Qt::TabFocus
+ QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusAllControls);
+ QTest::keyClick(window.data(), Qt::Key_Tab);
+ QVERIFY(control->hasActiveFocus());
+ QVERIFY(control->hasVisualFocus());
+ QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusBehavior(-1));
+
+ // reset
+ control->setFocus(false);
+ QVERIFY(!control->hasActiveFocus());
+
+ // Qt::ClickFocus (mouse)
+ control->setFocusPolicy(Qt::NoFocus);
+ control->setAcceptedMouseButtons(Qt::LeftButton);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(control->width() / 2, control->height() / 2));
+ QVERIFY(!control->hasActiveFocus());
+ QVERIFY(!control->hasVisualFocus());
+
+ control->setFocusPolicy(Qt::ClickFocus);
+ QCOMPARE(control->focusPolicy(), Qt::ClickFocus);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(control->width() / 2, control->height() / 2));
+ QVERIFY(control->hasActiveFocus());
+ QVERIFY(!control->hasVisualFocus());
+
+ // reset
+ control->setFocus(false);
+ QVERIFY(!control->hasActiveFocus());
+
+ // Qt::ClickFocus (touch)
+ control->setFocusPolicy(Qt::NoFocus);
+ QTest::touchEvent(window.data(), device.data()).press(0, QPoint(control->width() / 2, control->height() / 2));
+ QTest::touchEvent(window.data(), device.data()).release(0, QPoint(control->width() / 2, control->height() / 2));
+ QVERIFY(!control->hasActiveFocus());
+ QVERIFY(!control->hasVisualFocus());
+
+ control->setFocusPolicy(Qt::ClickFocus);
+ QCOMPARE(control->focusPolicy(), Qt::ClickFocus);
+ QTest::touchEvent(window.data(), device.data()).press(0, QPoint(control->width() / 2, control->height() / 2));
+ QTest::touchEvent(window.data(), device.data()).release(0, QPoint(control->width() / 2, control->height() / 2));
+ QVERIFY(control->hasActiveFocus());
+ QVERIFY(!control->hasVisualFocus());
+
+ // reset
+ control->setFocus(false);
+ QVERIFY(!control->hasActiveFocus());
+
+ // Qt::WheelFocus
+ QWheelEvent wheelEvent(QPointF(control->width() / 2, control->height() / 2), QPointF(),
+ QPoint(), QPoint(0, 10), Qt::NoButton, Qt::NoModifier,
+ Qt::NoScrollPhase, false);
+ QGuiApplication::sendEvent(control, &wheelEvent);
+ QVERIFY(!control->hasActiveFocus());
+ QVERIFY(!control->hasVisualFocus());
+
+ control->setFocusPolicy(Qt::WheelFocus);
+ QCOMPARE(control->focusPolicy(), Qt::WheelFocus);
+
+ QGuiApplication::sendEvent(control, &wheelEvent);
+ QVERIFY(control->hasActiveFocus());
+ QVERIFY(!control->hasVisualFocus());
+}
+
+void tst_focus::reason()
+{
+ QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusAllControls);
+ auto resetTabFocusBehavior = qScopeGuard([]{
+ QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusBehavior(-1));
+ });
+
+ QQuickView view;
+ view.setSource(testFileUrl("focusReason.qml"));
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickControl *control = view.findChild<QQuickControl *>("control");
+ QQuickControl *combobox = view.findChild<QQuickControl *>("combobox");
+ QQuickControl *editcombo = view.findChild<QQuickControl *>("editcombo");
+ QQuickControl *spinbox = view.findChild<QQuickControl *>("spinbox");
+ QQuickControl *customText = view.findChild<QQuickControl *>("customText");
+ QQuickControl *customItem = view.findChild<QQuickControl *>("customItem");
+ // not a QQuickControl subclass
+ QQuickItem *textfield = view.findChild<QQuickItem *>("textfield");
+
+ // helper for clicking into a control
+ const auto itemCenter = [](const QQuickItem *item) -> QPoint {
+ return item->mapToScene(item->clipRect().center()).toPoint();
+ };
+
+ QVERIFY(control);
+ QVERIFY(combobox);
+ QVERIFY(editcombo);
+ QVERIFY(spinbox);
+ QVERIFY(textfield);
+ QVERIFY(customText);
+ QVERIFY(customItem);
+
+ // setting focusPolicy to Strong/WheelFocus doesn't implicitly turn on event delivery
+ customText->setAcceptedMouseButtons(Qt::LeftButton);
+ customItem->setAcceptedMouseButtons(Qt::LeftButton);
+ customItem->setWheelEnabled(true);
+
+ // window activation -> ActiveWindowFocusReason
+ QVERIFY(control->hasFocus());
+ QVERIFY(control->hasActiveFocus());
+ if (control->focusReason() != Qt::ActiveWindowFocusReason
+ && QStringList{"windows", "offscreen"}.contains(QGuiApplication::platformName())) {
+ QEXPECT_FAIL("", "On Windows and offscreen platforms, window activation does not set focus reason", Continue);
+ }
+ QCOMPARE(control->focusReason(), Qt::ActiveWindowFocusReason);
+
+ // test setter/getter
+ control->setFocus(false, Qt::MouseFocusReason);
+ QCOMPARE(control->focusReason(), Qt::MouseFocusReason);
+ control->setFocus(true, Qt::TabFocusReason);
+ QCOMPARE(control->focusReason(), Qt::TabFocusReason);
+ control->setFocus(false, Qt::BacktabFocusReason);
+ QCOMPARE(control->focusReason(), Qt::BacktabFocusReason);
+ control->forceActiveFocus(Qt::ShortcutFocusReason);
+ QCOMPARE(control->focusReason(), Qt::ShortcutFocusReason);
+ control->setFocusReason(Qt::PopupFocusReason);
+ QCOMPARE(control->focusReason(), Qt::PopupFocusReason);
+
+ // programmatic focus changes
+ combobox->setFocus(true, Qt::OtherFocusReason);
+ QCOMPARE(control->focusReason(), Qt::OtherFocusReason);
+
+ QVERIFY(combobox->hasFocus());
+ QVERIFY(combobox->hasActiveFocus());
+ QCOMPARE(combobox->focusReason(), Qt::OtherFocusReason);
+
+ // tab focus -> TabFocusReason
+ QTest::keyClick(&view, Qt::Key_Tab);
+ QVERIFY(editcombo->hasFocus());
+ QVERIFY(editcombo->hasActiveFocus());
+ QCOMPARE(qApp->focusObject(), editcombo->contentItem());
+ QCOMPARE(combobox->focusReason(), Qt::TabFocusReason);
+ QCOMPARE(editcombo->focusReason(), Qt::TabFocusReason);
+ editcombo->setFocusReason(Qt::NoFocusReason); // reset so that we can verify that focusOut sets it
+
+ QTest::keyClick(&view, Qt::Key_Tab);
+ QVERIFY(spinbox->hasFocus());
+ QVERIFY(spinbox->hasActiveFocus());
+ QCOMPARE(qApp->focusObject(), spinbox->contentItem());
+ QCOMPARE(editcombo->focusReason(), Qt::TabFocusReason);
+ QCOMPARE(spinbox->focusReason(), Qt::TabFocusReason);
+ spinbox->setFocusReason(Qt::NoFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab);
+ QVERIFY(customText->hasFocus());
+ QVERIFY(customText->hasActiveFocus());
+ QCOMPARE(qApp->focusObject(), customText);
+ QCOMPARE(spinbox->focusReason(), Qt::TabFocusReason);
+ QCOMPARE(customText->focusReason(), Qt::TabFocusReason);
+ customText->setFocusReason(Qt::NoFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab);
+ QCOMPARE(qApp->focusObject(), customItem);
+ QVERIFY(customItem->hasFocus());
+ QVERIFY(customItem->hasActiveFocus());
+ QCOMPARE(customText->focusReason(), Qt::TabFocusReason);
+ QCOMPARE(customItem->focusReason(), Qt::TabFocusReason);
+ customItem->setFocusReason(Qt::NoFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab);
+ QVERIFY(textfield->hasFocus());
+ QVERIFY(textfield->hasActiveFocus());
+ QCOMPARE(qApp->focusObject(), textfield);
+ QCOMPARE(customItem->focusReason(), Qt::TabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab);
+ QVERIFY(control->hasFocus());
+ QVERIFY(control->hasActiveFocus());
+ QCOMPARE(control->focusReason(), Qt::TabFocusReason);
+
+ // backtab -> BacktabFocusReason
+ QTest::keyClick(&view, Qt::Key_Tab, Qt::ShiftModifier);
+ QVERIFY(textfield->hasFocus());
+ QCOMPARE(control->focusReason(), Qt::BacktabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab, Qt::ShiftModifier);
+ QVERIFY(customItem->hasFocus());
+ QCOMPARE(customItem->focusReason(), Qt::BacktabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab, Qt::ShiftModifier);
+ QVERIFY(customText->hasFocus());
+ QCOMPARE(customText->focusReason(), Qt::BacktabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab, Qt::ShiftModifier);
+ QVERIFY(spinbox->hasFocus());
+ QCOMPARE(spinbox->focusReason(), Qt::BacktabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab, Qt::ShiftModifier);
+ QVERIFY(editcombo->hasFocus());
+ QCOMPARE(editcombo->focusReason(), Qt::BacktabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab, Qt::ShiftModifier);
+ QVERIFY(combobox->hasFocus());
+ QCOMPARE(combobox->focusReason(), Qt::BacktabFocusReason);
+
+ // click focus -> MouseFocusReason
+ QTest::mouseClick(&view, Qt::LeftButton, {}, itemCenter(editcombo));
+ QTRY_VERIFY(editcombo->hasFocus());
+ QVERIFY(editcombo->contentItem()->hasFocus());
+ QVERIFY(editcombo->hasActiveFocus());
+ QVERIFY(editcombo->contentItem()->hasActiveFocus());
+ QCOMPARE(editcombo->focusReason(), Qt::MouseFocusReason);
+ editcombo->setFocusReason(Qt::NoFocusReason);
+
+ QTest::mouseClick(&view, Qt::LeftButton, {}, itemCenter(combobox)); // opens popup
+ QTest::mouseClick(&view, Qt::LeftButton, {}, itemCenter(combobox)); // closes popup
+
+ QVERIFY(combobox->hasFocus());
+ QVERIFY(combobox->hasActiveFocus());
+ QCOMPARE(editcombo->focusReason(), Qt::MouseFocusReason);
+ QCOMPARE(combobox->focusReason(), Qt::MouseFocusReason);
+ combobox->setFocusReason(Qt::NoFocusReason);
+
+ QTest::mouseClick(&view, Qt::LeftButton, {}, itemCenter(spinbox));
+ QVERIFY(spinbox->hasFocus());
+ QVERIFY(spinbox->hasActiveFocus());
+ QCOMPARE(combobox->focusReason(), Qt::MouseFocusReason);
+ QCOMPARE(spinbox->focusReason(), Qt::MouseFocusReason);
+ spinbox->setFocusReason(Qt::NoFocusReason);
+
+ QTest::mouseClick(&view, Qt::LeftButton, {}, itemCenter(customText));
+ QTRY_VERIFY2(customText->contentItem()->hasFocus(), qPrintable(qApp->focusObject()->objectName()));
+ QVERIFY(customText->contentItem()->hasActiveFocus());
+ QCOMPARE(spinbox->focusReason(), Qt::MouseFocusReason);
+ QCOMPARE(customText->focusReason(), Qt::MouseFocusReason);
+ customText->setFocusReason(Qt::NoFocusReason);
+
+ QTest::mouseClick(&view, Qt::LeftButton, {}, itemCenter(customItem));
+ QVERIFY(customItem->hasFocus());
+ QVERIFY(customItem->hasActiveFocus());
+ QCOMPARE(customText->focusReason(), Qt::MouseFocusReason);
+ QCOMPARE(customItem->focusReason(), Qt::MouseFocusReason);
+ customItem->setFocusReason(Qt::NoFocusReason);
+
+ QTest::mouseClick(&view, Qt::LeftButton, {}, itemCenter(textfield));
+ QCOMPARE(customItem->focusReason(), Qt::MouseFocusReason);
+ customItem->setFocusReason(Qt::NoFocusReason);
+ customText->setFocusReason(Qt::NoFocusReason);
+
+ // Wheel focus -> MouseFocusReason
+ QWheelEvent wheelEvent(QPointF(customItem->width() / 2, customItem->height() / 2), QPointF(),
+ QPoint(), QPoint(0, 10), Qt::NoButton, Qt::NoModifier,
+ Qt::NoScrollPhase, false);
+ QGuiApplication::sendEvent(customItem, &wheelEvent);
+ QVERIFY(customItem->hasActiveFocus());
+ QCOMPARE(customItem->focusReason(), Qt::MouseFocusReason);
+
+ // Popup opens -> PopupFocusReason
+ QTest::mouseClick(&view, Qt::RightButton, {}, itemCenter(control));
+ QTRY_VERIFY(!customItem->hasActiveFocus());
+ QCOMPARE(customItem->focusReason(), Qt::PopupFocusReason);
+ QTest::keyClick(&view, Qt::Key_Escape); // close the popup
+}
+
+void tst_focus::visualFocus()
+{
+ QQuickView view;
+ view.setSource(testFileUrl("visualFocus.qml"));
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickItem *column = view.rootObject();
+ QVERIFY(column);
+ QCOMPARE(column->childItems().count(), 2);
+
+ QQuickControl *button = qobject_cast<QQuickControl *>(column->childItems().first());
+ QVERIFY(button);
+
+ QQuickItem *textfield = column->childItems().last();
+ QVERIFY(textfield);
+
+ button->forceActiveFocus(Qt::TabFocusReason);
+ QVERIFY(button->hasActiveFocus());
+ QVERIFY(button->hasVisualFocus());
+ QVERIFY(button->property("showFocus").toBool());
+
+ QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, QPoint(textfield->x() + textfield->width() / 2, textfield->y() + textfield->height() / 2));
+ QVERIFY(!button->hasActiveFocus());
+ QVERIFY(!button->hasVisualFocus());
+ QVERIFY(!button->property("showFocus").toBool());
+}
+
+void tst_focus::scope_data()
+{
+ QTest::addColumn<QString>("name");
+
+ QTest::newRow("Frame") << "Frame";
+ QTest::newRow("GroupBox") << "Frame";
+ QTest::newRow("Page") << "Page";
+ QTest::newRow("Pane") << "Pane";
+ QTest::newRow("StackView") << "StackView";
+}
+
+void tst_focus::scope()
+{
+ QFETCH(QString, name);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QString("import QtQuick; import QtQuick.Controls; ApplicationWindow { property alias child: child; width: 100; height: 100; %1 { anchors.fill: parent; Item { id: child; width: 10; height: 10 } } }").arg(name).toUtf8(), QUrl());
+
+ QScopedPointer<QPointingDevice> device(QTest::createTouchDevice());
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY2(window, qPrintable(component.errorString()));
+
+ QQuickControl *control = qobject_cast<QQuickControl *>(window->contentItem()->childItems().first());
+ QVERIFY(control);
+
+ control->setFocusPolicy(Qt::WheelFocus);
+ control->setAcceptedMouseButtons(Qt::LeftButton);
+
+ QQuickItem *child = window->property("child").value<QQuickItem *>();
+ QVERIFY(child);
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+
+ child->forceActiveFocus();
+ QVERIFY(child->hasActiveFocus());
+ QVERIFY(control->hasActiveFocus());
+
+ // Qt::ClickFocus (mouse)
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(control->width() / 2, control->height() / 2));
+ QVERIFY(!child->hasActiveFocus());
+ QVERIFY(control->hasActiveFocus());
+
+ // reset
+ child->forceActiveFocus();
+ QVERIFY(child->hasActiveFocus());
+ QVERIFY(control->hasActiveFocus());
+
+ // Qt::ClickFocus (touch)
+ QTest::touchEvent(window.data(), device.data()).press(0, QPoint(control->width() / 2, control->height() / 2));
+ QTest::touchEvent(window.data(), device.data()).release(0, QPoint(control->width() / 2, control->height() / 2));
+ QVERIFY(!child->hasActiveFocus());
+ QVERIFY(control->hasActiveFocus());
+
+ // reset
+ child->forceActiveFocus();
+ QVERIFY(child->hasActiveFocus());
+ QVERIFY(control->hasActiveFocus());
+
+ // Qt::WheelFocus
+ QWheelEvent wheelEvent(QPointF(control->width() / 2, control->height() / 2), QPointF(),
+ QPoint(), QPoint(0, 10), Qt::NoButton, Qt::NoModifier,
+ Qt::NoScrollPhase, false);
+ QGuiApplication::sendEvent(control, &wheelEvent);
+ QVERIFY(!child->hasActiveFocus());
+ QVERIFY(control->hasActiveFocus());
+}
+
+QTEST_MAIN(tst_focus)
+
+#include "tst_focus.moc"
diff --git a/tests/auto/quickcontrols2/font/CMakeLists.txt b/tests/auto/quickcontrols2/font/CMakeLists.txt
new file mode 100644
index 0000000000..ce782668fb
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/CMakeLists.txt
@@ -0,0 +1,47 @@
+# Generated from font.pro.
+
+#####################################################################
+## tst_font Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_font
+ SOURCES
+ tst_font.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:font.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_font CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_font CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/font/data/font-appwindow-custom.qml b/tests/auto/quickcontrols2/font/data/font-appwindow-custom.qml
new file mode 100644
index 0000000000..9f82079e05
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/font-appwindow-custom.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ font.capitalization: Font.AllUppercase
+ font.family: "Courier"
+ font.italic: true
+ font.pixelSize: 60
+ font.strikeout: true
+ font.underline: true
+ font.weight: Font.DemiBold
+}
diff --git a/tests/auto/quickcontrols2/font/data/font-appwindow-default.qml b/tests/auto/quickcontrols2/font/data/font-appwindow-default.qml
new file mode 100644
index 0000000000..9f2c34fe17
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/font-appwindow-default.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+}
diff --git a/tests/auto/quickcontrols2/font/data/font-control-custom.qml b/tests/auto/quickcontrols2/font/data/font-control-custom.qml
new file mode 100644
index 0000000000..8fcfc68612
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/font-control-custom.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Control {
+ font.capitalization: Font.AllUppercase
+ font.family: "Courier"
+ font.italic: true
+ font.pixelSize: 60
+ font.strikeout: true
+ font.underline: true
+ font.weight: Font.DemiBold
+}
diff --git a/tests/auto/quickcontrols2/font/data/font-control-default.qml b/tests/auto/quickcontrols2/font/data/font-control-default.qml
new file mode 100644
index 0000000000..48afa021cd
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/font-control-default.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Control {
+}
diff --git a/tests/auto/quickcontrols2/font/data/font-popup-custom.qml b/tests/auto/quickcontrols2/font/data/font-popup-custom.qml
new file mode 100644
index 0000000000..e3983bf518
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/font-popup-custom.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Popup {
+ font.capitalization: Font.AllUppercase
+ font.family: "Courier"
+ font.italic: true
+ font.pixelSize: 60
+ font.strikeout: true
+ font.underline: true
+ font.weight: Font.DemiBold
+}
diff --git a/tests/auto/quickcontrols2/font/data/font-popup-default.qml b/tests/auto/quickcontrols2/font/data/font-popup-default.qml
new file mode 100644
index 0000000000..77676baccf
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/font-popup-default.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Popup {
+}
diff --git a/tests/auto/quickcontrols2/font/data/inheritance-childcontrol.qml b/tests/auto/quickcontrols2/font/data/inheritance-childcontrol.qml
new file mode 100644
index 0000000000..896354dfb0
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/inheritance-childcontrol.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property alias control: control
+ property alias child: child
+ property alias grandChild: grandChild
+
+ Item {
+ Control {
+ id: control
+
+ Control {
+ id: child
+
+ Item {
+ Control {
+ id: grandChild
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/data/inheritance-childpopup.qml b/tests/auto/quickcontrols2/font/data/inheritance-childpopup.qml
new file mode 100644
index 0000000000..7896a558e9
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/inheritance-childpopup.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property alias control: control
+ property alias child: child
+ property alias grandChild: grandChild
+
+ Item {
+ Popup {
+ id: control
+
+ Control {
+ id: child
+
+ Item {
+ Control {
+ id: grandChild
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/data/inheritance-control.qml b/tests/auto/quickcontrols2/font/data/inheritance-control.qml
new file mode 100644
index 0000000000..eb534180a8
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/inheritance-control.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property alias control: control
+ property alias child: child
+ property alias grandChild: grandChild
+
+ Control {
+ id: control
+
+ Control {
+ id: child
+
+ Item {
+ Control {
+ id: grandChild
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/data/inheritance-dynamicchildcontrol.qml b/tests/auto/quickcontrols2/font/data/inheritance-dynamicchildcontrol.qml
new file mode 100644
index 0000000000..0a4e5bc664
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/inheritance-dynamicchildcontrol.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property Control control
+ property Control child
+ property Control grandChild
+
+ Item {
+ id: childItem
+ }
+
+ Component {
+ id: component
+ Control { }
+ }
+
+ Component.onCompleted: {
+ control = component.createObject(childItem)
+ child = component.createObject(control)
+ grandChild = component.createObject(child)
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/data/inheritance-dynamicchildpopup.qml b/tests/auto/quickcontrols2/font/data/inheritance-dynamicchildpopup.qml
new file mode 100644
index 0000000000..0e799d47f0
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/inheritance-dynamicchildpopup.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property Popup control
+ property Control child
+ property Control grandChild
+
+ Item {
+ id: childItem
+ }
+
+ Component {
+ id: popupComponent
+ Popup { }
+ }
+
+ Component {
+ id: controlComponent
+ Control { }
+ }
+
+ Component.onCompleted: {
+ control = popupComponent.createObject(childItem)
+ child = controlComponent.createObject(control.contentItem)
+ grandChild = controlComponent.createObject(child)
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/data/inheritance-dynamiccontrol.qml b/tests/auto/quickcontrols2/font/data/inheritance-dynamiccontrol.qml
new file mode 100644
index 0000000000..058d5b8b95
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/inheritance-dynamiccontrol.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property Control control
+ property Control child
+ property Control grandChild
+
+ Component {
+ id: component
+ Control { }
+ }
+
+ Component.onCompleted: {
+ control = component.createObject(contentItem)
+ child = component.createObject(control)
+ grandChild = component.createObject(child)
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/data/inheritance-dynamicpopup.qml b/tests/auto/quickcontrols2/font/data/inheritance-dynamicpopup.qml
new file mode 100644
index 0000000000..429669c7b2
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/inheritance-dynamicpopup.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property Popup control
+ property Control child
+ property Control grandChild
+
+ Component {
+ id: popupComponent
+ Popup { }
+ }
+
+ Component {
+ id: controlComponent
+ Control { }
+ }
+
+ Component.onCompleted: {
+ control = popupComponent.createObject(window)
+ child = controlComponent.createObject(control.contentItem)
+ grandChild = controlComponent.createObject(child)
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/data/inheritance-popup.qml b/tests/auto/quickcontrols2/font/data/inheritance-popup.qml
new file mode 100644
index 0000000000..cd2aebb55a
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/inheritance-popup.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property alias control: control
+ property alias child: child
+ property alias grandChild: grandChild
+
+ Popup {
+ id: control
+
+ Control {
+ id: child
+
+ Item {
+ Control {
+ id: grandChild
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/data/listview.qml b/tests/auto/quickcontrols2/font/data/listview.qml
new file mode 100644
index 0000000000..7c37258519
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/data/listview.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 200
+ height: 200
+
+ property alias listView: listView
+
+ font.pixelSize: 55
+
+ ListView {
+ id: listView
+ anchors.fill: parent
+ model: 1
+ delegate: Column {
+ property alias control: control
+ property alias label: label
+ property alias textarea: textarea
+ property alias textfield: textfield
+
+ Control { id: control }
+ Label { id: label }
+ TextArea { id: textarea }
+ TextField { id: textfield }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/font/tst_font.cpp b/tests/auto/quickcontrols2/font/tst_font.cpp
new file mode 100644
index 0000000000..a3adcfd6c4
--- /dev/null
+++ b/tests/auto/quickcontrols2/font/tst_font.cpp
@@ -0,0 +1,369 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+
+#include <QtGui/qfont.h>
+#include <QtGui/qpa/qplatformtheme.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickcontrol_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+class tst_font : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_font();
+
+private slots:
+ void systemFont();
+
+ void font_data();
+ void font();
+
+ void inheritance_data();
+ void inheritance();
+
+ void defaultFont_data();
+ void defaultFont();
+
+ void listView_data();
+ void listView();
+};
+
+static QFont testFont()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick; import QtQuick.Controls; Text { }", QUrl());
+
+ QScopedPointer<QObject> object(component.create());
+ Q_ASSERT_X(!object.isNull(), "testFont", qPrintable(component.errorString()));
+
+ QVariant var = object->property("font");
+ Q_ASSERT_X(var.isValid(), "testFont", var.typeName());
+ return var.value<QFont>();
+}
+
+tst_font::tst_font()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+ QQuickStyle::setStyle("Basic");
+}
+
+void tst_font::systemFont()
+{
+ QSKIP("QTBUG-70063: qmlClearTypeRegistrations() call causes crash");
+
+ const QFont *originalSystemFont = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::SystemFont);
+ if (!originalSystemFont)
+ QSKIP("Cannot test the system font on a minimal platform");
+
+ const QFont fontBefore = testFont();
+ QCOMPARE(fontBefore, *originalSystemFont);
+
+ qmlClearTypeRegistrations();
+ delete QGuiApplicationPrivate::app_font;
+ QGuiApplicationPrivate::app_font = nullptr;
+
+ const QFont appFont = QGuiApplication::font();
+ QCOMPARE(appFont, *originalSystemFont);
+
+ const QFont fontAfter = testFont();
+ QCOMPARE(fontAfter, *originalSystemFont);
+}
+
+void tst_font::font_data()
+{
+ QTest::addColumn<QString>("testFile");
+ QTest::addColumn<QFont>("expectedFont");
+
+ QTest::newRow("Control") << "font-control-default.qml" << QFont();
+ QTest::newRow("AppWindow") << "font-appwindow-default.qml" << QFont();
+ QTest::newRow("Popup") << "font-popup-default.qml" << QFont();
+
+ QFont customFont;
+ customFont.setCapitalization(QFont::AllUppercase);
+ customFont.setFamilies(QStringList{QLatin1String("Courier")});
+ customFont.setItalic(true);
+ customFont.setPixelSize(60);
+ customFont.setStrikeOut(true);
+ customFont.setUnderline(true);
+ customFont.setWeight(QFont::DemiBold);
+
+ QTest::newRow("Control:custom") << "font-control-custom.qml" << customFont;
+ QTest::newRow("AppWindow:custom") << "font-appwindow-custom.qml" << customFont;
+ QTest::newRow("Popup:custom") << "font-popup-custom.qml" << customFont;
+}
+
+void tst_font::font()
+{
+ QFETCH(QString, testFile);
+ QFETCH(QFont, expectedFont);
+
+ if (QSysInfo::productType().compare(QLatin1String("osx"), Qt::CaseInsensitive) == 0
+ && qgetenv("QTEST_ENVIRONMENT").split(' ').contains("CI")) {
+ QSKIP("This test crashes on macOS: QTBUG-70063");
+ }
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl(testFile));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QVariant var = object->property("font");
+ QVERIFY(var.isValid());
+
+ QFont actualFont = var.value<QFont>();
+ QCOMPARE(actualFont, expectedFont);
+}
+
+void tst_font::inheritance_data()
+{
+ QTest::addColumn<QString>("testFile");
+
+ QTest::newRow("Control") << "inheritance-control.qml";
+ QTest::newRow("Child Control") << "inheritance-childcontrol.qml";
+ QTest::newRow("Dynamic Control") << "inheritance-dynamiccontrol.qml";
+ QTest::newRow("Dynamic Child Control") << "inheritance-dynamicchildcontrol.qml";
+
+ QTest::newRow("Popup") << "inheritance-popup.qml";
+ QTest::newRow("Child Popup") << "inheritance-childpopup.qml";
+ QTest::newRow("Dynamic Popup") << "inheritance-dynamicpopup.qml";
+ QTest::newRow("Dynamic Child Popup") << "inheritance-dynamicchildpopup.qml";
+}
+
+void tst_font::inheritance()
+{
+ QFETCH(QString, testFile);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl(testFile));
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY2(!window.isNull(), qPrintable(component.errorString()));
+
+ QObject *control = window->property("control").value<QObject *>();
+ QObject *child = window->property("child").value<QObject *>();
+ QObject *grandChild = window->property("grandChild").value<QObject *>();
+ QVERIFY(control && child && grandChild);
+
+ QCOMPARE(window->font(), QFont());
+
+ QCOMPARE(control->property("font").value<QFont>(), QFont());
+ QCOMPARE(child->property("font").value<QFont>(), QFont());
+ QCOMPARE(grandChild->property("font").value<QFont>(), QFont());
+
+ QFont childFont;
+ childFont.setFamilies(QStringList{QLatin1String("Arial")});
+ childFont.setPixelSize(80);
+ childFont.setItalic(true);
+ child->setProperty("font", childFont);
+ QCOMPARE(child->property("font").value<QFont>(), childFont);
+ QCOMPARE(grandChild->property("font").value<QFont>(), childFont);
+
+ QFont grandChildFont(childFont);
+ grandChildFont.setFamilies(QStringList{QLatin1String("Times New Roman")});
+ grandChildFont.setUnderline(true);
+ grandChild->setProperty("font", grandChildFont);
+ QCOMPARE(child->property("font").value<QFont>(), childFont);
+ QCOMPARE(grandChild->property("font").value<QFont>(), grandChildFont);
+
+ QFont windowFont;
+ windowFont.setWeight(QFont::Thin);
+ window->setFont(windowFont);
+ QCOMPARE(window->font(), windowFont);
+ QCOMPARE(control->property("font").value<QFont>(), windowFont);
+
+ childFont.setWeight(QFont::Thin);
+ QCOMPARE(child->property("font").value<QFont>(), childFont);
+
+ grandChildFont.setWeight(QFont::Thin);
+ QCOMPARE(grandChild->property("font").value<QFont>(), grandChildFont);
+
+ child->setProperty("font", QVariant());
+ QCOMPARE(child->property("font").value<QFont>(), windowFont);
+ QCOMPARE(grandChild->property("font").value<QFont>(), grandChildFont);
+
+ grandChild->setProperty("font", QVariant());
+ QCOMPARE(grandChild->property("font").value<QFont>(), windowFont);
+}
+
+class TestFontTheme : public QQuickTheme
+{
+public:
+ static const int NFonts = QQuickTheme::Tumbler + 1;
+
+ TestFontTheme()
+ {
+ for (int i = 0; i < NFonts; ++i) {
+ QFont font = QFont();
+ font.setPixelSize(i + 10);
+ setFont(static_cast<Scope>(i), font);
+ }
+ }
+};
+
+Q_DECLARE_METATYPE(QQuickTheme::Scope)
+
+void tst_font::defaultFont_data()
+{
+ QTest::addColumn<QString>("control");
+ QTest::addColumn<QQuickTheme::Scope>("scope");
+
+ QTest::newRow("AbstractButton") << "AbstractButton" << QQuickTheme::System;
+ QTest::newRow("ApplicationWindow") << "ApplicationWindow" << QQuickTheme::System;
+ QTest::newRow("Button") << "Button" << QQuickTheme::Button;
+ QTest::newRow("CheckBox") << "CheckBox" << QQuickTheme::CheckBox;
+ QTest::newRow("CheckDelegate") << "CheckDelegate" << QQuickTheme::ListView;
+ QTest::newRow("ComboBox") << "ComboBox" << QQuickTheme::ComboBox;
+ QTest::newRow("Container") << "Container" << QQuickTheme::System;
+ QTest::newRow("Control") << "Control" << QQuickTheme::System;
+ QTest::newRow("Dial") << "Dial" << QQuickTheme::System;
+ QTest::newRow("Dialog") << "Dialog" << QQuickTheme::System;
+ QTest::newRow("DialogButtonBox") << "DialogButtonBox" << QQuickTheme::System;
+ QTest::newRow("Drawer") << "Drawer" << QQuickTheme::System;
+ QTest::newRow("Frame") << "Frame" << QQuickTheme::System;
+ QTest::newRow("GroupBox") << "GroupBox" << QQuickTheme::GroupBox;
+ QTest::newRow("ItemDelegate") << "ItemDelegate" << QQuickTheme::ItemView;
+ QTest::newRow("Label") << "Label" << QQuickTheme::Label;
+ QTest::newRow("Menu") << "Menu" << QQuickTheme::Menu;
+ QTest::newRow("MenuItem") << "MenuItem" << QQuickTheme::Menu;
+ QTest::newRow("MenuSeparator") << "MenuSeparator" << QQuickTheme::Menu;
+ QTest::newRow("Page") << "Page" << QQuickTheme::System;
+ QTest::newRow("Pane") << "Pane" << QQuickTheme::System;
+ QTest::newRow("Popup") << "Popup" << QQuickTheme::System;
+ QTest::newRow("ProgressBar") << "ProgressBar" << QQuickTheme::System;
+ QTest::newRow("RadioButton") << "RadioButton" << QQuickTheme::RadioButton;
+ QTest::newRow("RadioDelegate") << "RadioDelegate" << QQuickTheme::ListView;
+ QTest::newRow("RangeSlider") << "RangeSlider" << QQuickTheme::System;
+ QTest::newRow("RoundButton") << "RoundButton" << QQuickTheme::Button;
+ QTest::newRow("ScrollBar") << "ScrollBar" << QQuickTheme::System;
+ QTest::newRow("ScrollIndicator") << "ScrollIndicator" << QQuickTheme::System;
+ QTest::newRow("Slider") << "Slider" << QQuickTheme::System;
+ QTest::newRow("SpinBox") << "SpinBox" << QQuickTheme::SpinBox;
+ QTest::newRow("SwipeDelegate") << "SwipeDelegate" << QQuickTheme::ListView;
+ QTest::newRow("Switch") << "Switch" << QQuickTheme::Switch;
+ QTest::newRow("SwitchDelegate") << "SwitchDelegate" << QQuickTheme::ListView;
+ QTest::newRow("TabBar") << "TabBar" << QQuickTheme::TabBar;
+ QTest::newRow("TabButton") << "TabButton" << QQuickTheme::TabBar;
+ QTest::newRow("TextArea") << "TextArea" << QQuickTheme::TextArea;
+ QTest::newRow("TextField") << "TextField" << QQuickTheme::TextField;
+ QTest::newRow("ToolBar") << "ToolBar" << QQuickTheme::ToolBar;
+ QTest::newRow("ToolButton") << "ToolButton" << QQuickTheme::ToolBar;
+ QTest::newRow("ToolSeparator") << "ToolSeparator" << QQuickTheme::ToolBar;
+ QTest::newRow("ToolTip") << "ToolTip" << QQuickTheme::ToolTip;
+ QTest::newRow("Tumbler") << "Tumbler" << QQuickTheme::Tumbler;
+}
+
+void tst_font::defaultFont()
+{
+ QFETCH(QString, control);
+ QFETCH(QQuickTheme::Scope, scope);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QString("import QtQuick.Controls; %1 { }").arg(control).toUtf8(), QUrl());
+
+ // The call to setData() above causes QQuickBasicTheme to be set as the current theme,
+ // so we must make sure we only set our theme afterwards.
+ QQuickThemePrivate::instance.reset(new TestFontTheme);
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QVariant var = object->property("font");
+ QVERIFY(var.isValid());
+
+ QFont expectedFont = QQuickTheme::font(scope);
+ QFont actualFont = var.value<QFont>();
+ QCOMPARE(actualFont, expectedFont);
+}
+
+void tst_font::listView_data()
+{
+ QTest::addColumn<QString>("objectName");
+
+ QTest::newRow("Control") << "control";
+ QTest::newRow("Label") << "label";
+ QTest::newRow("TextArea") << "textarea";
+ QTest::newRow("TextField") << "textfield";
+}
+
+void tst_font::listView()
+{
+ QFETCH(QString, objectName);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("listview.qml"));
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY2(!window.isNull(), qPrintable(component.errorString()));
+
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ QQuickItem *listView = window->property("listView").value<QQuickItem *>();
+ QVERIFY(listView);
+
+ QQuickItem *contentItem = listView->property("contentItem").value<QQuickItem *>();
+ QVERIFY(contentItem);
+
+ QVERIFY(QMetaObject::invokeMethod(listView, "forceLayout"));
+
+ QQuickItem *column = contentItem->childItems().value(0);
+ QVERIFY(column);
+
+ QQuickItem *control = column->property(objectName.toUtf8()).value<QQuickItem *>();
+ QVERIFY(control);
+
+ QCOMPARE(control->property("font").value<QFont>().pixelSize(), 55);
+}
+
+QTEST_MAIN(tst_font)
+
+#include "tst_font.moc"
diff --git a/tests/auto/quickcontrols2/palette/CMakeLists.txt b/tests/auto/quickcontrols2/palette/CMakeLists.txt
new file mode 100644
index 0000000000..e6e9128866
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/CMakeLists.txt
@@ -0,0 +1,61 @@
+# Generated from palette.pro.
+
+#####################################################################
+## tst_palette Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_palette
+ SOURCES
+ tst_palette.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qmake_immediate_resource_files
+ "qtquickcontrols2.conf"
+)
+
+qt_internal_add_resource(tst_palette "qmake_immediate"
+ PREFIX
+ "/"
+ FILES
+ ${qmake_immediate_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:palette.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_palette CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_palette CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/palette/data/bindings.qml b/tests/auto/quickcontrols2/palette/data/bindings.qml
new file mode 100644
index 0000000000..215fb03497
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/bindings.qml
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import QtQuick.Layouts
+
+ApplicationWindow {
+ id: window
+ objectName: "window"
+ width: 600
+ height: 800
+ visible: true
+
+ property alias disabledButton: disabledButton
+ property alias enabledButton: enabledButton
+
+ palette {
+ active {
+ button: "khaki"
+ buttonText: "bisque"
+ }
+
+ inactive {
+ button: "khaki"
+ buttonText: "bisque"
+ }
+
+ disabled {
+ buttonText: "lavender"
+ button: "coral"
+ }
+ }
+
+ ColumnLayout {
+ Button {
+ id: disabledButton
+ text: "Disabled"
+ enabled: false
+
+ palette.disabled.button: "aqua"
+ palette.disabled.buttonText: "azure"
+ }
+
+ Button {
+ id: enabledButton
+ text: "Enabled"
+
+ palette: disabledButton.palette
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/inheritance-childcontrol.qml b/tests/auto/quickcontrols2/palette/data/inheritance-childcontrol.qml
new file mode 100644
index 0000000000..896354dfb0
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/inheritance-childcontrol.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property alias control: control
+ property alias child: child
+ property alias grandChild: grandChild
+
+ Item {
+ Control {
+ id: control
+
+ Control {
+ id: child
+
+ Item {
+ Control {
+ id: grandChild
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/inheritance-childpopup.qml b/tests/auto/quickcontrols2/palette/data/inheritance-childpopup.qml
new file mode 100644
index 0000000000..7896a558e9
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/inheritance-childpopup.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property alias control: control
+ property alias child: child
+ property alias grandChild: grandChild
+
+ Item {
+ Popup {
+ id: control
+
+ Control {
+ id: child
+
+ Item {
+ Control {
+ id: grandChild
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/inheritance-control.qml b/tests/auto/quickcontrols2/palette/data/inheritance-control.qml
new file mode 100644
index 0000000000..eb534180a8
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/inheritance-control.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property alias control: control
+ property alias child: child
+ property alias grandChild: grandChild
+
+ Control {
+ id: control
+
+ Control {
+ id: child
+
+ Item {
+ Control {
+ id: grandChild
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/inheritance-dynamicchildcontrol.qml b/tests/auto/quickcontrols2/palette/data/inheritance-dynamicchildcontrol.qml
new file mode 100644
index 0000000000..0a4e5bc664
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/inheritance-dynamicchildcontrol.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property Control control
+ property Control child
+ property Control grandChild
+
+ Item {
+ id: childItem
+ }
+
+ Component {
+ id: component
+ Control { }
+ }
+
+ Component.onCompleted: {
+ control = component.createObject(childItem)
+ child = component.createObject(control)
+ grandChild = component.createObject(child)
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/inheritance-dynamicchildpopup.qml b/tests/auto/quickcontrols2/palette/data/inheritance-dynamicchildpopup.qml
new file mode 100644
index 0000000000..0e799d47f0
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/inheritance-dynamicchildpopup.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property Popup control
+ property Control child
+ property Control grandChild
+
+ Item {
+ id: childItem
+ }
+
+ Component {
+ id: popupComponent
+ Popup { }
+ }
+
+ Component {
+ id: controlComponent
+ Control { }
+ }
+
+ Component.onCompleted: {
+ control = popupComponent.createObject(childItem)
+ child = controlComponent.createObject(control.contentItem)
+ grandChild = controlComponent.createObject(child)
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/inheritance-dynamiccontrol.qml b/tests/auto/quickcontrols2/palette/data/inheritance-dynamiccontrol.qml
new file mode 100644
index 0000000000..058d5b8b95
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/inheritance-dynamiccontrol.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property Control control
+ property Control child
+ property Control grandChild
+
+ Component {
+ id: component
+ Control { }
+ }
+
+ Component.onCompleted: {
+ control = component.createObject(contentItem)
+ child = component.createObject(control)
+ grandChild = component.createObject(child)
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/inheritance-dynamicpopup.qml b/tests/auto/quickcontrols2/palette/data/inheritance-dynamicpopup.qml
new file mode 100644
index 0000000000..429669c7b2
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/inheritance-dynamicpopup.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property Popup control
+ property Control child
+ property Control grandChild
+
+ Component {
+ id: popupComponent
+ Popup { }
+ }
+
+ Component {
+ id: controlComponent
+ Control { }
+ }
+
+ Component.onCompleted: {
+ control = popupComponent.createObject(window)
+ child = controlComponent.createObject(control.contentItem)
+ grandChild = controlComponent.createObject(child)
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/inheritance-popup.qml b/tests/auto/quickcontrols2/palette/data/inheritance-popup.qml
new file mode 100644
index 0000000000..cd2aebb55a
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/inheritance-popup.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property alias control: control
+ property alias child: child
+ property alias grandChild: grandChild
+
+ Popup {
+ id: control
+
+ Control {
+ id: child
+
+ Item {
+ Control {
+ id: grandChild
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/listview.qml b/tests/auto/quickcontrols2/palette/data/listview.qml
new file mode 100644
index 0000000000..eee6531f99
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/listview.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 200
+ height: 200
+
+ property alias listView: listView
+
+ palette.highlight: "red"
+
+ ListView {
+ id: listView
+ anchors.fill: parent
+ model: 1
+ delegate: Column {
+ property alias control: control
+ property alias label: label
+ property alias textarea: textarea
+ property alias textfield: textfield
+
+ Control { id: control }
+ Label { id: label }
+ TextArea { id: textarea }
+ TextField { id: textfield }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/data/palette-appwindow-custom.qml b/tests/auto/quickcontrols2/palette/data/palette-appwindow-custom.qml
new file mode 100644
index 0000000000..95f9fde607
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/palette-appwindow-custom.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ palette.alternateBase: "aqua"
+ palette.base: "azure"
+ palette.brightText: "beige"
+ palette.button: "bisque"
+ palette.buttonText: "chocolate"
+ palette.dark: "coral"
+ palette.highlight: "crimson"
+ palette.highlightedText: "fuchsia"
+ palette.light: "gold"
+ palette.link: "indigo"
+ palette.linkVisited: "ivory"
+ palette.mid: "khaki"
+ palette.midlight: "lavender"
+ palette.shadow: "linen"
+ palette.text: "moccasin"
+ palette.toolTipBase: "navy"
+ palette.toolTipText: "orchid"
+ palette.window: "plum"
+ palette.windowText: "salmon"
+ palette.placeholderText: "magenta"
+}
diff --git a/tests/auto/quickcontrols2/palette/data/palette-appwindow-default.qml b/tests/auto/quickcontrols2/palette/data/palette-appwindow-default.qml
new file mode 100644
index 0000000000..9f2c34fe17
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/palette-appwindow-default.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+}
diff --git a/tests/auto/quickcontrols2/palette/data/palette-control-custom.qml b/tests/auto/quickcontrols2/palette/data/palette-control-custom.qml
new file mode 100644
index 0000000000..7f3bfde575
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/palette-control-custom.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Control {
+ palette.alternateBase: "aqua"
+ palette.base: "azure"
+ palette.brightText: "beige"
+ palette.button: "bisque"
+ palette.buttonText: "chocolate"
+ palette.dark: "coral"
+ palette.highlight: "crimson"
+ palette.highlightedText: "fuchsia"
+ palette.light: "gold"
+ palette.link: "indigo"
+ palette.linkVisited: "ivory"
+ palette.mid: "khaki"
+ palette.midlight: "lavender"
+ palette.shadow: "linen"
+ palette.text: "moccasin"
+ palette.toolTipBase: "navy"
+ palette.toolTipText: "orchid"
+ palette.window: "plum"
+ palette.windowText: "salmon"
+ palette.placeholderText: "magenta"
+}
diff --git a/tests/auto/quickcontrols2/palette/data/palette-control-default.qml b/tests/auto/quickcontrols2/palette/data/palette-control-default.qml
new file mode 100644
index 0000000000..48afa021cd
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/palette-control-default.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Control {
+}
diff --git a/tests/auto/quickcontrols2/palette/data/palette-popup-custom.qml b/tests/auto/quickcontrols2/palette/data/palette-popup-custom.qml
new file mode 100644
index 0000000000..6f35f452d2
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/palette-popup-custom.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Popup {
+ palette.alternateBase: "aqua"
+ palette.base: "azure"
+ palette.brightText: "beige"
+ palette.button: "bisque"
+ palette.buttonText: "chocolate"
+ palette.dark: "coral"
+ palette.highlight: "crimson"
+ palette.highlightedText: "fuchsia"
+ palette.light: "gold"
+ palette.link: "indigo"
+ palette.linkVisited: "ivory"
+ palette.mid: "khaki"
+ palette.midlight: "lavender"
+ palette.shadow: "linen"
+ palette.text: "moccasin"
+ palette.toolTipBase: "navy"
+ palette.toolTipText: "orchid"
+ palette.window: "plum"
+ palette.windowText: "salmon"
+ palette.placeholderText: "magenta"
+}
diff --git a/tests/auto/quickcontrols2/palette/data/palette-popup-default.qml b/tests/auto/quickcontrols2/palette/data/palette-popup-default.qml
new file mode 100644
index 0000000000..77676baccf
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/palette-popup-default.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Popup {
+}
diff --git a/tests/auto/quickcontrols2/palette/data/set-palette.qml b/tests/auto/quickcontrols2/palette/data/set-palette.qml
new file mode 100644
index 0000000000..2d0fe194ce
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/data/set-palette.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Control {
+ palette {
+ active {
+ buttonText: "azure"
+ button: "khaki"
+ }
+
+ disabled {
+ buttonText: "lavender"
+ button: "coral"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/palette/qtquickcontrols2.conf b/tests/auto/quickcontrols2/palette/qtquickcontrols2.conf
new file mode 100644
index 0000000000..c5de6b36dd
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/qtquickcontrols2.conf
@@ -0,0 +1,5 @@
+[Basic]
+Palette\Base=#efefef
+
+[Basic\Palette]
+Text=#101010
diff --git a/tests/auto/quickcontrols2/palette/tst_palette.cpp b/tests/auto/quickcontrols2/palette/tst_palette.cpp
new file mode 100644
index 0000000000..54a182ef59
--- /dev/null
+++ b/tests/auto/quickcontrols2/palette/tst_palette.cpp
@@ -0,0 +1,440 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtGui/qpalette.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickcontrol_p.h>
+#include <QtQuickTemplates2/private/qquickcontrol_p_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+//using namespace QQuickVisualTestUtils;
+
+// Need a more descriptive failure message: QTBUG-87039
+#define COMPARE_PALETTES(actualPalette, expectedPalette) \
+ QVERIFY2(actualPalette == expectedPalette, \
+ qPrintable(QString::fromLatin1("\n Actual: %1\n Expected: %2") \
+ .arg(QDebug::toString(actualPalette)).arg(QDebug::toString(expectedPalette))));
+
+class tst_palette : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_palette();
+
+private slots:
+ void initTestCase() override;
+
+ void palette_data();
+ void palette();
+
+ void inheritance_data();
+ void inheritance();
+
+ void defaultPalette_data();
+ void defaultPalette();
+
+ void listView_data();
+ void listView();
+
+ void setDynamicallyCreatedPalette();
+ void createBindings();
+ void updateBindings();
+};
+
+tst_palette::tst_palette()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_palette::initTestCase()
+{
+ QQuickStyle::setStyle("Basic");
+
+ QQmlDataTest::initTestCase();
+
+ // Import QtQuick.Controls to initialize styles and themes so that
+ // QQuickControlPrivate::themePalette() returns a palette from the
+ // style's theme instead of the platform's theme.
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick.Controls; Control { }", QUrl());
+ delete component.create();
+}
+
+void tst_palette::palette_data()
+{
+ QTest::addColumn<QString>("testFile");
+ QTest::addColumn<QPalette>("expectedPalette");
+
+ const QPalette defaultPalette = QQuickTheme::palette(QQuickTheme::System);
+
+ QTest::newRow("Control") << "palette-control-default.qml" << defaultPalette;
+ QTest::newRow("AppWindow") << "palette-appwindow-default.qml" << defaultPalette;
+ QTest::newRow("Popup") << "palette-popup-default.qml" << defaultPalette;
+
+ QPalette customPalette;
+ customPalette.setColor(QPalette::AlternateBase, QColor("aqua"));
+ customPalette.setColor(QPalette::Base, QColor("azure"));
+ customPalette.setColor(QPalette::BrightText, QColor("beige"));
+ customPalette.setColor(QPalette::Button, QColor("bisque"));
+ customPalette.setColor(QPalette::ButtonText, QColor("chocolate"));
+ customPalette.setColor(QPalette::Dark, QColor("coral"));
+ customPalette.setColor(QPalette::Highlight, QColor("crimson"));
+ customPalette.setColor(QPalette::HighlightedText, QColor("fuchsia"));
+ customPalette.setColor(QPalette::Light, QColor("gold"));
+ customPalette.setColor(QPalette::Link, QColor("indigo"));
+ customPalette.setColor(QPalette::LinkVisited, QColor("ivory"));
+ customPalette.setColor(QPalette::Mid, QColor("khaki"));
+ customPalette.setColor(QPalette::Midlight, QColor("lavender"));
+ customPalette.setColor(QPalette::Shadow, QColor("linen"));
+ customPalette.setColor(QPalette::Text, QColor("moccasin"));
+ customPalette.setColor(QPalette::ToolTipBase, QColor("navy"));
+ customPalette.setColor(QPalette::ToolTipText, QColor("orchid"));
+ customPalette.setColor(QPalette::Window, QColor("plum"));
+ customPalette.setColor(QPalette::WindowText, QColor("salmon"));
+ customPalette.setColor(QPalette::PlaceholderText, QColor("magenta"));
+
+ QTest::newRow("Control:custom") << "palette-control-custom.qml" << customPalette;
+ QTest::newRow("AppWindow:custom") << "palette-appwindow-custom.qml" << customPalette;
+ QTest::newRow("Popup:custom") << "palette-popup-custom.qml" << customPalette;
+}
+
+void tst_palette::palette()
+{
+ QFETCH(QString, testFile);
+ QFETCH(QPalette, expectedPalette);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl(testFile));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QVariant var = object->property("palette");
+ QVERIFY(var.isValid());
+
+ COMPARE_PALETTES(var.value<QQuickPalette*>()->toQPalette(), expectedPalette);
+}
+
+void tst_palette::inheritance_data()
+{
+ QTest::addColumn<QString>("testFile");
+
+ QTest::newRow("Control") << "inheritance-control.qml";
+ QTest::newRow("Child Control") << "inheritance-childcontrol.qml";
+ QTest::newRow("Dynamic Control") << "inheritance-dynamiccontrol.qml";
+ QTest::newRow("Dynamic Child Control") << "inheritance-dynamicchildcontrol.qml";
+
+ QTest::newRow("Popup") << "inheritance-popup.qml";
+ QTest::newRow("Child Popup") << "inheritance-childpopup.qml";
+ QTest::newRow("Dynamic Popup") << "inheritance-dynamicpopup.qml";
+ QTest::newRow("Dynamic Child Popup") << "inheritance-dynamicchildpopup.qml";
+}
+
+void tst_palette::inheritance()
+{
+ QFETCH(QString, testFile);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl(testFile));
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY2(!window.isNull(), qPrintable(component.errorString()));
+
+ QObject *control = window->property("control").value<QObject *>();
+ QObject *child = window->property("child").value<QObject *>();
+ QObject *grandChild = window->property("grandChild").value<QObject *>();
+ QVERIFY(control && child && grandChild);
+
+ const QPalette defaultPalette = QQuickTheme::palette(QQuickTheme::System);
+
+ auto windowPalette = QQuickWindowPrivate::get(window.get())->palette();
+
+ QCOMPARE(windowPalette->toQPalette(), defaultPalette);
+
+ auto controlPalette = control->property("palette").value<QQuickPalette*>();
+ auto childPalette = child->property("palette").value<QQuickPalette*>();
+ auto grandChildPalette = grandChild->property("palette").value<QQuickPalette*>();
+ QVERIFY(controlPalette && childPalette && grandChildPalette);
+
+ QCOMPARE(controlPalette->toQPalette(), defaultPalette);
+ QCOMPARE(childPalette->toQPalette(), defaultPalette);
+ QCOMPARE(grandChildPalette->toQPalette(), defaultPalette);
+
+ childPalette->setBase(Qt::red);
+ childPalette->setText(Qt::green);
+ childPalette->setButton(Qt::blue);
+
+ QCOMPARE(childPalette->base(), grandChildPalette->base());
+ QCOMPARE(childPalette->text(), grandChildPalette->text());
+ QCOMPARE(childPalette->button(), grandChildPalette->button());
+
+ windowPalette->setWindow(Qt::gray);
+ QCOMPARE(controlPalette->window(), windowPalette->window());
+
+ childPalette->setWindow(Qt::red);
+ QCOMPARE(childPalette->window(), Qt::red);
+
+ grandChildPalette->setWindow(Qt::blue);
+ QCOMPARE(grandChildPalette->window(), Qt::blue);
+
+ auto childMo = child->metaObject();
+ childMo->property(childMo->indexOfProperty("palette")).reset(child);
+ QCOMPARE(childPalette->window(), windowPalette->window());
+ QCOMPARE(grandChildPalette->window(), Qt::blue);
+
+ auto grandChildMo = grandChild->metaObject();
+ grandChildMo->property(grandChildMo->indexOfProperty("palette")).reset(grandChild);
+ QCOMPARE(grandChildPalette->window(), windowPalette->window());
+}
+
+class TestTheme : public QQuickTheme
+{
+public:
+ static const uint NPalettes = QQuickTheme::Tumbler + 1;
+
+ TestTheme()
+ {
+ for (uint i = 0; i < NPalettes; ++i)
+ setPalette(static_cast<Scope>(i), QPalette(QColor::fromRgb(i)));
+ }
+};
+
+Q_DECLARE_METATYPE(QQuickTheme::Scope)
+
+void tst_palette::defaultPalette_data()
+{
+ QTest::addColumn<QString>("control");
+ QTest::addColumn<QQuickTheme::Scope>("scope");
+
+ QTest::newRow("AbstractButton") << "AbstractButton" << QQuickTheme::System;
+ QTest::newRow("ApplicationWindow") << "ApplicationWindow" << QQuickTheme::System;
+ QTest::newRow("Button") << "Button" << QQuickTheme::Button;
+ QTest::newRow("CheckBox") << "CheckBox" << QQuickTheme::CheckBox;
+ QTest::newRow("CheckDelegate") << "CheckDelegate" << QQuickTheme::ListView;
+ QTest::newRow("ComboBox") << "ComboBox" << QQuickTheme::ComboBox;
+ QTest::newRow("Container") << "Container" << QQuickTheme::System;
+ QTest::newRow("Control") << "Control" << QQuickTheme::System;
+ QTest::newRow("Dial") << "Dial" << QQuickTheme::System;
+ QTest::newRow("Dialog") << "Dialog" << QQuickTheme::System;
+ QTest::newRow("DialogButtonBox") << "DialogButtonBox" << QQuickTheme::System;
+ QTest::newRow("Drawer") << "Drawer" << QQuickTheme::System;
+ QTest::newRow("Frame") << "Frame" << QQuickTheme::System;
+ QTest::newRow("GroupBox") << "GroupBox" << QQuickTheme::GroupBox;
+ QTest::newRow("ItemDelegate") << "ItemDelegate" << QQuickTheme::ItemView;
+ QTest::newRow("Label") << "Label" << QQuickTheme::Label;
+ QTest::newRow("Menu") << "Menu" << QQuickTheme::Menu;
+ QTest::newRow("MenuItem") << "MenuItem" << QQuickTheme::Menu;
+ QTest::newRow("MenuSeparator") << "MenuSeparator" << QQuickTheme::Menu;
+ QTest::newRow("Page") << "Page" << QQuickTheme::System;
+ QTest::newRow("Pane") << "Pane" << QQuickTheme::System;
+ QTest::newRow("Popup") << "Popup" << QQuickTheme::System;
+ QTest::newRow("ProgressBar") << "ProgressBar" << QQuickTheme::System;
+ QTest::newRow("RadioButton") << "RadioButton" << QQuickTheme::RadioButton;
+ QTest::newRow("RadioDelegate") << "RadioDelegate" << QQuickTheme::ListView;
+ QTest::newRow("RangeSlider") << "RangeSlider" << QQuickTheme::System;
+ QTest::newRow("RoundButton") << "RoundButton" << QQuickTheme::Button;
+ QTest::newRow("ScrollBar") << "ScrollBar" << QQuickTheme::System;
+ QTest::newRow("ScrollIndicator") << "ScrollIndicator" << QQuickTheme::System;
+ QTest::newRow("Slider") << "Slider" << QQuickTheme::System;
+ QTest::newRow("SpinBox") << "SpinBox" << QQuickTheme::SpinBox;
+ QTest::newRow("SwipeDelegate") << "SwipeDelegate" << QQuickTheme::ListView;
+ QTest::newRow("Switch") << "Switch" << QQuickTheme::Switch;
+ QTest::newRow("SwitchDelegate") << "SwitchDelegate" << QQuickTheme::ListView;
+ QTest::newRow("TabBar") << "TabBar" << QQuickTheme::TabBar;
+ QTest::newRow("TabButton") << "TabButton" << QQuickTheme::TabBar;
+ QTest::newRow("TextArea") << "TextArea" << QQuickTheme::TextArea;
+ QTest::newRow("TextField") << "TextField" << QQuickTheme::TextField;
+ QTest::newRow("ToolBar") << "ToolBar" << QQuickTheme::ToolBar;
+ QTest::newRow("ToolButton") << "ToolButton" << QQuickTheme::ToolBar;
+ QTest::newRow("ToolSeparator") << "ToolSeparator" << QQuickTheme::ToolBar;
+ QTest::newRow("ToolTip") << "ToolTip" << QQuickTheme::ToolTip;
+ QTest::newRow("Tumbler") << "Tumbler" << QQuickTheme::Tumbler;
+}
+
+void tst_palette::defaultPalette()
+{
+ QFETCH(QString, control);
+ QFETCH(QQuickTheme::Scope, scope);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QString("import QtQuick.Controls; %1 { }").arg(control).toUtf8(), QUrl());
+
+ // The call to setData() above causes QQuickBasicTheme to be set as the current theme,
+ // so we must make sure we only set our theme afterwards.
+ std::unique_ptr<QQuickTheme> oldTheme(QQuickThemePrivate::instance.release());
+ QQuickThemePrivate::instance.reset(new TestTheme);
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QVariant var = object->property("palette");
+ QVERIFY(var.isValid());
+
+ QPalette expectedPalette = QQuickTheme::palette(scope);
+ auto actualPalette = var.value<QQuickPalette*>();
+ QVERIFY(actualPalette);
+ QCOMPARE(actualPalette->toQPalette(), expectedPalette);
+
+ QQuickThemePrivate::instance.reset(oldTheme.release());
+}
+
+void tst_palette::listView_data()
+{
+ QTest::addColumn<QString>("objectName");
+
+ QTest::newRow("Control") << "control";
+ QTest::newRow("Label") << "label";
+ QTest::newRow("TextArea") << "textarea";
+ QTest::newRow("TextField") << "textfield";
+}
+
+void tst_palette::listView()
+{
+ QFETCH(QString, objectName);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("listview.qml"));
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY2(!window.isNull(), qPrintable(component.errorString()));
+
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ QQuickItem *listView = window->property("listView").value<QQuickItem *>();
+ QVERIFY(listView);
+
+ QQuickItem *contentItem = listView->property("contentItem").value<QQuickItem *>();
+ QVERIFY(contentItem);
+
+ QVERIFY(QMetaObject::invokeMethod(listView, "forceLayout"));
+
+ QQuickItem *column = contentItem->childItems().value(0);
+ QVERIFY(column);
+
+ QQuickItem *control = column->property(objectName.toUtf8()).value<QQuickItem *>();
+ QVERIFY(control);
+
+ QCOMPARE(QQuickItemPrivate::get(control)->palette()->highlight(), Qt::red);
+}
+
+void tst_palette::setDynamicallyCreatedPalette()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("set-palette.qml"));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QVariant var = object->property("palette");
+ QVERIFY(var.isValid());
+
+ auto palette = var.value<QQuickPalette*>();
+ QVERIFY(palette);
+
+ QCOMPARE(palette->buttonText(), QColor("azure"));
+ QCOMPARE(palette->button(), QColor("khaki"));
+
+ QCOMPARE(palette->disabled()->buttonText(), QColor("lavender"));
+ QCOMPARE(palette->disabled()->button(), QColor("coral"));
+}
+
+void tst_palette::createBindings()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("bindings.qml"));
+
+ QScopedPointer<QObject> window(component.create());
+ QVERIFY2(!window.isNull(), qPrintable(component.errorString()));
+
+ auto disabledButton = window->property("disabledButton").value<QQuickButton*>();
+ QVERIFY(disabledButton);
+
+ auto enabledButton = window->property("enabledButton").value<QQuickButton*>();
+ QVERIFY(enabledButton);
+
+ QCOMPARE(QQuickItemPrivate::get(disabledButton)->palette()->button(), QColor("aqua"));
+ QCOMPARE(QQuickItemPrivate::get(disabledButton)->palette()->buttonText(), QColor("azure"));
+
+ QCOMPARE(QQuickItemPrivate::get(enabledButton)->palette()->button(), QColor("khaki"));
+ QCOMPARE(QQuickItemPrivate::get(enabledButton)->palette()->buttonText(), QColor("bisque"));
+
+ QCOMPARE(QQuickItemPrivate::get(enabledButton)->palette()->disabled()->button(), QColor("aqua"));
+ QCOMPARE(QQuickItemPrivate::get(enabledButton)->palette()->disabled()->buttonText(), QColor("azure"));
+}
+
+void tst_palette::updateBindings()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("bindings.qml"));
+
+ QScopedPointer<QObject> window(component.create());
+ QVERIFY2(!window.isNull(), qPrintable(component.errorString()));
+
+ auto disabledButton = window->property("disabledButton").value<QQuickButton*>();
+ QVERIFY(disabledButton);
+
+ auto enabledButton = window->property("enabledButton").value<QQuickButton*>();
+ QVERIFY(enabledButton);
+
+ QQuickItemPrivate::get(disabledButton)->palette()->disabled()->setButton(QColor("navy"));
+ enabledButton->setEnabled(false);
+
+ QCOMPARE(QQuickItemPrivate::get(enabledButton)->palette()->button(), QColor("navy"));
+}
+
+QTEST_MAIN(tst_palette)
+
+#include "tst_palette.moc"
diff --git a/tests/auto/quickcontrols2/platform/CMakeLists.txt b/tests/auto/quickcontrols2/platform/CMakeLists.txt
new file mode 100644
index 0000000000..8e6df7d2b4
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Generated from platform.pro.
+
+#####################################################################
+## tst_platform Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/tst_*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_platform
+ GUI
+ QMLTEST
+ SOURCES
+ tst_platform.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::Qml
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:platform.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/platform/data/tst_colordialog.qml b/tests/auto/quickcontrols2/platform/data/tst_colordialog.qml
new file mode 100644
index 0000000000..12055a5ad6
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_colordialog.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ name: "ColorDialog"
+
+ Component {
+ id: colorDialog
+ ColorDialog { }
+ }
+
+ function test_instance() {
+ var dialog = colorDialog.createObject(testCase)
+ verify(dialog)
+ dialog.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_filedialog.qml b/tests/auto/quickcontrols2/platform/data/tst_filedialog.qml
new file mode 100644
index 0000000000..5a63dd2390
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_filedialog.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ name: "FileDialog"
+
+ Component {
+ id: fileDialog
+ FileDialog { }
+ }
+
+ function test_instance() {
+ var dialog = fileDialog.createObject(testCase)
+ verify(dialog)
+ dialog.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_folderdialog.qml b/tests/auto/quickcontrols2/platform/data/tst_folderdialog.qml
new file mode 100644
index 0000000000..37881c1aef
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_folderdialog.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ name: "FolderDialog"
+
+ Component {
+ id: folderDialog
+ FolderDialog { }
+ }
+
+ function test_instance() {
+ var dialog = folderDialog.createObject(testCase)
+ verify(dialog)
+ dialog.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_fontdialog.qml b/tests/auto/quickcontrols2/platform/data/tst_fontdialog.qml
new file mode 100644
index 0000000000..edb62e5226
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_fontdialog.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ name: "FontDialog"
+
+ Component {
+ id: fontDialog
+ FontDialog { }
+ }
+
+ function test_instance() {
+ var dialog = fontDialog.createObject(testCase)
+ verify(dialog)
+ dialog.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_menu.qml b/tests/auto/quickcontrols2/platform/data/tst_menu.qml
new file mode 100644
index 0000000000..aedf6529d7
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_menu.qml
@@ -0,0 +1,335 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+import QtQuick.Controls as Controls
+import org.qtproject.Test
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "Menu"
+
+ Component {
+ id: item
+ MenuItem { }
+ }
+
+ Component {
+ id: menu
+ Menu { }
+ }
+
+ SignalSpy {
+ id: itemsSpy
+ signalName: "itemsChanged"
+ }
+
+ Component {
+ id: signalSpyComponent
+ SignalSpy {}
+ }
+
+ function init() {
+ verify(!itemsSpy.target)
+ compare(itemsSpy.count, 0)
+ }
+
+ function cleanup() {
+ itemsSpy.target = null
+ itemsSpy.clear()
+ }
+
+ function test_addRemove() {
+ var control = menu.createObject(testCase)
+
+ itemsSpy.target = control
+ verify(itemsSpy.valid)
+
+ control.addItem(item.createObject(control, {text: "1"}))
+ compare(control.items.length, 1)
+ compare(control.items[0].text, "1")
+ compare(itemsSpy.count, 1)
+
+ control.addItem(item.createObject(control, {text: "2"}))
+ compare(control.items.length, 2)
+ compare(control.items[0].text, "1")
+ compare(control.items[1].text, "2")
+ compare(itemsSpy.count, 2)
+
+ control.insertItem(1, item.createObject(control, {text: "3"}))
+ compare(control.items.length, 3)
+ compare(control.items[0].text, "1")
+ compare(control.items[1].text, "3")
+ compare(control.items[2].text, "2")
+ compare(itemsSpy.count, 3)
+
+ control.insertItem(0, item.createObject(control, {text: "4"}))
+ compare(control.items.length, 4)
+ compare(control.items[0].text, "4")
+ compare(control.items[1].text, "1")
+ compare(control.items[2].text, "3")
+ compare(control.items[3].text, "2")
+ compare(itemsSpy.count, 4)
+
+ control.insertItem(control.items.length, item.createObject(control, {text: "5"}))
+ compare(control.items.length, 5)
+ compare(control.items[0].text, "4")
+ compare(control.items[1].text, "1")
+ compare(control.items[2].text, "3")
+ compare(control.items[3].text, "2")
+ compare(control.items[4].text, "5")
+ compare(itemsSpy.count, 5)
+
+ control.removeItem(control.items[4])
+ compare(control.items.length, 4)
+ compare(control.items[0].text, "4")
+ compare(control.items[1].text, "1")
+ compare(control.items[2].text, "3")
+ compare(control.items[3].text, "2")
+ compare(itemsSpy.count, 6)
+
+ control.removeItem(control.items[0])
+ compare(control.items.length, 3)
+ compare(control.items[0].text, "1")
+ compare(control.items[1].text, "3")
+ compare(control.items[2].text, "2")
+ compare(itemsSpy.count, 7)
+
+ control.removeItem(control.items[1])
+ compare(control.items.length, 2)
+ compare(control.items[0].text, "1")
+ compare(control.items[1].text, "2")
+ compare(itemsSpy.count, 8)
+
+ control.removeItem(control.items[1])
+ compare(control.items.length, 1)
+ compare(control.items[0].text, "1")
+ compare(itemsSpy.count, 9)
+
+ control.removeItem(control.items[0])
+ compare(control.items.length, 0)
+ compare(itemsSpy.count, 10)
+
+ control.destroy()
+ }
+
+ Component {
+ id: contentMenu
+ Menu {
+ QtObject { objectName: "object" }
+ MenuItem { objectName: "item1" }
+ Timer { objectName: "timer" }
+ MenuItem { objectName: "item2" }
+ Component { MenuItem { } }
+ }
+ }
+
+ function test_content() {
+ var control = contentMenu.createObject(testCase)
+
+ function compareObjectNames(content, names) {
+ if (content.length !== names.length)
+ return false
+ for (var i = 0; i < names.length; ++i) {
+ if (content[i].objectName !== names[i])
+ return false
+ }
+ return true
+ }
+
+ itemsSpy.target = control
+ verify(itemsSpy.valid)
+
+ verify(compareObjectNames(control.data, ["object", "item1", "timer", "item2", ""]))
+ verify(compareObjectNames(control.items, ["item1", "item2"]))
+
+ control.addItem(item.createObject(control, {objectName: "item3"}))
+ verify(compareObjectNames(control.data, ["object", "item1", "timer", "item2", "", "item3"]))
+ verify(compareObjectNames(control.items, ["item1", "item2", "item3"]))
+ compare(itemsSpy.count, 1)
+
+ control.insertItem(0, item.createObject(control, {objectName: "item4"}))
+ verify(compareObjectNames(control.data, ["object", "item1", "timer", "item2", "", "item3", "item4"]))
+ verify(compareObjectNames(control.items, ["item4", "item1", "item2", "item3"]))
+ compare(itemsSpy.count, 2)
+
+ control.removeItem(control.items[1])
+ verify(compareObjectNames(control.data, ["object", "timer", "item2", "", "item3", "item4"]))
+ verify(compareObjectNames(control.items, ["item4", "item2", "item3"]))
+ compare(itemsSpy.count, 3)
+
+ control.destroy()
+ }
+
+ Component {
+ id: dynamicMenu
+ Menu {
+ id: dmenu
+ MenuItem { text: "static" }
+ Component.onCompleted: {
+ addItem(item.createObject(dmenu, {text: "added"}))
+ insertItem(0, item.createObject(dmenu, {text: "inserted"}))
+ }
+ }
+ }
+
+ function test_dynamic() {
+ var control = dynamicMenu.createObject(testCase)
+
+ // insertItem(), addItem(), and static MenuItem {}
+ compare(control.items.length, 3)
+ compare(control.items[0].text, "inserted")
+
+ var dying = item.createObject(control, {text: "dying"})
+ control.addItem(dying)
+ compare(control.items.length, 4)
+ compare(control.items[3].text, "dying")
+ dying.destroy()
+ wait(0)
+ compare(control.items.length, 3)
+
+ control.destroy()
+ }
+
+ function test_type() {
+ // Q_ENUMS(QPlatformMenu::MenuType)
+ compare(Menu.DefaultMenu, 0)
+ compare(Menu.EditMenu, 1)
+ }
+
+ function test_subMenus() {
+ var parentMenu = createTemporaryObject(menu, testCase)
+ verify(parentMenu)
+
+ var subMenu = menu.createObject(parentMenu)
+ verify(subMenu)
+
+ var subMenuItem = subMenu.menuItem
+ verify(subMenuItem)
+
+ parentMenu.addMenu(subMenu)
+ compare(parentMenu.items.length, 1)
+ verify(parentMenu.items[0], subMenuItem)
+
+ subMenu.title = "Title"
+ compare(subMenu.title, "Title")
+ compare(subMenuItem.text, "Title")
+ }
+
+ Component {
+ id: disabledMenuItemAndActionComponent
+
+ Item {
+ property alias action: action
+ property alias menu: menu
+
+ Controls.Action {
+ id: action
+ shortcut: StandardKey.Copy
+ }
+
+ Menu {
+ id: menu
+
+ MenuItem {
+ enabled: !action.enabled
+ shortcut: StandardKey.Copy
+ text: "test"
+ }
+ }
+ }
+ }
+
+ function test_shortcuts() {
+ if (!TestHelper.shortcutsSupported)
+ skip("This test requires shortcut support")
+
+ let root = createTemporaryObject(disabledMenuItemAndActionComponent, testCase)
+ verify(root)
+ let menu = root.menu
+ let menuItem = menu.items[0]
+ verify(menuItem)
+ let action = root.action
+
+ let actionTriggeredSpy = signalSpyComponent.createObject(root,
+ { target: action, signalName: "triggered" })
+ verify(actionTriggeredSpy.valid)
+ let menuItemTriggeredSpy = signalSpyComponent.createObject(root,
+ { target: menuItem, signalName: "triggered" })
+ verify(menuItemTriggeredSpy.valid)
+
+ // Perform the shortcut; the Action should be triggered since the MenuItem is disabled.
+ keySequence(StandardKey.Copy)
+ compare(actionTriggeredSpy.count, 1)
+ compare(menuItemTriggeredSpy.count, 0)
+
+ // Disable the Action, enabling the MenuItem in the process.
+ action.enabled = false
+ verify(menuItem.enabled)
+ // Perform the shortcut; the MenuItem should be triggered since the Action is disabled.
+ keySequence(StandardKey.Copy)
+ compare(actionTriggeredSpy.count, 1)
+ compare(menuItemTriggeredSpy.count, 1)
+
+ // Re-enable the Action, disabling the MenuItem in the process.
+ action.enabled = true
+ verify(!menuItem.enabled)
+ // Perform the shortcut; the Action should be triggered since the MenuItem is disabled.
+ keySequence(StandardKey.Copy)
+ compare(actionTriggeredSpy.count, 2)
+ compare(menuItemTriggeredSpy.count, 1)
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_menubar.qml b/tests/auto/quickcontrols2/platform/data/tst_menubar.qml
new file mode 100644
index 0000000000..0dd9eb91d6
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_menubar.qml
@@ -0,0 +1,239 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "MenuBar"
+
+ Component {
+ id: menu
+ Menu { }
+ }
+
+ Component {
+ id: menuBar
+ MenuBar { }
+ }
+
+ SignalSpy {
+ id: menusSpy
+ signalName: "menusChanged"
+ }
+
+ function init() {
+ verify(!menusSpy.target)
+ compare(menusSpy.count, 0)
+ }
+
+ function cleanup() {
+ menusSpy.target = null
+ menusSpy.clear()
+ }
+
+ function test_addRemove() {
+ var control = menuBar.createObject(testCase)
+
+ menusSpy.target = control
+ verify(menusSpy.valid)
+
+ control.addMenu(menu.createObject(control, {title: "1"}))
+ compare(control.menus.length, 1)
+ compare(control.menus[0].title, "1")
+ compare(menusSpy.count, 1)
+
+ control.addMenu(menu.createObject(control, {title: "2"}))
+ compare(control.menus.length, 2)
+ compare(control.menus[0].title, "1")
+ compare(control.menus[1].title, "2")
+ compare(menusSpy.count, 2)
+
+ control.insertMenu(1, menu.createObject(control, {title: "3"}))
+ compare(control.menus.length, 3)
+ compare(control.menus[0].title, "1")
+ compare(control.menus[1].title, "3")
+ compare(control.menus[2].title, "2")
+ compare(menusSpy.count, 3)
+
+ control.insertMenu(0, menu.createObject(control, {title: "4"}))
+ compare(control.menus.length, 4)
+ compare(control.menus[0].title, "4")
+ compare(control.menus[1].title, "1")
+ compare(control.menus[2].title, "3")
+ compare(control.menus[3].title, "2")
+ compare(menusSpy.count, 4)
+
+ control.insertMenu(control.menus.length, menu.createObject(control, {title: "5"}))
+ compare(control.menus.length, 5)
+ compare(control.menus[0].title, "4")
+ compare(control.menus[1].title, "1")
+ compare(control.menus[2].title, "3")
+ compare(control.menus[3].title, "2")
+ compare(control.menus[4].title, "5")
+ compare(menusSpy.count, 5)
+
+ control.removeMenu(control.menus[4])
+ compare(control.menus.length, 4)
+ compare(control.menus[0].title, "4")
+ compare(control.menus[1].title, "1")
+ compare(control.menus[2].title, "3")
+ compare(control.menus[3].title, "2")
+ compare(menusSpy.count, 6)
+
+ control.removeMenu(control.menus[0])
+ compare(control.menus.length, 3)
+ compare(control.menus[0].title, "1")
+ compare(control.menus[1].title, "3")
+ compare(control.menus[2].title, "2")
+ compare(menusSpy.count, 7)
+
+ control.removeMenu(control.menus[1])
+ compare(control.menus.length, 2)
+ compare(control.menus[0].title, "1")
+ compare(control.menus[1].title, "2")
+ compare(menusSpy.count, 8)
+
+ control.removeMenu(control.menus[1])
+ compare(control.menus.length, 1)
+ compare(control.menus[0].title, "1")
+ compare(menusSpy.count, 9)
+
+ control.removeMenu(control.menus[0])
+ compare(control.menus.length, 0)
+ compare(menusSpy.count, 10)
+
+ control.destroy()
+ }
+
+ Component {
+ id: contentBar
+ MenuBar {
+ QtObject { objectName: "object" }
+ Menu { objectName: "menu1" }
+ Timer { objectName: "timer" }
+ Menu { objectName: "menu2" }
+ Component { Menu { } }
+ }
+ }
+
+ function test_content() {
+ var control = contentBar.createObject(testCase)
+
+ function compareObjectNames(content, names) {
+ if (content.length !== names.length)
+ return false
+ for (var i = 0; i < names.length; ++i) {
+ if (content[i].objectName !== names[i])
+ return false
+ }
+ return true
+ }
+
+ menusSpy.target = control
+ verify(menusSpy.valid)
+
+ verify(compareObjectNames(control.data, ["object", "menu1", "timer", "menu2", ""]))
+ verify(compareObjectNames(control.menus, ["menu1", "menu2"]))
+
+ control.addMenu(menu.createObject(control, {objectName: "menu3"}))
+ verify(compareObjectNames(control.data, ["object", "menu1", "timer", "menu2", "", "menu3"]))
+ verify(compareObjectNames(control.menus, ["menu1", "menu2", "menu3"]))
+ compare(menusSpy.count, 1)
+
+ control.insertMenu(0, menu.createObject(control, {objectName: "menu4"}))
+ verify(compareObjectNames(control.data, ["object", "menu1", "timer", "menu2", "", "menu3", "menu4"]))
+ verify(compareObjectNames(control.menus, ["menu4", "menu1", "menu2", "menu3"]))
+ compare(menusSpy.count, 2)
+
+ control.removeMenu(control.menus[1])
+ verify(compareObjectNames(control.data, ["object", "timer", "menu2", "", "menu3", "menu4"]))
+ verify(compareObjectNames(control.menus, ["menu4", "menu2", "menu3"]))
+ compare(menusSpy.count, 3)
+
+ control.destroy()
+ }
+
+ Component {
+ id: dynamicBar
+ MenuBar {
+ id: dbar
+ Menu { title: "static" }
+ Component.onCompleted: {
+ addMenu(menu.createObject(dbar, {title: "added"}))
+ insertMenu(0, menu.createObject(dbar, {title: "inserted"}))
+ }
+ }
+ }
+
+ function test_dynamic() {
+ var control = dynamicBar.createObject(testCase)
+
+ // insertMenu(), addMenu(), and static Menu {}
+ compare(control.menus.length, 3)
+ compare(control.menus[0].title, "inserted")
+
+ var dying = menu.createObject(control, {title: "dying"})
+ control.addMenu(dying)
+ compare(control.menus.length, 4)
+ compare(control.menus[3].title, "dying")
+ dying.destroy()
+ wait(0)
+ compare(control.menus.length, 3)
+
+ control.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_menuitem.qml b/tests/auto/quickcontrols2/platform/data/tst_menuitem.qml
new file mode 100644
index 0000000000..0120832d05
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_menuitem.qml
@@ -0,0 +1,123 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "MenuItem"
+
+ Component {
+ id: menuItem
+ // Check that icon.name can be used in this Qt.labs.platform version
+ MenuItem {
+ icon.name: ""
+ }
+ }
+
+ Component {
+ id: signalSpyComponent
+ SignalSpy {}
+ }
+
+ function test_properties_data() {
+ return [
+ {tag: "enabled", signal: "enabledChanged", init: true, value: false},
+ {tag: "visible", signal: "visibleChanged", init: true, value: false},
+ {tag: "separator", signal: "separatorChanged", init: false, value: true},
+ {tag: "checkable", signal: "checkableChanged", init: false, value: true},
+ {tag: "checked", signal: "checkedChanged", init: false, value: true},
+ {tag: "role", signal: "roleChanged", init: MenuItem.TextHeuristicRole, value: MenuItem.AboutRole},
+ {tag: "text", signal: "textChanged", init: "", value: "text"},
+ {tag: "icon.source", signal: "iconChanged", init: "", value: "qrc:/undo.png"},
+ {tag: "icon.name", signal: "iconChanged", init: "", value: "edit-undo"},
+ {tag: "shortcut", signal: "shortcutChanged", init: undefined, value: StandardKey.Undo}
+ ]
+ }
+
+ function test_properties(data) {
+ let item = createTemporaryObject(menuItem, testCase)
+ verify(item)
+
+ let groupedProperty = data.tag.indexOf(".") !== -1
+ let spy = createTemporaryObject(signalSpyComponent, testCase, {
+ target: item, signalName: data.signal
+ })
+ verify(spy)
+ verify(spy.valid)
+
+ let propertyName = groupedProperty ? data.tag.split('.')[1] : data.tag
+ let object = !groupedProperty ? item : item.icon
+ compare(object[propertyName], data.init)
+ object[propertyName] = data.value
+ compare(spy.count, 1)
+ compare(object[propertyName], data.value)
+
+ object[propertyName] = data.value
+ compare(spy.count, 1)
+ }
+
+ function test_role() {
+ // Q_ENUMS(QPlatformMenuItem::MenuRole)
+ compare(MenuItem.NoRole, 0)
+ compare(MenuItem.TextHeuristicRole, 1)
+ compare(MenuItem.ApplicationSpecificRole, 2)
+ compare(MenuItem.AboutQtRole, 3)
+ compare(MenuItem.AboutRole, 4)
+ compare(MenuItem.PreferencesRole, 5)
+ compare(MenuItem.QuitRole, 6)
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_menuitemgroup.qml b/tests/auto/quickcontrols2/platform/data/tst_menuitemgroup.qml
new file mode 100644
index 0000000000..117f79ce1a
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_menuitemgroup.qml
@@ -0,0 +1,390 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "MenuItemGroup"
+
+ Component {
+ id: menuItemGroup
+ MenuItemGroup { }
+ }
+
+ SignalSpy {
+ id: checkedItemSpy
+ signalName: "checkedItemChanged"
+ }
+
+ SignalSpy {
+ id: itemsSpy
+ signalName: "itemsChanged"
+ }
+
+ function init() {
+ verify(!checkedItemSpy.target)
+ compare(checkedItemSpy.count, 0)
+
+ verify(!itemsSpy.target)
+ compare(itemsSpy.count, 0)
+ }
+
+ function cleanup() {
+ checkedItemSpy.target = null
+ checkedItemSpy.clear()
+
+ itemsSpy.target = null
+ itemsSpy.clear()
+ }
+
+ function test_null() {
+ var group = menuItemGroup.createObject(testCase)
+ verify(group)
+
+ group.addItem(null)
+ group.removeItem(null)
+
+ group.destroy()
+ }
+
+ Component {
+ id: item
+ MenuItem { }
+ }
+
+ function test_exclusive() {
+ var group = menuItemGroup.createObject(testCase)
+ verify(group)
+
+ compare(group.exclusive, true)
+
+ checkedItemSpy.target = group
+ verify(checkedItemSpy.valid)
+ verify(!group.checkedItem)
+
+ var item1 = item.createObject(testCase, {checked: true})
+ var item2 = item.createObject(testCase, {checked: false})
+ var item3 = item.createObject(testCase, {checked: true})
+
+ // add checked
+ group.addItem(item1)
+ compare(group.checkedItem, item1)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 1)
+
+ // add non-checked
+ group.addItem(item2)
+ compare(group.checkedItem, item1)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 1)
+
+ // add checked
+ group.addItem(item3)
+ compare(group.checkedItem, item3)
+ compare(item1.checked, false)
+ compare(item2.checked, false)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 2)
+
+ // change checked
+ group.checkedItem = item2
+ compare(group.checkedItem, item2)
+ compare(item1.checked, false)
+ compare(item2.checked, true)
+ compare(item3.checked, false)
+ compare(checkedItemSpy.count, 3)
+
+ // check
+ item1.checked = true
+ compare(group.checkedItem, item1)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, false)
+ compare(checkedItemSpy.count, 4)
+
+ // remove non-checked
+ group.removeItem(item2)
+ compare(group.checkedItem, item1)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, false)
+ compare(checkedItemSpy.count, 4)
+
+ // remove checked
+ group.removeItem(item1)
+ compare(group.checkedItem, null)
+ compare(item1.checked, false)
+ compare(item2.checked, false)
+ compare(item3.checked, false)
+ compare(checkedItemSpy.count, 5)
+
+ group.destroy()
+ }
+
+ function test_nonExclusive() {
+ var group = menuItemGroup.createObject(testCase, {exclusive: false})
+ verify(group)
+
+ compare(group.exclusive, false)
+
+ checkedItemSpy.target = group
+ verify(checkedItemSpy.valid)
+ verify(!group.checkedItem)
+
+ var item1 = item.createObject(testCase, {checked: true})
+ var item2 = item.createObject(testCase, {checked: false})
+ var item3 = item.createObject(testCase, {checked: true})
+
+ // add checked
+ group.addItem(item1)
+ compare(group.checkedItem, null)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 0)
+
+ // add non-checked
+ group.addItem(item2)
+ compare(group.checkedItem, null)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 0)
+
+ // add checked
+ group.addItem(item3)
+ compare(group.checkedItem, null)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 0)
+
+ // change checked
+ group.checkedItem = item2
+ compare(group.checkedItem, item2)
+ compare(item1.checked, true)
+ compare(item2.checked, true)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 1)
+
+ // check
+ item1.checked = false
+ item1.checked = true
+ compare(group.checkedItem, item2)
+ compare(item1.checked, true)
+ compare(item2.checked, true)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 1)
+
+ // remove checked
+ group.removeItem(item2)
+ compare(group.checkedItem, null)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 2)
+
+ // remove non-checked
+ group.removeItem(item1)
+ compare(group.checkedItem, null)
+ compare(item1.checked, true)
+ compare(item2.checked, false)
+ compare(item3.checked, true)
+ compare(checkedItemSpy.count, 2)
+
+ group.destroy()
+ }
+
+ function test_items() {
+ var group = menuItemGroup.createObject(testCase)
+ verify(group)
+
+ itemsSpy.target = group
+ verify(itemsSpy.valid)
+
+ compare(group.items.length, 0)
+ compare(group.checkedItem, null)
+
+ var item1 = item.createObject(testCase, {checked: true})
+ var item2 = item.createObject(testCase, {checked: false})
+
+ group.items = [item1, item2]
+ compare(group.items.length, 2)
+ compare(group.items[0], item1)
+ compare(group.items[1], item2)
+ compare(group.checkedItem, item1)
+ compare(itemsSpy.count, 2)
+
+ var item3 = item.createObject(testCase, {checked: true})
+
+ group.addItem(item3)
+ compare(group.items.length, 3)
+ compare(group.items[0], item1)
+ compare(group.items[1], item2)
+ compare(group.items[2], item3)
+ compare(group.checkedItem, item3)
+ compare(itemsSpy.count, 3)
+
+ group.removeItem(item1)
+ compare(group.items.length, 2)
+ compare(group.items[0], item2)
+ compare(group.items[1], item3)
+ compare(group.checkedItem, item3)
+ compare(itemsSpy.count, 4)
+
+ group.items = []
+ compare(group.items.length, 0)
+ compare(group.checkedItem, null)
+ compare(itemsSpy.count, 5)
+
+ group.destroy()
+ }
+
+ function test_itemDestroyed() {
+ var group = menuItemGroup.createObject(testCase)
+ verify(group)
+
+ itemsSpy.target = group
+ verify(itemsSpy.valid)
+
+ var item1 = item.createObject(testCase, {checked: true})
+
+ group.addItem(item1)
+ compare(group.items.length, 1)
+ compare(group.items[0], item1)
+ compare(group.checkedItem, item1)
+ compare(itemsSpy.count, 1)
+
+ item1.destroy()
+ wait(0)
+ compare(group.items.length, 0)
+ compare(group.checkedItem, null)
+ compare(itemsSpy.count, 2)
+
+ group.destroy()
+ }
+
+ function test_visible() {
+ var group = menuItemGroup.createObject(testCase)
+ verify(group)
+
+ compare(group.visible, true)
+
+ for (var i = 0; i < 3; ++i) {
+ group.addItem(item.createObject(testCase))
+ compare(group.items[i].visible, true)
+ }
+
+ group.visible = false
+ compare(group.visible, false)
+
+ for (i = 0; i < 3; ++i)
+ compare(group.items[i].visible, false)
+
+ group.items[1].visible = true
+ compare(group.items[1].visible, false)
+
+ group.items[1].visible = false
+ compare(group.items[1].visible, false)
+
+ group.visible = true
+ compare(group.visible, true)
+
+ compare(group.items[0].visible, true)
+ compare(group.items[1].visible, false)
+ compare(group.items[2].visible, true)
+
+ group.destroy()
+ }
+
+ function test_enabled() {
+ var group = menuItemGroup.createObject(testCase)
+ verify(group)
+
+ compare(group.enabled, true)
+
+ for (var i = 0; i < 3; ++i) {
+ group.addItem(item.createObject(testCase))
+ compare(group.items[i].enabled, true)
+ }
+
+ group.enabled = false
+ compare(group.enabled, false)
+
+ for (i = 0; i < 3; ++i)
+ compare(group.items[i].enabled, false)
+
+ group.items[1].enabled = true
+ compare(group.items[1].enabled, false)
+
+ group.items[1].enabled = false
+ compare(group.items[1].enabled, false)
+
+ group.enabled = true
+ compare(group.enabled, true)
+
+ compare(group.items[0].enabled, true)
+ compare(group.items[1].enabled, false)
+ compare(group.items[2].enabled, true)
+
+ group.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_menuseparator.qml b/tests/auto/quickcontrols2/platform/data/tst_menuseparator.qml
new file mode 100644
index 0000000000..52bb349fd3
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_menuseparator.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ name: "MenuSeparator"
+
+ Component {
+ id: menuSeparator
+ MenuSeparator { }
+ }
+
+ function test_separator() {
+ var separator = menuSeparator.createObject(testCase)
+ verify(separator)
+
+ compare(separator.separator, true)
+
+ separator.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_messagedialog.qml b/tests/auto/quickcontrols2/platform/data/tst_messagedialog.qml
new file mode 100644
index 0000000000..23a5c821b2
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_messagedialog.qml
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ name: "MessageDialog"
+
+ Component {
+ id: messageDialog
+ MessageDialog { }
+ }
+
+ SignalSpy {
+ id: spy
+ }
+
+ function test_instance() {
+ var dialog = messageDialog.createObject(testCase)
+ verify(dialog)
+ dialog.destroy()
+ }
+
+ function test_standardButtons() {
+ // Q_FLAGS(QPlatformDialogHelper::StandardButtons)
+ compare(MessageDialog.NoButton , 0x00000000)
+ compare(MessageDialog.Ok , 0x00000400)
+ compare(MessageDialog.Save , 0x00000800)
+ compare(MessageDialog.SaveAll , 0x00001000)
+ compare(MessageDialog.Open , 0x00002000)
+ compare(MessageDialog.Yes , 0x00004000)
+ compare(MessageDialog.YesToAll , 0x00008000)
+ compare(MessageDialog.No , 0x00010000)
+ compare(MessageDialog.NoToAll , 0x00020000)
+ compare(MessageDialog.Abort , 0x00040000)
+ compare(MessageDialog.Retry , 0x00080000)
+ compare(MessageDialog.Ignore , 0x00100000)
+ compare(MessageDialog.Close , 0x00200000)
+ compare(MessageDialog.Cancel , 0x00400000)
+ compare(MessageDialog.Discard , 0x00800000)
+ compare(MessageDialog.Help , 0x01000000)
+ compare(MessageDialog.Apply , 0x02000000)
+ compare(MessageDialog.Reset , 0x04000000)
+ compare(MessageDialog.RestoreDefaults, 0x08000000)
+ }
+
+ function test_clicked() {
+ var dialog = messageDialog.createObject(testCase)
+ verify(dialog)
+
+ spy.target = dialog
+ spy.signalName = "clicked"
+
+ dialog.clicked(MessageDialog.Yes)
+ compare(spy.count, 1)
+ compare(spy.signalArguments[0][0], MessageDialog.Yes)
+
+ spy.clear()
+ dialog.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_standardpaths.qml b/tests/auto/quickcontrols2/platform/data/tst_standardpaths.qml
new file mode 100644
index 0000000000..1edc67a85a
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_standardpaths.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ name: "StandardPaths"
+
+ function test_standardLocation() {
+ // Q_ENUMS(QStandardPaths::StandardLocation)
+ compare(StandardPaths.DesktopLocation, 0)
+ compare(StandardPaths.DocumentsLocation, 1)
+ compare(StandardPaths.FontsLocation, 2)
+ compare(StandardPaths.ApplicationsLocation, 3)
+ compare(StandardPaths.MusicLocation, 4)
+ compare(StandardPaths.MoviesLocation, 5)
+ compare(StandardPaths.PicturesLocation, 6)
+ compare(StandardPaths.TempLocation, 7)
+ compare(StandardPaths.HomeLocation, 8)
+ compare(StandardPaths.AppLocalDataLocation, 9)
+ compare(StandardPaths.CacheLocation, 10)
+ compare(StandardPaths.GenericDataLocation, 11)
+ compare(StandardPaths.RuntimeLocation, 12)
+ compare(StandardPaths.ConfigLocation, 13)
+ compare(StandardPaths.DownloadLocation, 14)
+ compare(StandardPaths.GenericCacheLocation, 15)
+ compare(StandardPaths.GenericConfigLocation, 16)
+ compare(StandardPaths.AppDataLocation, 17)
+ compare(StandardPaths.AppConfigLocation, 18)
+ }
+
+ function test_locateOptions() {
+ // Q_ENUMS(QStandardPaths::LocateOptions)
+ compare(StandardPaths.LocateFile, 0)
+ compare(StandardPaths.LocateDirectory, 1)
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/data/tst_systemtrayicon.qml b/tests/auto/quickcontrols2/platform/data/tst_systemtrayicon.qml
new file mode 100644
index 0000000000..09f1026175
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/data/tst_systemtrayicon.qml
@@ -0,0 +1,139 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import Qt.labs.platform
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "SystemTrayIcon"
+
+ Component {
+ id: systemTrayIconComponent
+ // Check that icon.name can be used in this Qt.labs.platform version
+ SystemTrayIcon {
+ icon.name: ""
+ }
+ }
+
+ Component {
+ id: signalSpyComponent
+ SignalSpy {}
+ }
+
+ function test_properties_data() {
+ return [
+ {tag: "visible", signal: "visibleChanged", init: false, value: true},
+ {tag: "icon.source", signal: "iconChanged", init: "", value: "qrc:/tray.png"},
+ {tag: "icon.name", signal: "iconChanged", init: "", value: "icon-name"},
+ {tag: "tooltip", signal: "tooltipChanged", init: "", value: "tooltip"},
+ ]
+ }
+
+ function test_properties(data) {
+ let icon = createTemporaryObject(systemTrayIconComponent, testCase)
+ verify(icon)
+
+ let groupedProperty = data.tag.indexOf(".") !== -1
+ let spy = createTemporaryObject(signalSpyComponent, testCase, {
+ target: icon, signalName: data.signal
+ })
+ verify(spy)
+ verify(spy.valid)
+
+ let propertyName = groupedProperty ? data.tag.split('.')[1] : data.tag
+ let object = !groupedProperty ? icon : icon.icon
+ compare(object[propertyName], data.init)
+
+ object[propertyName] = data.value
+ compare(spy.count, 1)
+ compare(object[propertyName], data.value)
+
+ object[propertyName] = data.value
+ compare(spy.count, 1)
+ }
+
+ function test_messageIcon() {
+ // Q_ENUMS(QPlatformSystemTrayIcon::ActivationReason)
+ compare(SystemTrayIcon.NoIcon, 0)
+ compare(SystemTrayIcon.Information, 1)
+ compare(SystemTrayIcon.Warning, 2)
+ compare(SystemTrayIcon.Critical, 3)
+ }
+
+ function test_activationReason() {
+ // Q_ENUMS(QPlatformSystemTrayIcon::ActivationReason)
+ compare(SystemTrayIcon.Unknown, 0)
+ compare(SystemTrayIcon.Context, 1)
+ compare(SystemTrayIcon.DoubleClick, 2)
+ compare(SystemTrayIcon.Trigger, 3)
+ compare(SystemTrayIcon.MiddleClick, 4)
+ }
+
+ function test_activated() {
+ let icon = createTemporaryObject(systemTrayIconComponent, testCase)
+ verify(icon)
+
+ let spy = createTemporaryObject(signalSpyComponent, testCase, {
+ target: icon, signalName: "activated"
+ })
+ verify(spy)
+ verify(spy.valid)
+
+ icon.activated(SystemTrayIcon.Trigger)
+ compare(spy.count, 1)
+ compare(spy.signalArguments[0][0], SystemTrayIcon.Trigger)
+ }
+}
diff --git a/tests/auto/quickcontrols2/platform/tst_platform.cpp b/tests/auto/quickcontrols2/platform/tst_platform.cpp
new file mode 100644
index 0000000000..2cf4cd2c4d
--- /dev/null
+++ b/tests/auto/quickcontrols2/platform/tst_platform.cpp
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQml/qqmlengine.h>
+#include <QtQuickTest/quicktest.h>
+
+class Setup : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool shortcutsSupported READ areShortcutsSupported CONSTANT FINAL)
+
+public:
+ bool areShortcutsSupported() const
+ {
+#if QT_CONFIG(shortcut)
+ return true;
+#else
+ return false;
+#endif
+ }
+
+public slots:
+ void qmlEngineAvailable(QQmlEngine *)
+ {
+ qmlRegisterSingletonInstance("org.qtproject.Test", 1, 0, "TestHelper", this);
+ }
+};
+
+QUICK_TEST_MAIN_WITH_SETUP(tst_platform, Setup)
+
+#include "tst_platform.moc"
diff --git a/tests/auto/quickcontrols2/pointerhandlers/CMakeLists.txt b/tests/auto/quickcontrols2/pointerhandlers/CMakeLists.txt
new file mode 100644
index 0000000000..08790d6784
--- /dev/null
+++ b/tests/auto/quickcontrols2/pointerhandlers/CMakeLists.txt
@@ -0,0 +1,37 @@
+#####################################################################
+## tst_pointerhandlers Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_pointerhandlers
+ SOURCES
+ tst_pointerhandlers.cpp
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlModelsPrivate
+ Qt::QmlPrivate
+ Qt::QuickPrivate
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickTemplates2Private
+ TESTDATA ${test_data}
+)
+
+qt_internal_extend_target(tst_pointerhandlers CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_pointerhandlers CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/pointerhandlers/data/controlandmousearea.qml b/tests/auto/quickcontrols2/pointerhandlers/data/controlandmousearea.qml
new file mode 100644
index 0000000000..00c680453a
--- /dev/null
+++ b/tests/auto/quickcontrols2/pointerhandlers/data/controlandmousearea.qml
@@ -0,0 +1,49 @@
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 640
+ height: 480
+ visible: true
+
+ property alias outerMouseArea: outerMouseArea
+ property alias buttonInTheMiddle: buttonInTheMiddle
+ property alias innerMouseArea: innerMouseArea
+
+ MouseArea {
+ id: outerMouseArea
+ x: 10
+ y: 10
+ width: 200
+ height: 200
+ hoverEnabled: true
+ Rectangle {
+ anchors.fill: parent
+ border.width: 1
+ color: outerMouseArea.containsMouse ? "cyan" : "transparent"
+ }
+
+ Button {
+ id: buttonInTheMiddle
+ width: parent.width - 20
+ height: parent.height - 20
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ text: hovered ? "hovered" : ""
+
+ MouseArea {
+ id: innerMouseArea
+ width: parent.width - 20
+ height: parent.height - 20
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ hoverEnabled: true
+ Rectangle {
+ anchors.fill: parent
+ border.width: 1
+ color: innerMouseArea.containsMouse ? "yellow" : "transparent"
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/pointerhandlers/data/controlinsidecontrol.qml b/tests/auto/quickcontrols2/pointerhandlers/data/controlinsidecontrol.qml
new file mode 100644
index 0000000000..69d855ec57
--- /dev/null
+++ b/tests/auto/quickcontrols2/pointerhandlers/data/controlinsidecontrol.qml
@@ -0,0 +1,31 @@
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 640
+ height: 480
+ visible: true
+
+ property alias outerButton: outerButton
+ property alias innerButton: innerButton
+
+ Button {
+ id: outerButton
+ x: 5
+ y: 5
+ width: 200
+ height: 200
+ hoverEnabled: true
+ text: hovered ? "hovered" : ""
+
+ Button {
+ id: innerButton
+ width: parent.width - 20
+ height: parent.height - 20
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ text: hovered ? "hovered" : ""
+ opacity: 0.5
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp b/tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp
new file mode 100644
index 0000000000..d2e28b7044
--- /dev/null
+++ b/tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp
@@ -0,0 +1,195 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 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$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QtQuickTest/quicktest.h>
+
+#include <QtQuick/qquickview.h>
+#include <QtQuick/private/qquickmousearea_p.h>
+
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcontext.h>
+
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+
+using namespace QQuickViewTestUtils;
+using namespace QQuickVisualTestUtils;
+
+class tst_pointerhandlers : public QQmlDataTest
+{
+ Q_OBJECT
+public:
+ tst_pointerhandlers();
+
+private slots:
+ void hover_controlInsideControl();
+ void hover_controlAndMouseArea();
+};
+
+tst_pointerhandlers::tst_pointerhandlers()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_pointerhandlers::hover_controlInsideControl()
+{
+ // Test that if you move the mouse over a control that is
+ // a child of another control, both controls end up hovered.
+ // A control should basically not block (accept) hover events.
+ QQuickView view(testFileUrl("controlinsidecontrol.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickItem *rootItem = view.rootObject();
+ QVERIFY(rootItem);
+ QQuickWindow *window = rootItem->window();
+ QVERIFY(window);
+
+ const auto context = qmlContext(rootItem);
+ auto outerButton = context->contextProperty("outerButton").value<QQuickButton *>();
+ auto innerButton = context->contextProperty("innerButton").value<QQuickButton *>();
+ QVERIFY(outerButton);
+ QVERIFY(innerButton);
+
+ const QPoint posInWindow(1, 1);
+ const QPoint posOnOuterButton = rootItem->mapFromItem(outerButton, QPointF(0, 0)).toPoint();
+ const QPoint posOnInnerButton = rootItem->mapFromItem(innerButton, QPointF(0, 0)).toPoint();
+
+ // Start by moving the mouse to the window
+ QTest::mouseMove(window, posInWindow);
+ QCOMPARE(outerButton->isHovered(), false);
+ QCOMPARE(innerButton->isHovered(), false);
+
+ // Move the mouse over the outer control
+ QTest::mouseMove(window, posOnOuterButton);
+ QCOMPARE(outerButton->isHovered(), true);
+ QCOMPARE(innerButton->isHovered(), false);
+
+ // Move the mouse over the inner control
+ QTest::mouseMove(window, posOnInnerButton);
+ QCOMPARE(outerButton->isHovered(), true);
+ QCOMPARE(innerButton->isHovered(), true);
+
+ // Move the mouse over the outer control again
+ QTest::mouseMove(window, posOnOuterButton);
+ QCOMPARE(outerButton->isHovered(), true);
+ QCOMPARE(innerButton->isHovered(), false);
+
+ // Move the mouse outside all controls
+ QTest::mouseMove(window, posInWindow);
+ QCOMPARE(outerButton->isHovered(), false);
+ QCOMPARE(innerButton->isHovered(), false);
+}
+
+void tst_pointerhandlers::hover_controlAndMouseArea()
+{
+ QQuickView view(testFileUrl("controlandmousearea.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickItem *rootItem = view.rootObject();
+ QVERIFY(rootItem);
+ QQuickWindow *window = rootItem->window();
+ QVERIFY(window);
+
+ const auto context = qmlContext(rootItem);
+ auto outerMouseArea = context->contextProperty("outerMouseArea").value<QQuickMouseArea *>();
+ auto buttonInTheMiddle = context->contextProperty("buttonInTheMiddle").value<QQuickButton *>();
+ auto innerMouseArea = context->contextProperty("innerMouseArea").value<QQuickMouseArea *>();
+ QVERIFY(outerMouseArea);
+ QVERIFY(buttonInTheMiddle);
+ QVERIFY(innerMouseArea);
+
+ const QPoint posInWindow(1, 1);
+ const QPoint posOnOuterMouseArea = rootItem->mapFromItem(outerMouseArea, QPointF(0, 0)).toPoint();
+ const QPoint posOnButtonInTheMiddle = rootItem->mapFromItem(buttonInTheMiddle, QPointF(0, 0)).toPoint();
+ const QPoint posOnInnerMouseArea = rootItem->mapFromItem(innerMouseArea, QPointF(0, 0)).toPoint();
+
+ // Start by moving the mouse to the window
+ QTest::mouseMove(window, posInWindow);
+ QCOMPARE(outerMouseArea->hovered(), false);
+ QCOMPARE(buttonInTheMiddle->isHovered(), false);
+ QCOMPARE(innerMouseArea->hovered(), false);
+
+ // Move the mouse over the outer mousearea
+ QTest::mouseMove(window, posOnOuterMouseArea);
+ QCOMPARE(outerMouseArea->hovered(), true);
+ QCOMPARE(buttonInTheMiddle->isHovered(), false);
+ QCOMPARE(innerMouseArea->hovered(), false);
+
+ // Move the mouse over the button in the middle
+ QTest::mouseMove(window, posOnButtonInTheMiddle);
+ QCOMPARE(outerMouseArea->hovered(), true);
+ QCOMPARE(buttonInTheMiddle->isHovered(), true);
+ QCOMPARE(innerMouseArea->hovered(), false);
+
+ // Move the mouse over the inner mousearea
+ QTest::mouseMove(window, posOnInnerMouseArea);
+ QCOMPARE(outerMouseArea->hovered(), true);
+ QCOMPARE(buttonInTheMiddle->isHovered(), true);
+ QCOMPARE(innerMouseArea->hovered(), true);
+
+ // Move the mouse over the button in the middle again
+ QTest::mouseMove(window, posOnButtonInTheMiddle);
+ QCOMPARE(outerMouseArea->hovered(), true);
+ QCOMPARE(buttonInTheMiddle->isHovered(), true);
+ QCOMPARE(innerMouseArea->hovered(), false);
+
+ // Move the mouse over the outer mousearea again
+ QTest::mouseMove(window, posOnOuterMouseArea);
+ QCOMPARE(outerMouseArea->hovered(), true);
+ QCOMPARE(buttonInTheMiddle->isHovered(), false);
+ QCOMPARE(innerMouseArea->hovered(), false);
+
+ // Move the mouse outside all items
+ QTest::mouseMove(window, posInWindow);
+ QCOMPARE(outerMouseArea->hovered(), false);
+ QCOMPARE(buttonInTheMiddle->isHovered(), false);
+ QCOMPARE(innerMouseArea->hovered(), false);
+}
+
+QTEST_MAIN(tst_pointerhandlers)
+
+#include "tst_pointerhandlers.moc"
diff --git a/tests/auto/quickcontrols2/pressandhold/CMakeLists.txt b/tests/auto/quickcontrols2/pressandhold/CMakeLists.txt
new file mode 100644
index 0000000000..cf2d92a567
--- /dev/null
+++ b/tests/auto/quickcontrols2/pressandhold/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Generated from pressandhold.pro.
+
+#####################################################################
+## tst_pressandhold Test:
+#####################################################################
+
+qt_internal_add_test(tst_pressandhold
+ SOURCES
+ tst_pressandhold.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::Quick
+ Qt::QuickControls2
+ Qt::QuickTemplates2
+)
+
+#### Keys ignored in scope 1:.:.:pressandhold.pro:<TRUE>:
+# TEMPLATE = "app"
+
+## Scopes:
+#####################################################################
diff --git a/tests/auto/quickcontrols2/pressandhold/data/dependencies.qml b/tests/auto/quickcontrols2/pressandhold/data/dependencies.qml
new file mode 100644
index 0000000000..280cfd2962
--- /dev/null
+++ b/tests/auto/quickcontrols2/pressandhold/data/dependencies.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Control { }
diff --git a/tests/auto/quickcontrols2/pressandhold/tst_pressandhold.cpp b/tests/auto/quickcontrols2/pressandhold/tst_pressandhold.cpp
new file mode 100644
index 0000000000..1eb5eebc9a
--- /dev/null
+++ b/tests/auto/quickcontrols2/pressandhold/tst_pressandhold.cpp
@@ -0,0 +1,222 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest>
+#include <QtQuick>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QStyleHints>
+
+class tst_PressAndHold : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_PressAndHold();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+ void pressAndHold_data();
+ void pressAndHold();
+
+ void keepSelection_data();
+ void keepSelection();
+};
+
+tst_PressAndHold::tst_PressAndHold()
+{
+ QQuickStyle::setStyle("Basic");
+}
+
+void tst_PressAndHold::initTestCase()
+{
+ QGuiApplication::styleHints()->setMousePressAndHoldInterval(100);
+}
+
+void tst_PressAndHold::cleanupTestCase()
+{
+ QGuiApplication::styleHints()->setMousePressAndHoldInterval(-1);
+}
+
+void tst_PressAndHold::pressAndHold_data()
+{
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("signal");
+
+ QTest::newRow("Button") << QByteArray("import QtQuick.Controls; Button { text: 'Button' }") << QByteArray(SIGNAL(pressAndHold()));
+ QTest::newRow("SwipeDelegate") << QByteArray("import QtQuick.Controls; SwipeDelegate { text: 'SwipeDelegate' }") << QByteArray(SIGNAL(pressAndHold()));
+ QTest::newRow("TextField") << QByteArray("import QtQuick.Controls; TextField { text: 'TextField' }") << QByteArray(SIGNAL(pressAndHold(QQuickMouseEvent*)));
+ QTest::newRow("TextArea") << QByteArray("import QtQuick.Controls; TextArea { text: 'TextArea' }") << QByteArray(SIGNAL(pressAndHold(QQuickMouseEvent*)));
+}
+
+void tst_PressAndHold::pressAndHold()
+{
+ QFETCH(QByteArray, data);
+ QFETCH(QByteArray, signal);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(data, QUrl());
+
+ QScopedPointer<QObject> control(component.create());
+ QScopedPointer<QObject> waitControl(component.create());
+ QVERIFY(!control.isNull() && !waitControl.isNull());
+
+ QSignalSpy spy(control.data(), signal);
+ QSignalSpy waitSpy(waitControl.data(), signal);
+ QVERIFY(spy.isValid() && waitSpy.isValid());
+
+ int startDragDistance = QGuiApplication::styleHints()->startDragDistance();
+ QMouseEvent press(QEvent::MouseButtonPress, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+ QMouseEvent press2(QEvent::MouseButtonPress, QPointF(), Qt::RightButton, Qt::RightButton, Qt::NoModifier);
+ QMouseEvent move(QEvent::MouseMove, QPointF(2 * startDragDistance, 2 * startDragDistance), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+ QMouseEvent release(QEvent::MouseButtonRelease, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+
+ // pressAndHold() emitted
+ QGuiApplication::sendEvent(control.data(), &press);
+ QTRY_COMPARE(spy.count(), 1);
+ QGuiApplication::sendEvent(control.data(), &release);
+ QCOMPARE(spy.count(), 1);
+ spy.clear();
+
+ // pressAndHold() canceled by release
+ QGuiApplication::sendEvent(control.data(), &press);
+ QGuiApplication::processEvents();
+ QGuiApplication::sendEvent(control.data(), &release);
+ QCOMPARE(spy.count(), 0);
+
+ // pressAndHold() canceled by move
+ QGuiApplication::sendEvent(control.data(), &press);
+ QGuiApplication::sendEvent(control.data(), &move); // cancels pressAndHold()
+ QGuiApplication::sendEvent(waitControl.data(), &press);
+ // by the time the second control emits pressAndHold(), we can reliably
+ // assume that the first control would have emitted pressAndHold() if it
+ // wasn't canceled as appropriate by the move event above
+ QTRY_COMPARE(waitSpy.count(), 1);
+ QCOMPARE(spy.count(), 0);
+ QGuiApplication::sendEvent(control.data(), &release);
+ QGuiApplication::sendEvent(waitControl.data(), &release);
+ QCOMPARE(waitSpy.count(), 1);
+ QCOMPARE(spy.count(), 0);
+ waitSpy.clear();
+
+ // pressAndHold() canceled by 2nd press
+ QGuiApplication::sendEvent(control.data(), &press);
+ QGuiApplication::sendEvent(control.data(), &press2); // cancels pressAndHold()
+ QGuiApplication::sendEvent(waitControl.data(), &press);
+ // by the time the second control emits pressAndHold(), we can reliably
+ // assume that the first control would have emitted pressAndHold() if it
+ // wasn't canceled as appropriate by the 2nd press event above
+ QTRY_COMPARE(waitSpy.count(), 1);
+ QCOMPARE(spy.count(), 0);
+ QGuiApplication::sendEvent(control.data(), &release);
+ QGuiApplication::sendEvent(waitControl.data(), &release);
+ QCOMPARE(waitSpy.count(), 1);
+ QCOMPARE(spy.count(), 0);
+ waitSpy.clear();
+}
+
+void tst_PressAndHold::keepSelection_data()
+{
+ QTest::addColumn<QByteArray>("data");
+
+ QTest::newRow("TextField") << QByteArray("import QtQuick.Controls; TextField { text: 'TextField' }");
+ QTest::newRow("TextArea") << QByteArray("import QtQuick.Controls; TextArea { text: 'TextArea' }");
+}
+
+void tst_PressAndHold::keepSelection()
+{
+ QFETCH(QByteArray, data);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(data, QUrl());
+
+ QScopedPointer<QObject> control(component.create());
+ QScopedPointer<QObject> waitControl(component.create());
+ QVERIFY(!control.isNull() && !waitControl.isNull());
+
+ QSignalSpy spy(control.data(), SIGNAL(pressAndHold(QQuickMouseEvent*)));
+ QSignalSpy waitSpy(waitControl.data(), SIGNAL(pressAndHold(QQuickMouseEvent*)));
+ QVERIFY(spy.isValid() && waitSpy.isValid());
+
+ QMouseEvent press(QEvent::MouseButtonPress, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+ QMouseEvent press2(QEvent::MouseButtonPress, QPointF(), Qt::RightButton, Qt::RightButton, Qt::NoModifier);
+ QMouseEvent release(QEvent::MouseButtonRelease, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+
+ QVERIFY(!control->property("text").toString().isEmpty());
+ QVERIFY(QMetaObject::invokeMethod(control.data(), "selectAll"));
+ QCOMPARE(control->property("selectedText"), control->property("text"));
+
+ // pressAndHold() emitted => selection remains
+ QGuiApplication::sendEvent(control.data(), &press);
+ QTRY_COMPARE(spy.count(), 1);
+ QGuiApplication::sendEvent(control.data(), &release);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(control->property("selectedText"), control->property("text"));
+ spy.clear();
+
+ // pressAndHold() canceled by release => selection cleared
+ QGuiApplication::sendEvent(control.data(), &press);
+ QGuiApplication::processEvents();
+ QGuiApplication::sendEvent(control.data(), &release);
+ QCOMPARE(spy.count(), 0);
+ QVERIFY(control->property("selectedText").toString().isEmpty());
+
+ QVERIFY(QMetaObject::invokeMethod(control.data(), "selectAll"));
+ QCOMPARE(control->property("selectedText"), control->property("text"));
+
+ // pressAndHold() canceled by 2nd press => selection cleared
+ QGuiApplication::sendEvent(control.data(), &press);
+ QGuiApplication::sendEvent(control.data(), &press2); // cancels pressAndHold()
+ QGuiApplication::sendEvent(waitControl.data(), &press);
+ // by the time the second control emits pressAndHold(), we can reliably
+ // assume that the first control would have emitted pressAndHold() if it
+ // wasn't canceled as appropriate by the move event above
+ QTRY_COMPARE(waitSpy.count(), 1);
+ QCOMPARE(spy.count(), 0);
+ QGuiApplication::sendEvent(control.data(), &release);
+ QGuiApplication::sendEvent(waitControl.data(), &release);
+ QCOMPARE(waitSpy.count(), 1);
+ QCOMPARE(spy.count(), 0);
+ QVERIFY(control->property("selectedText").toString().isEmpty());
+ waitSpy.clear();
+}
+
+QTEST_MAIN(tst_PressAndHold)
+
+#include "tst_pressandhold.moc"
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/CMakeLists.txt b/tests/auto/quickcontrols2/qquickapplicationwindow/CMakeLists.txt
new file mode 100644
index 0000000000..140d78a14e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from qquickapplicationwindow.pro.
+
+#####################################################################
+## tst_qquickapplicationwindow Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickapplicationwindow
+ SOURCES
+ tst_qquickapplicationwindow.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:qquickapplicationwindow.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickapplicationwindow CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickapplicationwindow CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/activeFocusControl.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/activeFocusControl.qml
new file mode 100644
index 0000000000..ef69499025
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/activeFocusControl.qml
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias container_column: column
+ property alias textInput_column: ti_column
+ property alias textEdit_column: te_column
+ property alias textField_column: tf_column
+ property alias textArea_column: ta_column
+ property alias spinBox_column: sp_column
+ property alias spinContent_column: sp_column.contentItem
+
+ property alias container_frame: frame
+ property alias textInput_frame: ti_frame
+ property alias textEdit_frame: te_frame
+ property alias textField_frame: tf_frame
+ property alias textArea_frame: ta_frame
+ property alias spinBox_frame: sp_frame
+ property alias spinContent_frame: sp_frame.contentItem
+
+ Column {
+ id: column
+
+ TextInput {
+ id: ti_column
+ }
+ TextEdit {
+ id: te_column
+ }
+ TextField {
+ id: tf_column
+ }
+ TextArea {
+ id: ta_column
+ }
+ SpinBox {
+ id: sp_column
+ }
+ }
+
+ Frame {
+ id: frame
+
+ Column {
+ TextInput {
+ id: ti_frame
+ }
+ TextEdit {
+ id: te_frame
+ }
+ TextField {
+ id: tf_frame
+ }
+ TextArea {
+ id: ta_frame
+ }
+ SpinBox {
+ id: sp_frame
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/activefocusontab.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/activefocusontab.qml
new file mode 100644
index 0000000000..07d783acee
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/activefocusontab.qml
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ title: "Test Application Window"
+ width: 100
+ height: 100
+ Item {
+ id: main
+ objectName: "main"
+ width: 100
+ height: 100
+ //focus: true
+ Column {
+ anchors.fill: parent
+ id: column
+ objectName: "column"
+ Item {
+ id: sub1
+ objectName: "sub1"
+ activeFocusOnTab: true
+ Accessible.role: Accessible.Table
+ width: 100
+ height: 50
+ Rectangle {
+ anchors.fill: parent
+ color: parent.activeFocus ? "red" : "black"
+ }
+ }
+ Item {
+ id: sub2
+ objectName: "sub2"
+ activeFocusOnTab: true
+ Accessible.role: Accessible.Table
+ width: 100
+ height: 50
+ Rectangle {
+ anchors.fill: parent
+ color: parent.activeFocus ? "red" : "black"
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/attachedProperties.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/attachedProperties.qml
new file mode 100644
index 0000000000..d241d995f2
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/attachedProperties.qml
@@ -0,0 +1,179 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+ApplicationWindow {
+ property alias childControl: childControl
+ property alias childItem: childItem
+ property alias childObject: childObject
+
+ Control {
+ id: childControl
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+
+ Item {
+ id: childItem
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+
+ QtObject {
+ id: childObject
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+
+ property alias childWindow: childWindow
+ property alias childWindowControl: childWindowControl
+ property alias childWindowItem: childWindowItem
+ property alias childWindowObject: childWindowObject
+
+ Window {
+ id: childWindow
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+
+ Control {
+ id: childWindowControl
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+
+ Item {
+ id: childWindowItem
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+
+ QtObject {
+ id: childWindowObject
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+ }
+
+ property alias childAppWindow: childAppWindow
+ property alias childAppWindowControl: childAppWindowControl
+ property alias childAppWindowItem: childAppWindowItem
+ property alias childAppWindowObject: childAppWindowObject
+
+ ApplicationWindow {
+ id: childAppWindow
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+
+ Control {
+ id: childAppWindowControl
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+
+ Item {
+ id: childAppWindowItem
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+
+ QtObject {
+ id: childAppWindowObject
+
+ property ApplicationWindow attached_window: ApplicationWindow.window
+ property Item attached_contentItem: ApplicationWindow.contentItem
+ property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl
+ property Item attached_header: ApplicationWindow.header
+ property Item attached_footer: ApplicationWindow.footer
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/basicapplicationwindow.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/basicapplicationwindow.qml
new file mode 100644
index 0000000000..738022e9e8
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/basicapplicationwindow.qml
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ title: "Test Application Window"
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/clearfocusondestruction.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/clearfocusondestruction.qml
new file mode 100644
index 0000000000..bf8f61b756
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/clearfocusondestruction.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtGraphicalEffects
+
+ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+
+ property alias textfield: textfield
+
+ /*
+ * The code below is the simplest way we can trigger that the signal
+ * activeFocusItemChanged() is emitted during destruction of the
+ * ApplicationWindow. This caused a crash in QQuickApplicationWindow.
+ */
+ FastBlur {
+ id: fastBlur
+ anchors.fill: parent
+ radius: 30
+ source: ShaderEffectSource {
+ id: effectsource
+ sourceItem: textfield
+ sourceRect: Qt.rect( 0, 0, fastBlur.width, fastBlur.height )
+ }
+ }
+
+ TextField {
+ id: textfield
+ anchors.bottom: parent.bottom
+ focus: true
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/defaultFocus.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/defaultFocus.qml
new file mode 100644
index 0000000000..4651c2fc78
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/defaultFocus.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ visible: true
+ width: 200
+ height: 200
+
+ property bool receivedKeyPress: false
+
+ Item {
+ objectName: "item"
+ focus: true
+ anchors.fill: parent
+
+ Keys.onLeftPressed: receivedKeyPress = true
+ }
+}
+
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/fill.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/fill.qml
new file mode 100644
index 0000000000..082e2409cf
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/fill.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias stackView: stackView
+ property alias nextItem: nextItem
+
+ function pushNextItem() {
+ stackView.push(nextItem, StackView.Immediate);
+ }
+
+ Rectangle {
+ id: nextItem
+ color: "blue"
+ visible: false
+ }
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+
+ initialItem: Rectangle {
+ color: "red"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/focusAfterPopupClosed.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/focusAfterPopupClosed.qml
new file mode 100644
index 0000000000..ca8da3c23b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/focusAfterPopupClosed.qml
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+
+ signal focusScopeKeyPressed
+ signal focusPopupKeyPressed
+
+ property alias fileMenu: fileMenu
+ property alias toolButton: toolButton
+ property alias focusScope: focusScope
+ property alias focusPopup: focusPopup
+
+ header: ToolBar {
+ ToolButton {
+ id: toolButton
+ text: qsTr("File")
+ onClicked: fileMenu.open()
+ focusPolicy: Qt.TabFocus
+
+ Menu {
+ id: fileMenu
+ y: parent.height
+
+ MenuItem {
+ text: qsTr("New")
+ }
+ MenuItem {
+ text: qsTr("Open")
+ }
+ MenuItem {
+ text: qsTr("Close")
+ }
+ }
+ }
+ }
+
+ FocusScope {
+ id: focusScope
+ focus: true
+ anchors.fill: parent
+
+ Keys.onSpacePressed: focusScopeKeyPressed()
+ }
+
+ Popup {
+ id: focusPopup
+ focus: true
+ width: parent.width
+ height: parent.height
+
+ Item {
+ focus: true
+ Keys.onSpacePressed: focusPopupKeyPressed()
+ }
+ }
+}
+
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/font.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/font.qml
new file mode 100644
index 0000000000..f0abbb9a1e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/font.qml
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Templates as T
+
+ApplicationWindow {
+ objectName: "appWin"
+ width: 400
+ height: 400
+
+ property alias mainItem: mainItem
+
+ font.family: "Arial"
+
+ T.Control {
+ id: mainItem
+ objectName: "mainItem"
+ anchors.fill: parent
+ property alias item_2: _item_2;
+ property alias item_3: _item_3;
+ property alias item_4: _item_4;
+ property alias item_5: _item_5;
+ property alias item_6: _item_6;
+ T.Control {
+ id: _item_2
+ objectName: "_item_2"
+ T.Control {
+ id: _item_3
+ objectName: "_item_3"
+ }
+ }
+ T.TextArea {
+ id: _item_4
+ objectName: "_item_4"
+ text: "Text Area"
+ }
+ T.TextField {
+ id: _item_5
+ objectName: "_item_5"
+ text: "Text Field"
+ }
+ T.Label {
+ id: _item_6
+ objectName: "_item_6"
+ text: "Label"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/layout.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/layout.qml
new file mode 100644
index 0000000000..6d4f37946e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/layout.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+
+ menuBar: MenuBar { }
+ header: ToolBar { }
+ footer: ToolBar { }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/layoutLayout.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/layoutLayout.qml
new file mode 100644
index 0000000000..670306fa41
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/layoutLayout.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+
+ header: RowLayout {
+ Rectangle { color: "red"; implicitWidth: 20; implicitHeight: 20; Layout.fillWidth: true}
+ }
+ footer: ColumnLayout {
+ Rectangle { color: "green"; implicitWidth: 20; implicitHeight: 20; Layout.fillWidth: true}
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/locale.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/locale.qml
new file mode 100644
index 0000000000..243ce44089
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/locale.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Templates as T
+
+ApplicationWindow {
+ objectName: "appWin"
+ width: 400
+ height: 400
+
+ property alias mainItem: mainItem
+
+ T.Control {
+ id: mainItem
+ objectName: "mainItem"
+ anchors.fill: parent
+ property alias item_2: _item_2;
+ property alias item_3: _item_3;
+ T.Control {
+ id: _item_2
+ objectName: "_item_2"
+ T.Control {
+ id: _item_3
+ objectName: "_item_3"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/data/opacity.qml b/tests/auto/quickcontrols2/qquickapplicationwindow/data/opacity.qml
new file mode 100644
index 0000000000..d32725223e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/data/opacity.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ title: "Test Application Window"
+ width: 300
+ height: 300
+ opacity: 0.5
+
+ property bool testActive: active
+}
diff --git a/tests/auto/quickcontrols2/qquickapplicationwindow/tst_qquickapplicationwindow.cpp b/tests/auto/quickcontrols2/qquickapplicationwindow/tst_qquickapplicationwindow.cpp
new file mode 100644
index 0000000000..c6a5d1dca9
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickapplicationwindow/tst_qquickapplicationwindow.cpp
@@ -0,0 +1,968 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QtCore/qoperatingsystemversion.h>
+#include <QtTest/QSignalSpy>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickoverlay_p.h>
+#include <QtQuickTemplates2/private/qquickcontrol_p.h>
+#include <QtQuickTemplates2/private/qquicklabel_p.h>
+#include <QtQuickTemplates2/private/qquickmenu_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p.h>
+#include <QtQuickTemplates2/private/qquicktextarea_p.h>
+#include <QtQuickTemplates2/private/qquicktextfield_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+using namespace QQuickVisualTestUtils;
+
+class tst_QQuickApplicationWindow : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickApplicationWindow();
+
+private slots:
+ void qmlCreation();
+ void activeFocusOnTab1();
+ void activeFocusOnTab2();
+ void defaultFocus();
+ void implicitFill();
+ void attachedProperties();
+ void font();
+ void defaultFont();
+ void locale();
+ void activeFocusControl_data();
+ void activeFocusControl();
+ void focusAfterPopupClosed();
+ void clearFocusOnDestruction();
+ void layout();
+ void layoutLayout();
+ void componentComplete();
+ void opacity();
+};
+
+tst_QQuickApplicationWindow::tst_QQuickApplicationWindow()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+ QQuickStyle::setStyle("Basic");
+}
+
+void tst_QQuickApplicationWindow::qmlCreation()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("basicapplicationwindow.qml"));
+ QObject* created = component.create();
+ QScopedPointer<QObject> cleanup(created);
+ QVERIFY(created);
+
+ QQuickWindow* window = qobject_cast<QQuickWindow*>(created);
+ QVERIFY(window);
+ QVERIFY(!window->isVisible());
+
+ QCOMPARE(created->property("title"), QVariant("Test Application Window"));
+
+ QQuickItem* statusBar = qvariant_cast<QQuickItem*>(created->property("statusBar"));
+ QVERIFY(!statusBar);
+
+ QQuickItem* header = qvariant_cast<QQuickItem*>(created->property("header"));
+ QVERIFY(!header);
+
+ QQuickItem* footer = qvariant_cast<QQuickItem*>(created->property("footer"));
+ QVERIFY(!footer);
+}
+
+void tst_QQuickApplicationWindow::activeFocusOnTab1()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("activefocusontab.qml"));
+ QObject* created = component.create();
+ QScopedPointer<QObject> cleanup(created);
+ QVERIFY(created);
+
+ QQuickWindow* window = qobject_cast<QQuickWindow*>(created);
+ QVERIFY(window);
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+ QVERIFY(QGuiApplication::focusWindow() == window);
+
+ QQuickItem* contentItem = window->contentItem();
+ QVERIFY(contentItem);
+ QVERIFY(contentItem->hasActiveFocus());
+
+ QQuickItem* item = findItem<QQuickItem>(window->contentItem(), "sub1");
+ QVERIFY(item);
+ QVERIFY(!item->hasActiveFocus());
+
+ // Tab: contentItem->sub1
+ {
+ QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
+ QGuiApplication::sendEvent(window, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QQuickItem>(window->contentItem(), "sub1");
+ QVERIFY(item);
+ QVERIFY(item->hasActiveFocus());
+ }
+
+ // Tab: sub1->sub2
+ {
+ QKeyEvent key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
+ QGuiApplication::sendEvent(window, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QQuickItem>(window->contentItem(), "sub2");
+ QVERIFY(item);
+ QVERIFY(item->hasActiveFocus());
+ }
+
+ // Tab: sub2->sub1
+ {
+ QKeyEvent key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
+ QGuiApplication::sendEvent(window, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QQuickItem>(window->contentItem(), "sub1");
+ QVERIFY(item);
+ QVERIFY(item->hasActiveFocus());
+ }
+}
+
+void tst_QQuickApplicationWindow::activeFocusOnTab2()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("activefocusontab.qml"));
+ QObject* created = component.create();
+ QScopedPointer<QObject> cleanup(created);
+ QVERIFY(created);
+
+ QQuickWindow* window = qobject_cast<QQuickWindow*>(created);
+ QVERIFY(window);
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+ QVERIFY(QGuiApplication::focusWindow() == window);
+
+ QQuickItem* contentItem = window->contentItem();
+ QVERIFY(contentItem);
+ QVERIFY(contentItem->hasActiveFocus());
+
+ QQuickItem* item = findItem<QQuickItem>(window->contentItem(), "sub2");
+ QVERIFY(item);
+ QVERIFY(!item->hasActiveFocus());
+
+ // BackTab: contentItem->sub2
+ {
+ QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
+ QGuiApplication::sendEvent(window, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QQuickItem>(window->contentItem(), "sub2");
+ QVERIFY(item);
+ QVERIFY(item->hasActiveFocus());
+ }
+
+ // BackTab: sub2->sub1
+ {
+ QKeyEvent key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
+ QGuiApplication::sendEvent(window, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QQuickItem>(window->contentItem(), "sub1");
+ QVERIFY(item);
+ QVERIFY(item->hasActiveFocus());
+ }
+
+ // BackTab: sub1->sub2
+ {
+ QKeyEvent key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
+ QGuiApplication::sendEvent(window, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QQuickItem>(window->contentItem(), "sub2");
+ QVERIFY(item);
+ QVERIFY(item->hasActiveFocus());
+ }
+}
+
+void tst_QQuickApplicationWindow::defaultFocus()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("defaultFocus.qml"));
+ QObject* created = component.create();
+ QScopedPointer<QObject> cleanup(created);
+ Q_UNUSED(cleanup);
+ QVERIFY(created);
+
+ QQuickWindow* window = qobject_cast<QQuickWindow*>(created);
+ QVERIFY(window);
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+ QVERIFY(QGuiApplication::focusWindow() == window);
+
+ QQuickItem* contentItem = window->contentItem();
+ QVERIFY(contentItem);
+ QVERIFY(contentItem->hasActiveFocus());
+
+ // A single item in an ApplicationWindow with focus: true should receive focus.
+ QQuickItem* item = findItem<QQuickItem>(window->contentItem(), "item");
+ QVERIFY(item);
+ QVERIFY(item->hasFocus());
+ QVERIFY(item->hasActiveFocus());
+}
+
+static QSizeF getExpectedElementSize()
+{
+#ifndef Q_OS_ANDROID
+ // These values are taken from the QML file.
+ return QSizeF(400.0, 400.0);
+#else
+ // On Android we have to query screen parameters at runtime, because on
+ // Android the Quick element will take the whole screen size.
+ const QSize size = QGuiApplication::primaryScreen()->availableSize();
+ return QSizeF(size);
+#endif
+}
+
+void tst_QQuickApplicationWindow::implicitFill()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("fill.qml"));
+ QObject* created = component.create();
+ QScopedPointer<QObject> cleanup(created);
+ QVERIFY(created);
+
+ QQuickWindow* window = qobject_cast<QQuickWindow*>(created);
+ QVERIFY(window);
+ QVERIFY(!window->isVisible());
+ QCOMPARE(window->width(), 400);
+ QCOMPARE(window->height(), 400);
+
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ const QSizeF expectedSize = getExpectedElementSize();
+
+ QQuickItem *stackView = window->property("stackView").value<QQuickItem*>();
+ QVERIFY(stackView);
+ QCOMPARE(stackView->width(), expectedSize.width());
+ QCOMPARE(stackView->height(), expectedSize.height());
+
+ QQuickItem *nextItem = window->property("nextItem").value<QQuickItem*>();
+ QVERIFY(nextItem);
+
+ QVERIFY(QMetaObject::invokeMethod(window, "pushNextItem"));
+ QCOMPARE(nextItem->width(), expectedSize.width());
+ QCOMPARE(nextItem->height(), expectedSize.height());
+}
+
+void tst_QQuickApplicationWindow::attachedProperties()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("attachedProperties.qml"));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QQuickApplicationWindow *window = qobject_cast<QQuickApplicationWindow *>(object.data());
+ QVERIFY(window);
+
+ QQuickItem *childControl = object->property("childControl").value<QQuickItem *>();
+ QVERIFY(childControl);
+ QCOMPARE(childControl->property("attached_window").value<QQuickApplicationWindow *>(), window);
+ QCOMPARE(childControl->property("attached_contentItem").value<QQuickItem *>(), window->contentItem());
+ QCOMPARE(childControl->property("attached_activeFocusControl").value<QQuickItem *>(), window->activeFocusControl());
+ QCOMPARE(childControl->property("attached_header").value<QQuickItem *>(), window->header());
+ QCOMPARE(childControl->property("attached_footer").value<QQuickItem *>(), window->footer());
+
+ QQuickItem *childItem = object->property("childItem").value<QQuickItem *>();
+ QVERIFY(childItem);
+ QCOMPARE(childItem->property("attached_window").value<QQuickApplicationWindow *>(), window);
+ QCOMPARE(childItem->property("attached_contentItem").value<QQuickItem *>(), window->contentItem());
+ QCOMPARE(childItem->property("attached_activeFocusControl").value<QQuickItem *>(), window->activeFocusControl());
+ QCOMPARE(childItem->property("attached_header").value<QQuickItem *>(), window->header());
+ QCOMPARE(childItem->property("attached_footer").value<QQuickItem *>(), window->footer());
+
+ QObject *childObject = object->property("childObject").value<QObject *>();
+ QVERIFY(childObject);
+ QVERIFY(!childObject->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childObject->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childObject->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childObject->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childObject->property("attached_footer").value<QQuickItem *>());
+
+ QQuickWindow *childWindow = object->property("childWindow").value<QQuickWindow *>();
+ QVERIFY(childWindow);
+ QVERIFY(!childWindow->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childWindow->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childWindow->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childWindow->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childWindow->property("attached_footer").value<QQuickItem *>());
+
+ QQuickItem *childWindowControl = object->property("childWindowControl").value<QQuickItem *>();
+ QVERIFY(childWindowControl);
+ QVERIFY(!childWindowControl->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childWindowControl->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childWindowControl->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childWindowControl->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childWindowControl->property("attached_footer").value<QQuickItem *>());
+
+ QQuickItem *childWindowItem = object->property("childWindowItem").value<QQuickItem *>();
+ QVERIFY(childWindowItem);
+ QVERIFY(!childWindowItem->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childWindowItem->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childWindowItem->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childWindowItem->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childWindowItem->property("attached_footer").value<QQuickItem *>());
+
+ QObject *childWindowObject = object->property("childWindowObject").value<QObject *>();
+ QVERIFY(childWindowObject);
+ QVERIFY(!childWindowObject->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childWindowObject->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childWindowObject->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childWindowObject->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childWindowObject->property("attached_footer").value<QQuickItem *>());
+
+ QQuickApplicationWindow *childAppWindow = object->property("childAppWindow").value<QQuickApplicationWindow *>();
+ QVERIFY(childAppWindow);
+ QVERIFY(!childAppWindow->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childAppWindow->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childAppWindow->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childAppWindow->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childAppWindow->property("attached_footer").value<QQuickItem *>());
+
+ QQuickItem *childAppWindowControl = object->property("childAppWindowControl").value<QQuickItem *>();
+ QVERIFY(childAppWindowControl);
+ QCOMPARE(childAppWindowControl->property("attached_window").value<QQuickApplicationWindow *>(), childAppWindow);
+ QCOMPARE(childAppWindowControl->property("attached_contentItem").value<QQuickItem *>(), childAppWindow->contentItem());
+ QCOMPARE(childAppWindowControl->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindow->activeFocusControl());
+ QCOMPARE(childAppWindowControl->property("attached_header").value<QQuickItem *>(), childAppWindow->header());
+ QCOMPARE(childAppWindowControl->property("attached_footer").value<QQuickItem *>(), childAppWindow->footer());
+
+ QQuickItem *childAppWindowItem = object->property("childAppWindowItem").value<QQuickItem *>();
+ QVERIFY(childAppWindowItem);
+ QCOMPARE(childAppWindowItem->property("attached_window").value<QQuickApplicationWindow *>(), childAppWindow);
+ QCOMPARE(childAppWindowItem->property("attached_contentItem").value<QQuickItem *>(), childAppWindow->contentItem());
+ QCOMPARE(childAppWindowItem->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindow->activeFocusControl());
+ QCOMPARE(childAppWindowItem->property("attached_header").value<QQuickItem *>(), childAppWindow->header());
+ QCOMPARE(childAppWindowItem->property("attached_footer").value<QQuickItem *>(), childAppWindow->footer());
+
+ QObject *childAppWindowObject = object->property("childAppWindowObject").value<QObject *>();
+ QVERIFY(childAppWindowObject);
+ QVERIFY(!childAppWindowObject->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childAppWindowObject->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childAppWindowObject->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childAppWindowObject->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childAppWindowObject->property("attached_footer").value<QQuickItem *>());
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QVERIFY(!childControl->hasActiveFocus());
+ childControl->forceActiveFocus();
+ QTRY_VERIFY(childControl->hasActiveFocus());
+ QCOMPARE(window->activeFocusItem(), childControl);
+ QCOMPARE(childControl->property("attached_activeFocusControl").value<QQuickItem *>(), childControl);
+
+ QQuickItem *header = new QQuickItem;
+ window->setHeader(header);
+ QCOMPARE(window->header(), header);
+ QCOMPARE(childControl->property("attached_header").value<QQuickItem *>(), header);
+
+ QQuickItem *footer = new QQuickItem;
+ window->setFooter(footer);
+ QCOMPARE(window->footer(), footer);
+ QCOMPARE(childControl->property("attached_footer").value<QQuickItem *>(), footer);
+
+ childAppWindow->show();
+ childAppWindow->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(childAppWindow));
+
+ QVERIFY(!childAppWindowControl->hasActiveFocus());
+ childAppWindowControl->forceActiveFocus();
+ QTRY_VERIFY(childAppWindowControl->hasActiveFocus());
+ QCOMPARE(childAppWindow->activeFocusItem(), childAppWindowControl);
+ QCOMPARE(childAppWindowControl->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindowControl);
+
+ childControl->setParentItem(childAppWindow->contentItem());
+ QCOMPARE(childControl->window(), childAppWindow);
+ QCOMPARE(childControl->property("attached_window").value<QQuickApplicationWindow *>(), childAppWindow);
+ QCOMPARE(childControl->property("attached_contentItem").value<QQuickItem *>(), childAppWindow->contentItem());
+ QCOMPARE(childControl->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindowControl);
+ QCOMPARE(childControl->property("attached_header").value<QQuickItem *>(), childAppWindow->header());
+ QCOMPARE(childControl->property("attached_footer").value<QQuickItem *>(), childAppWindow->footer());
+
+ childItem->setParentItem(childAppWindow->contentItem());
+ QCOMPARE(childItem->window(), childAppWindow);
+ QCOMPARE(childItem->property("attached_window").value<QQuickApplicationWindow *>(), childAppWindow);
+ QCOMPARE(childItem->property("attached_contentItem").value<QQuickItem *>(), childAppWindow->contentItem());
+ QCOMPARE(childItem->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindowControl);
+ QCOMPARE(childItem->property("attached_header").value<QQuickItem *>(), childAppWindow->header());
+ QCOMPARE(childItem->property("attached_footer").value<QQuickItem *>(), childAppWindow->footer());
+
+ childControl->setParentItem(nullptr);
+ QVERIFY(!childControl->window());
+ QVERIFY(!childControl->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childControl->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_footer").value<QQuickItem *>());
+
+ childItem->setParentItem(nullptr);
+ QVERIFY(!childItem->window());
+ QVERIFY(!childItem->property("attached_window").value<QQuickApplicationWindow *>());
+ QVERIFY(!childItem->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childItem->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childItem->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childItem->property("attached_footer").value<QQuickItem *>());
+ childAppWindow->close();
+ qApp->processEvents();
+
+ childWindow->show();
+ childWindow->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(childWindow));
+
+ QVERIFY(!childWindowControl->hasActiveFocus());
+ childWindowControl->forceActiveFocus();
+ QTRY_VERIFY(childWindowControl->hasActiveFocus());
+ QCOMPARE(childWindow->activeFocusItem(), childWindowControl);
+ QCOMPARE(childWindowControl->property("attached_activeFocusControl").value<QQuickItem *>(), childWindowControl);
+
+ childControl->setParentItem(childWindow->contentItem());
+ QCOMPARE(childControl->window(), childWindow);
+ QVERIFY(!childControl->property("attached_window").value<QQuickWindow *>());
+ QCOMPARE(childControl->property("attached_activeFocusControl").value<QQuickItem *>(), childWindowControl);
+ QVERIFY(!childControl->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_footer").value<QQuickItem *>());
+
+ childItem->setParentItem(childWindow->contentItem());
+ QCOMPARE(childItem->window(), childWindow);
+ QVERIFY(!childControl->property("attached_window").value<QQuickWindow *>());
+ QCOMPARE(childControl->property("attached_activeFocusControl").value<QQuickItem *>(), childWindowControl);
+ QVERIFY(!childControl->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_footer").value<QQuickItem *>());
+
+ childControl->setParentItem(nullptr);
+ QVERIFY(!childControl->window());
+ QVERIFY(!childControl->property("attached_window").value<QQuickWindow *>());
+ QVERIFY(!childControl->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childControl->property("attached_footer").value<QQuickItem *>());
+
+ childItem->setParentItem(nullptr);
+ QVERIFY(!childItem->window());
+ QVERIFY(!childItem->property("attached_window").value<QQuickWindow *>());
+ QVERIFY(!childItem->property("attached_contentItem").value<QQuickItem *>());
+ QVERIFY(!childItem->property("attached_activeFocusControl").value<QQuickItem *>());
+ QVERIFY(!childItem->property("attached_header").value<QQuickItem *>());
+ QVERIFY(!childItem->property("attached_footer").value<QQuickItem *>());
+ childWindow->close();
+}
+
+void tst_QQuickApplicationWindow::font()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("font.qml"));
+ QObject* created = component.create();
+ QScopedPointer<QObject> cleanup(created);
+ QVERIFY(created);
+
+ QQuickApplicationWindow* window = qobject_cast<QQuickApplicationWindow*>(created);
+ QVERIFY(window);
+ QVERIFY(!window->isVisible());
+ QCOMPARE(window->width(), 400);
+ QCOMPARE(window->height(), 400);
+
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QFont font = window->font();
+
+ const QSizeF expectedSize = getExpectedElementSize();
+
+ QQuickControl *mainItem = window->property("mainItem").value<QQuickControl*>();
+ QVERIFY(mainItem);
+ QCOMPARE(mainItem->width(), expectedSize.width());
+ QCOMPARE(mainItem->height(), expectedSize.height());
+ QCOMPARE(mainItem->font(), font);
+
+ QQuickControl *item2 = mainItem->property("item_2").value<QQuickControl*>();
+ QVERIFY(item2);
+ QQuickControl *item3 = mainItem->property("item_3").value<QQuickControl*>();
+ QVERIFY(item3);
+ QQuickTextArea *item4 = mainItem->property("item_4").value<QQuickTextArea*>();
+ QVERIFY(item4);
+ QQuickTextField *item5 = mainItem->property("item_5").value<QQuickTextField*>();
+ QVERIFY(item5);
+ QQuickLabel *item6 = mainItem->property("item_6").value<QQuickLabel*>();
+ QVERIFY(item6);
+
+ QCOMPARE(item2->font(), font);
+ QCOMPARE(item3->font(), font);
+ QCOMPARE(item4->font(), font);
+ QCOMPARE(item5->font(), font);
+ QCOMPARE(item6->font(), font);
+
+ int pointSize = font.pointSize();
+ font.setPixelSize(pointSize + 5);
+ window->setFont(font);
+
+ QCOMPARE(window->font(), font);
+ QCOMPARE(mainItem->font(), font);
+ QCOMPARE(item2->font(), font);
+ QCOMPARE(item3->font(), font);
+ QCOMPARE(item4->font(), font);
+ QCOMPARE(item5->font(), font);
+ QCOMPARE(item6->font(), font);
+}
+
+class TestTheme : public QQuickTheme
+{
+public:
+ TestTheme()
+ {
+ setFont(System, QFont("Courier"));
+ }
+};
+
+void tst_QQuickApplicationWindow::defaultFont()
+{
+ QQuickThemePrivate::instance.reset(new TestTheme);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick.Controls; ApplicationWindow { }", QUrl());
+
+ QScopedPointer<QQuickApplicationWindow> window;
+ window.reset(static_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY(!window.isNull());
+ QCOMPARE(window->font(), QQuickTheme::font(QQuickTheme::System));
+}
+
+void tst_QQuickApplicationWindow::locale()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("locale.qml"));
+ QObject* created = component.create();
+ QScopedPointer<QObject> cleanup(created);
+ QVERIFY(created);
+
+ QQuickApplicationWindow* window = qobject_cast<QQuickApplicationWindow*>(created);
+ QVERIFY(window);
+ QVERIFY(!window->isVisible());
+ QCOMPARE(window->width(), 400);
+ QCOMPARE(window->height(), 400);
+
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QLocale l = window->locale();
+
+ const QSizeF expectedSize = getExpectedElementSize();
+
+ QQuickControl *mainItem = window->property("mainItem").value<QQuickControl*>();
+ QVERIFY(mainItem);
+ QCOMPARE(mainItem->width(), expectedSize.width());
+ QCOMPARE(mainItem->height(), expectedSize.height());
+ QCOMPARE(mainItem->locale(), l);
+
+ QQuickControl *item2 = mainItem->property("item_2").value<QQuickControl*>();
+ QVERIFY(item2);
+ QQuickControl *item3 = mainItem->property("item_3").value<QQuickControl*>();
+ QVERIFY(item3);
+
+ QCOMPARE(item2->locale(), l);
+ QCOMPARE(item3->locale(), l);
+
+ l = QLocale("en_US");
+ window->setLocale(l);
+
+ QCOMPARE(window->locale(), l);
+ QCOMPARE(mainItem->locale(), l);
+ QCOMPARE(item2->locale(), l);
+ QCOMPARE(item3->locale(), l);
+
+ l = QLocale("ar_EG");
+ window->setLocale(l);
+
+ QCOMPARE(window->locale(), l);
+ QCOMPARE(mainItem->locale(), l);
+ QCOMPARE(item2->locale(), l);
+ QCOMPARE(item3->locale(), l);
+}
+
+void tst_QQuickApplicationWindow::activeFocusControl_data()
+{
+ QTest::addColumn<QByteArray>("containerName");
+ QTest::addColumn<QByteArray>("activeFocusItemName");
+ QTest::addColumn<QByteArray>("activeFocusControlName");
+
+ QTest::newRow("Column:TextInput") << QByteArray("container_column") << QByteArray("textInput_column") << QByteArray();
+ QTest::newRow("Column:TextEdit") << QByteArray("container_column") << QByteArray("textEdit_column") << QByteArray();
+ QTest::newRow("Column:TextField") << QByteArray("container_column") << QByteArray("textField_column") << QByteArray("textField_column");
+ QTest::newRow("Column:TextArea") << QByteArray("container_column") << QByteArray("textArea_column") << QByteArray("textArea_column");
+ QTest::newRow("Column:SpinBox") << QByteArray("container_column") << QByteArray("spinContent_column") << QByteArray("spinBox_column");
+
+ QTest::newRow("Frame:TextInput") << QByteArray("container_frame") << QByteArray("textInput_frame") << QByteArray("container_frame");
+ QTest::newRow("Frame:TextEdit") << QByteArray("container_frame") << QByteArray("textEdit_frame") << QByteArray("container_frame");
+ QTest::newRow("Frame:TextField") << QByteArray("container_frame") << QByteArray("textField_frame") << QByteArray("textField_frame");
+ QTest::newRow("Frame:TextArea") << QByteArray("container_frame") << QByteArray("textArea_frame") << QByteArray("textArea_frame");
+ QTest::newRow("Frame:SpinBox") << QByteArray("container_frame") << QByteArray("spinContent_frame") << QByteArray("spinBox_frame");
+}
+
+void tst_QQuickApplicationWindow::activeFocusControl()
+{
+ QFETCH(QByteArray, containerName);
+ QFETCH(QByteArray, activeFocusItemName);
+ QFETCH(QByteArray, activeFocusControlName);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("activeFocusControl.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(!object.isNull());
+
+ QQuickApplicationWindow* window = qobject_cast<QQuickApplicationWindow*>(object.data());
+ QVERIFY(window);
+ QVERIFY(!window->isVisible());
+ QCOMPARE(window->width(), 400);
+ QCOMPARE(window->height(), 400);
+
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickItem *container = window->property(containerName).value<QQuickItem*>();
+ QVERIFY(container);
+
+ QQuickItem *activeFocusItem = window->property(activeFocusItemName).value<QQuickItem*>();
+ QVERIFY(activeFocusItem);
+ activeFocusItem->forceActiveFocus();
+ QVERIFY(activeFocusItem->hasActiveFocus());
+ QCOMPARE(window->activeFocusItem(), activeFocusItem);
+
+ QQuickItem *activeFocusControl = window->property(activeFocusControlName).value<QQuickItem*>();
+ if (activeFocusControlName.isEmpty()) {
+ QVERIFY(!activeFocusControl);
+ } else {
+ QVERIFY(activeFocusControl);
+ QVERIFY(activeFocusControl->hasActiveFocus());
+ }
+ QCOMPARE(window->activeFocusControl(), activeFocusControl);
+}
+
+void tst_QQuickApplicationWindow::focusAfterPopupClosed()
+{
+#ifdef Q_OS_ANDROID
+ QSKIP("This test crashes in Android emulator because of GLES issues (QTBUG-100991)");
+#endif
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("focusAfterPopupClosed.qml"));
+ QScopedPointer<QQuickWindow> window(qobject_cast<QQuickWindow*>(component.create()));
+ QVERIFY(window);
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+ QVERIFY(QGuiApplication::focusWindow() == window.data());
+
+ QQuickItem* contentItem = window->contentItem();
+ QVERIFY(contentItem);
+ QVERIFY(contentItem->hasActiveFocus());
+
+ QQuickItem* focusScope = window->property("focusScope").value<QQuickItem*>();
+ QVERIFY(focusScope);
+ QVERIFY(focusScope->hasActiveFocus());
+
+ QSignalSpy focusScopeSpy(window.data(), SIGNAL(focusScopeKeyPressed()));
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(focusScopeSpy.count(), 1);
+
+ // Open the menu.
+ QQuickItem* toolButton = window->property("toolButton").value<QQuickItem*>();
+ QVERIFY(toolButton);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier,
+ toolButton->mapFromScene(QPointF(toolButton->width() / 2, toolButton->height() / 2)).toPoint());
+ QVERIFY(!focusScope->hasActiveFocus());
+
+ // The FocusScope shouldn't receive any key events while the menu is open.
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(focusScopeSpy.count(), 1);
+
+ // Close the menu. The FocusScope should regain focus.
+ QTest::keyClick(window.data(), Qt::Key_Escape);
+ QVERIFY(focusScope->hasActiveFocus());
+
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(focusScopeSpy.count(), 2);
+
+ QQuickPopup *focusPopup = window->property("focusPopup").value<QQuickPopup*>();
+ QVERIFY(focusPopup);
+ QVERIFY(!focusPopup->hasActiveFocus());
+
+ focusPopup->open();
+ QVERIFY(focusPopup->isVisible());
+
+ QSignalSpy focusPopupSpy(window.data(), SIGNAL(focusPopupKeyPressed()));
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(focusPopupSpy.count(), 1);
+
+ QQuickMenu *fileMenu = window->property("fileMenu").value<QQuickMenu*>();
+ QVERIFY(fileMenu);
+ fileMenu->open();
+ QVERIFY(fileMenu->isVisible());
+
+ // The Popup shouldn't receive any key events while the menu is open.
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(focusPopupSpy.count(), 1);
+
+ // Close the menu. The Popup should regain focus.
+ QTest::keyClick(window.data(), Qt::Key_Escape);
+ QVERIFY(focusPopup->hasActiveFocus());
+
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(focusPopupSpy.count(), 2);
+
+ // Close the popup. The FocusScope should regain focus.
+ QTest::keyClick(window.data(), Qt::Key_Escape);
+ QVERIFY(focusScope->hasActiveFocus());
+
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(focusScopeSpy.count(), 3);
+}
+
+void tst_QQuickApplicationWindow::clearFocusOnDestruction()
+{
+ if (!canImportModule("import QtGraphicalEffects; DropShadow {}"))
+ QSKIP("Test requires QtGraphicalEffects");
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("clearfocusondestruction.qml"));
+ QScopedPointer<QQuickWindow> window(qobject_cast<QQuickWindow*>(component.create()));
+ QVERIFY(window);
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+ QVERIFY(QGuiApplication::focusWindow() == window.data());
+
+ QQuickItem* contentItem = window->contentItem();
+ QVERIFY(contentItem);
+ QVERIFY(contentItem->hasActiveFocus());
+
+ QQuickItem* focusScope = window->property("textfield").value<QQuickItem*>();
+ QVERIFY(focusScope);
+ QVERIFY(focusScope->hasActiveFocus());
+
+ QSignalSpy spy(window.data(), SIGNAL(activeFocusControlChanged()));
+ // destroy the window, do not crash
+ window.reset();
+
+ /*
+ QQuickWindow::activeFocusItemChanged() is emitted inconsistently and
+ only for certain use cases. Ideally it should be emitted whenever a
+ QQuickWindow with a focus item is destroyed, but it doesn't... It might
+ also be favorable to not emit it for performance reason.
+
+ However, activeFocusControlChanged() is emitted more consistently, which
+ of course makes it inconsistent with the emission of
+ activeFocusItemChanged()....
+
+ Therefore, if you have good reasons to change the behavior (and not emit
+ it) take the test below with a grain of salt.
+ */
+ QCOMPARE(spy.count(), 1);
+}
+
+void tst_QQuickApplicationWindow::layout()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("layout.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(!object.isNull());
+
+ QQuickApplicationWindow* window = qobject_cast<QQuickApplicationWindow*>(object.data());
+ QVERIFY(window);
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickItem *content = window->contentItem();
+ QVERIFY(content);
+ QQuickItem *menuBar = window->menuBar();
+ QVERIFY(menuBar);
+ QQuickItem *header = window->header();
+ QVERIFY(header);
+ QQuickItem *footer = window->footer();
+ QVERIFY(footer);
+
+ QCOMPARE(menuBar->x(), 0.0);
+ QCOMPARE(menuBar->y(), -menuBar->height() - header->height());
+ QCOMPARE(header->width(), qreal(window->width()));
+ QVERIFY(menuBar->height() > 0);
+
+ QCOMPARE(header->x(), 0.0);
+ QCOMPARE(header->y(), -header->height());
+ QCOMPARE(header->width(), qreal(window->width()));
+ QVERIFY(header->height() > 0);
+
+ QCOMPARE(footer->x(), 0.0);
+ QCOMPARE(footer->y(), content->height());
+ QCOMPARE(footer->width(), qreal(window->width()));
+ QVERIFY(footer->height() > 0.0);
+
+ QCOMPARE(content->x(), 0.0);
+ QCOMPARE(content->y(), menuBar->height() + header->height());
+ QCOMPARE(content->width(), qreal(window->width()));
+ QCOMPARE(content->height(), window->height() - menuBar->height() - header->height() - footer->height());
+
+ menuBar->setVisible(false);
+ QCOMPARE(content->x(), 0.0);
+ QCOMPARE(content->y(), header->height());
+ QCOMPARE(content->width(), qreal(window->width()));
+ QCOMPARE(content->height(), window->height() - header->height() - footer->height());
+
+ header->setVisible(false);
+ QCOMPARE(content->x(), 0.0);
+ QCOMPARE(content->y(), 0.0);
+ QCOMPARE(content->width(), qreal(window->width()));
+ QCOMPARE(content->height(), window->height() - footer->height());
+
+ footer->setVisible(false);
+ QCOMPARE(content->x(), 0.0);
+ QCOMPARE(content->y(), 0.0);
+ QCOMPARE(content->width(), qreal(window->width()));
+ QCOMPARE(content->height(), qreal(window->height()));
+}
+
+void tst_QQuickApplicationWindow::layoutLayout()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("layoutLayout.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QQuickApplicationWindow* window = qobject_cast<QQuickApplicationWindow*>(object.data());
+ QVERIFY(window);
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickItem *content = window->contentItem();
+ QVERIFY(content);
+ QQuickItem *header = window->header();
+ QVERIFY(header);
+ QQuickItem *footer = window->footer();
+ QVERIFY(footer);
+
+ QQuickItem *headerChild = header->findChild<QQuickItem*>();
+ QVERIFY(headerChild);
+ QCOMPARE(header->x(), 0.0);
+ QCOMPARE(header->y(), -header->height());
+ QCOMPARE(header->width(), qreal(window->width()));
+ QCOMPARE(headerChild->width(), qreal(window->width()));
+ QVERIFY(header->height() > 0);
+
+ QQuickItem *footerChild = header->findChild<QQuickItem*>();
+ QVERIFY(footerChild);
+ QCOMPARE(footer->x(), 0.0);
+ QCOMPARE(footer->y(), content->height());
+ QCOMPARE(footer->width(), qreal(window->width()));
+ QCOMPARE(footerChild->width(), qreal(window->width()));
+ QVERIFY(footer->height() > 0.0);
+}
+
+class FriendlyApplicationWindow : public QQuickApplicationWindow
+{
+ friend class tst_QQuickApplicationWindow;
+};
+
+void tst_QQuickApplicationWindow::componentComplete()
+{
+ FriendlyApplicationWindow cppWindow;
+ QVERIFY(cppWindow.isComponentComplete());
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick.Controls; ApplicationWindow { }", QUrl());
+
+ FriendlyApplicationWindow *qmlWindow = static_cast<FriendlyApplicationWindow *>(component.beginCreate(engine.rootContext()));
+ QVERIFY(qmlWindow);
+ QVERIFY(!qmlWindow->isComponentComplete());
+
+ component.completeCreate();
+ QVERIFY(qmlWindow->isComponentComplete());
+}
+
+void tst_QQuickApplicationWindow::opacity()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("opacity.qml"));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ QQuickApplicationWindow *window = qobject_cast<QQuickApplicationWindow *>(object.data());
+ QVERIFY(window);
+}
+
+QTEST_MAIN(tst_QQuickApplicationWindow)
+
+#include "tst_qquickapplicationwindow.moc"
diff --git a/tests/auto/quickcontrols2/qquickcolor/CMakeLists.txt b/tests/auto/quickcontrols2/qquickcolor/CMakeLists.txt
new file mode 100644
index 0000000000..2cbbe9eb8b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickcolor/CMakeLists.txt
@@ -0,0 +1,25 @@
+# Generated from qquickcolor.pro.
+
+#####################################################################
+## tst_qquickcolor Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/tst_*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickcolor
+ GUI
+ QMLTEST
+ SOURCES
+ tst_qquickcolor.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:qquickcolor.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/qquickcolor/data/tst_color.qml b/tests/auto/quickcontrols2/qquickcolor/data/tst_color.qml
new file mode 100644
index 0000000000..cdd07e1481
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickcolor/data/tst_color.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtTest
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+TestCase {
+ id: testCase
+ name: "Color"
+
+ function test_transparent() {
+ compare(Color.transparent("red", 0.2), Qt.rgba(1, 0, 0, 0.2))
+ compare(Color.transparent(Qt.rgba(0, 1, 0, 1), 0.2), Qt.rgba(0, 1, 0, 0.2))
+ compare(Color.transparent("#0000ff", 0.2), Qt.rgba(0, 0, 1, 0.2))
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickcolor/tst_qquickcolor.cpp b/tests/auto/quickcontrols2/qquickcolor/tst_qquickcolor.cpp
new file mode 100644
index 0000000000..94c6008053
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickcolor/tst_qquickcolor.cpp
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+QUICK_TEST_MAIN(tst_qquickcolor)
diff --git a/tests/auto/quickcontrols2/qquickcontrol/CMakeLists.txt b/tests/auto/quickcontrols2/qquickcontrol/CMakeLists.txt
new file mode 100644
index 0000000000..e090869744
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickcontrol/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from qquickcontrol.pro.
+
+#####################################################################
+## tst_qquickcontrol Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickcontrol
+ SOURCES
+ tst_qquickcontrol.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:qquickcontrol.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickcontrol CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickcontrol CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickcontrol/data/flickable.qml b/tests/auto/quickcontrols2/qquickcontrol/data/flickable.qml
new file mode 100644
index 0000000000..0ac723207e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickcontrol/data/flickable.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias flickable: flickable
+ property alias button: button
+
+ Flickable {
+ id: flickable
+ width: 300
+ height: 400
+ pressDelay: 50
+ Button {
+ id: button
+ text: "This is a test button"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickcontrol/data/fractionalFontSize.qml b/tests/auto/quickcontrols2/qquickcontrol/data/fractionalFontSize.qml
new file mode 100644
index 0000000000..a4574e460e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickcontrol/data/fractionalFontSize.qml
@@ -0,0 +1,18 @@
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias control: ctrl
+
+ Control {
+ id: ctrl
+ contentItem: Text {
+ font.pointSize: 10.5
+ elide: Text.ElideRight
+ text: "This is some sample text"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickcontrol/data/resizeBackgroundKeepsBindings.qml b/tests/auto/quickcontrols2/qquickcontrol/data/resizeBackgroundKeepsBindings.qml
new file mode 100644
index 0000000000..9a6a159990
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickcontrol/data/resizeBackgroundKeepsBindings.qml
@@ -0,0 +1,42 @@
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+
+ApplicationWindow {
+ width: 640
+ height: 80
+ visible: true
+
+ Slider {
+ id: control
+ value: 0.5
+ anchors.fill: parent
+
+ background: Rectangle {
+ id: background
+ x: control.leftPadding
+ y: control.topPadding + control.availableHeight / 2 - height / 2
+ implicitHeight: 4
+ width: control.availableWidth
+ height: implicitHeight
+ radius: 2
+ color: "#bdbebf"
+
+ Rectangle {
+ width: control.visualPosition * parent.width
+ height: parent.height
+ color: "#21be2b"
+ radius: 2
+ }
+ }
+
+ handle: Rectangle {
+ x: control.leftPadding + control.visualPosition * (control.availableWidth - width)
+ y: control.topPadding + control.availableHeight / 2 - height / 2
+ implicitWidth: 26
+ implicitHeight: 26
+ radius: 13
+ color: control.pressed ? "#f0f0f0" : "#f6f6f6"
+ border.color: "#bdbebf"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickcontrol/tst_qquickcontrol.cpp b/tests/auto/quickcontrols2/qquickcontrol/tst_qquickcontrol.cpp
new file mode 100644
index 0000000000..33314ae550
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickcontrol/tst_qquickcontrol.cpp
@@ -0,0 +1,144 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtTest/qsignalspy.h>
+#include <QtGui/qpa/qwindowsysteminterface.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+#include <QtQuickControlsTestUtils/private/qtest_quickcontrols_p.h>
+#include <QtQuick/private/qquicktext_p_p.h>
+
+using namespace QQuickVisualTestUtils;
+
+class tst_QQuickControl : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickControl();
+
+private slots:
+ void initTestCase() override;
+ void flickable();
+ void fractionalFontSize();
+ void resizeBackgroundKeepsBindings();
+
+private:
+ QScopedPointer<QPointingDevice> touchDevice;
+};
+
+tst_QQuickControl::tst_QQuickControl()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_QQuickControl::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+
+ touchDevice.reset(QTest::createTouchDevice());
+}
+
+void tst_QQuickControl::flickable()
+{
+ // Check that when a Button that is inside a Flickable with a pressDelay
+ // still gets the released and clicked signals sent due to the fact that
+ // Flickable sends a mouse event for the delay and not a touch event
+ QQuickApplicationHelper helper(this, QStringLiteral("flickable.qml"));
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickButton *button = window->property("button").value<QQuickButton *>();
+ QVERIFY(button);
+
+ QSignalSpy buttonPressedSpy(button, SIGNAL(pressed()));
+ QVERIFY(buttonPressedSpy.isValid());
+
+ QSignalSpy buttonReleasedSpy(button, SIGNAL(released()));
+ QVERIFY(buttonReleasedSpy.isValid());
+
+ QSignalSpy buttonClickedSpy(button, SIGNAL(clicked()));
+ QVERIFY(buttonClickedSpy.isValid());
+
+ QTest::touchEvent(window, touchDevice.data()).press(0, QPoint(button->width() / 2, button->height() / 2));
+ QTRY_COMPARE(buttonPressedSpy.count(), 1);
+ QTest::touchEvent(window, touchDevice.data()).release(0, QPoint(button->width() / 2, button->height() / 2));
+ QTRY_COMPARE(buttonReleasedSpy.count(), 1);
+ QTRY_COMPARE(buttonClickedSpy.count(), 1);
+}
+
+void tst_QQuickControl::fractionalFontSize()
+{
+ QQuickApplicationHelper helper(this, QStringLiteral("fractionalFontSize.qml"));
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+ const QQuickControl *control = window->property("control").value<QQuickControl *>();
+ QVERIFY(control);
+ QQuickText *contentItem = qobject_cast<QQuickText *>(control->contentItem());
+ QVERIFY(contentItem);
+
+ QVERIFY(!contentItem->truncated());
+
+ QVERIFY2(qFuzzyCompare(contentItem->contentWidth(),
+ QQuickTextPrivate::get(contentItem)->layout.boundingRect().width()),
+ "The QQuickText::contentWidth() doesn't match the layout's preferred text width");
+}
+
+void tst_QQuickControl::resizeBackgroundKeepsBindings()
+{
+ QTest::ignoreMessage(
+ QtMsgType::QtInfoMsg,
+ QRegularExpression("Binding on background is not deferred .*"));
+ QQuickApplicationHelper helper(this, QStringLiteral("resizeBackgroundKeepsBindings.qml"));
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+ auto ctxt = qmlContext(window);
+ QVERIFY(ctxt);
+ auto background = qobject_cast<QQuickItem *>(ctxt->objectForName("background"));
+ QVERIFY(background);
+ QCOMPARE(background->height(), 4);
+ QVERIFY(background->bindableHeight().hasBinding());
+}
+
+QTEST_QUICKCONTROLS_MAIN(tst_QQuickControl)
+
+#include "tst_qquickcontrol.moc"
diff --git a/tests/auto/quickcontrols2/qquickdrawer/BLACKLIST b/tests/auto/quickcontrols2/qquickdrawer/BLACKLIST
new file mode 100644
index 0000000000..0a440d4ad3
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/BLACKLIST
@@ -0,0 +1,8 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+# QTBUG-77946 QTBUG-88138
+[slider]
+*
+
+[position]
+opensuse-leap
diff --git a/tests/auto/quickcontrols2/qquickdrawer/CMakeLists.txt b/tests/auto/quickcontrols2/qquickdrawer/CMakeLists.txt
new file mode 100644
index 0000000000..91ed6a3e50
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from qquickdrawer.pro.
+
+#####################################################################
+## tst_qquickdrawer Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickdrawer
+ SOURCES
+ tst_qquickdrawer.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:qquickdrawer.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickdrawer CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickdrawer CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-button.qml b/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-button.qml
new file mode 100644
index 0000000000..a7c70e049b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-button.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+
+ Drawer {
+ id: drawer
+ width: 200
+ height: 200
+
+ Button {
+ text: "Button"
+ anchors.fill: parent
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-hover.qml b/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-hover.qml
new file mode 100644
index 0000000000..8167cf4e37
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-hover.qml
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+ id: root
+
+ property alias drawer: drawer
+ property alias backgroundButton: backgroundButton
+ property alias drawerButton: drawerButton
+
+ Button {
+ id: backgroundButton
+ text: "Background"
+ anchors.fill: parent
+ }
+
+ Drawer {
+ id: drawer
+ width: 100
+ height: root.height
+ topPadding: 2
+ leftPadding: 2
+ rightPadding: 2
+ bottomPadding: 2
+
+ contentItem: Button {
+ id: drawerButton
+ text: "Drawer"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-wheel.qml b/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-wheel.qml
new file mode 100644
index 0000000000..449fbadb24
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow-wheel.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias drawerSlider: drawerSlider
+ property alias contentSlider: contentSlider
+
+ Slider {
+ id: contentSlider
+ anchors.fill: parent
+ wheelEnabled: true
+ }
+
+ Drawer {
+ id: drawer
+ edge: Qt.RightEdge
+ width: window.width * 0.8
+ height: window.height
+ clip: true
+ contentItem: Slider {
+ id: drawerSlider
+ wheelEnabled: true
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow.qml b/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow.qml
new file mode 100644
index 0000000000..3f2ed11897
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/applicationwindow.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+
+ Drawer {
+ id: drawer
+ width: 200
+ height: 200
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/dragHandlerInteraction.qml b/tests/auto/quickcontrols2/qquickdrawer/data/dragHandlerInteraction.qml
new file mode 100644
index 0000000000..a2774222f5
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/dragHandlerInteraction.qml
@@ -0,0 +1,23 @@
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: root
+ property int changedCounter: 0
+
+ width: 300
+ height: 300
+
+ Drawer {
+ width: 30
+ height: 30
+ }
+
+ DragHandler {
+ target: null
+ onActiveChanged: {
+ console.log("active changed")
+ root.changedCounter++
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/dragOverModalShadow.qml b/tests/auto/quickcontrols2/qquickdrawer/data/dragOverModalShadow.qml
new file mode 100644
index 0000000000..6d2951f740
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/dragOverModalShadow.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias popup: popup
+
+ Drawer {
+ id: drawer
+ width: 200
+ height: parent.height
+ dragMargin: parent.width
+ }
+
+ Popup {
+ id: popup
+ modal: true
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: parent.width / 2
+ height: parent.height / 2
+
+ Rectangle {
+ objectName: "shadow"
+ parent: popup.background
+ anchors.fill: parent
+ anchors.margins: -20
+
+ z: -1
+ opacity: 0.5
+ color: "silver"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/flickable.qml b/tests/auto/quickcontrols2/qquickdrawer/data/flickable.qml
new file mode 100644
index 0000000000..b3f98d9e58
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/flickable.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias flickable: flickable
+
+ Drawer {
+ id: drawer
+ width: 300
+ height: 400
+
+ contentItem: ListView {
+ id: flickable
+ model: 100
+ delegate: ItemDelegate {
+ width: flickable.width
+ text: index
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/grabber.qml b/tests/auto/quickcontrols2/qquickdrawer/data/grabber.qml
new file mode 100644
index 0000000000..bd1b84aa5b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/grabber.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias popup: popup
+
+ Drawer {
+ id: drawer
+ width: 200
+ height: parent.height
+ }
+
+ Popup {
+ id: popup
+ x: 200
+ width: 200
+ height: parent.height
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/header.qml b/tests/auto/quickcontrols2/qquickdrawer/data/header.qml
new file mode 100644
index 0000000000..dfd64ab1bd
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/header.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias button: button
+
+ header: ToolBar {
+ ToolButton {
+ id: button
+ text: "="
+ }
+ }
+
+ Drawer {
+ id: drawer
+ width: 200
+ height: parent.height
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/itemPartialOverlayModal.qml b/tests/auto/quickcontrols2/qquickdrawer/data/itemPartialOverlayModal.qml
new file mode 100644
index 0000000000..23aa4ca3c2
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/itemPartialOverlayModal.qml
@@ -0,0 +1,13 @@
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+
+Item {
+ width: 400; height: 400
+
+ Drawer {
+ edge: Qt.LeftEdge
+ height: 200
+ width: 200
+ modal: true
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/multiTouch.qml b/tests/auto/quickcontrols2/qquickdrawer/data/multiTouch.qml
new file mode 100644
index 0000000000..3f11b10a04
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/multiTouch.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias popup: popup
+ property alias button: button
+
+ Drawer {
+ id: drawer
+ width: 200
+ height: parent.height
+ dragMargin: parent.width
+ }
+
+ Popup {
+ id: popup
+ x: 10; y: 10
+ width: window.width - 10
+ height: window.height - 10
+
+ Button {
+ id: button
+ text: "Button"
+ anchors.fill: parent
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/multiple.qml b/tests/auto/quickcontrols2/qquickdrawer/data/multiple.qml
new file mode 100644
index 0000000000..d4d5fbd60d
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/multiple.qml
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias leftDrawer: leftDrawer
+ property alias leftButton: leftButton
+
+ property alias rightDrawer: rightDrawer
+ property alias rightButton: rightButton
+
+ property alias contentButton: contentButton
+
+ Drawer {
+ id: leftDrawer
+ width: 300
+ height: 400
+ z: 1
+
+ contentItem: Button {
+ id: leftButton
+ text: "Left"
+ }
+ }
+
+ Button {
+ id: contentButton
+ text: "Content"
+ anchors.fill: parent
+ }
+
+ Drawer {
+ id: rightDrawer
+ width: 300
+ height: 400
+ edge: Qt.RightEdge
+
+ contentItem: Button {
+ id: rightButton
+ text: "Right"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/reposition.qml b/tests/auto/quickcontrols2/qquickdrawer/data/reposition.qml
new file mode 100644
index 0000000000..e3211fab9f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/reposition.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias drawer2: drawer2
+
+ header: Item { implicitHeight: 50 }
+ footer: Item { implicitHeight: 50 }
+
+ Drawer {
+ id: drawer
+ width: parent.width / 2
+ implicitHeight: parent.height
+ }
+
+ Drawer {
+ id: drawer2
+ width: Math.min(window.width, window.height) / 3 * 2
+ height: window.height
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/slider.qml b/tests/auto/quickcontrols2/qquickdrawer/data/slider.qml
new file mode 100644
index 0000000000..b3db5a7b5b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/slider.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias slider: slider
+
+ Drawer {
+ id: drawer
+ width: 300
+ height: 400
+ position: 1.0
+ visible: true
+
+ Slider {
+ id: slider
+ value: 1
+ width: parent.width
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/topEdgeScreenEdge.qml b/tests/auto/quickcontrols2/qquickdrawer/data/topEdgeScreenEdge.qml
new file mode 100644
index 0000000000..d2aaf48601
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/topEdgeScreenEdge.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+
+ header: Rectangle {
+ color: "red"
+ height: 40
+ }
+
+ Drawer {
+ id: drawer
+ width: window.width
+ height: window.height * 0.2
+ parent: window.contentItem
+ edge: Qt.TopEdge
+
+ Label {
+ anchors.centerIn: parent
+ text: "a drawer"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/window-button.qml b/tests/auto/quickcontrols2/qquickdrawer/data/window-button.qml
new file mode 100644
index 0000000000..02247dd030
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/window-button.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+
+ Drawer {
+ id: drawer
+ width: 200
+ height: 200
+
+ Button {
+ text: "Button"
+ anchors.fill: parent
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/window-hover.qml b/tests/auto/quickcontrols2/qquickdrawer/data/window-hover.qml
new file mode 100644
index 0000000000..d5eb0e6b7a
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/window-hover.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+ id: root
+
+ property alias drawer: drawer
+ property alias backgroundButton: backgroundButton
+ property alias drawerButton: drawerButton
+
+ Button {
+ id: backgroundButton
+ text: "Background"
+ anchors.fill: parent
+ }
+
+ Drawer {
+ id: drawer
+ width: 100
+ height: root.height
+ topPadding: 2
+ leftPadding: 2
+ rightPadding: 2
+ bottomPadding: 2
+
+ contentItem: Button {
+ id: drawerButton
+ text: "Drawer"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/window-wheel.qml b/tests/auto/quickcontrols2/qquickdrawer/data/window-wheel.qml
new file mode 100644
index 0000000000..e9c2eb422c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/window-wheel.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ id: window
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+ property alias drawerSlider: drawerSlider
+ property alias contentSlider: contentSlider
+
+ Slider {
+ id: contentSlider
+ anchors.fill: parent
+ wheelEnabled: true
+ }
+
+ Drawer {
+ id: drawer
+ edge: Qt.RightEdge
+ width: window.width * 0.8
+ height: window.height
+ clip: true
+ contentItem: Slider {
+ id: drawerSlider
+ wheelEnabled: true
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/data/window.qml b/tests/auto/quickcontrols2/qquickdrawer/data/window.qml
new file mode 100644
index 0000000000..4bd9c9d29c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/data/window.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+
+ property alias drawer: drawer
+
+ Drawer {
+ id: drawer
+ width: 200
+ height: 200
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickdrawer/tst_qquickdrawer.cpp b/tests/auto/quickcontrols2/qquickdrawer/tst_qquickdrawer.cpp
new file mode 100644
index 0000000000..2c6d50a591
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickdrawer/tst_qquickdrawer.cpp
@@ -0,0 +1,1437 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtTest/qsignalspy.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+
+#include <QtGui/qpointingdevice.h>
+#include <QtGui/qstylehints.h>
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qpa/qwindowsysteminterface.h>
+#include <QtGui/qpa/qplatformintegration.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtQuick/private/qquickwindow_p.h>
+#include <QtQuick/private/qquickflickable_p.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickoverlay_p_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p_p.h>
+#include <QtQuickTemplates2/private/qquickdrawer_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+#include <QtQuickTemplates2/private/qquickslider_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickControlsTestUtils/private/qtest_quickcontrols_p.h>
+
+//using namespace QQuickVisualTestUtils;
+using namespace QQuickControlsTestUtils;
+
+class tst_QQuickDrawer : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickDrawer();
+
+private slots:
+ void initTestCase() override;
+
+ void defaults();
+ void invalidEdge();
+
+ void visible_data();
+ void visible();
+
+ void state();
+
+ void position_data();
+ void position();
+
+ void dragMargin_data();
+ void dragMargin();
+
+ void reposition();
+ void header();
+
+ void dragHandlerInteraction();
+
+ void hover_data();
+ void hover();
+
+ void wheel_data();
+ void wheel();
+
+ void multiple();
+
+ void touch_data();
+ void touch();
+
+ void multiTouch();
+
+ void grabber();
+
+ void interactive_data();
+ void interactive();
+
+ void flickable_data();
+ void flickable();
+
+ void dragOverModalShadow_data();
+ void dragOverModalShadow();
+
+ void nonModal_data();
+ void nonModal();
+
+ void slider_data();
+ void slider();
+
+ void topEdgeScreenEdge();
+
+ void touchOutsideOverlay();
+
+private:
+ QScopedPointer<QPointingDevice> touchDevice;
+};
+
+
+tst_QQuickDrawer::tst_QQuickDrawer()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_QQuickDrawer::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+
+ touchDevice.reset(QTest::createTouchDevice());
+}
+
+void tst_QQuickDrawer::defaults()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("window.qml"));
+
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(!root.isNull(), qPrintable(component.errorString()));
+
+ QQuickDrawer *drawer = root->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+ QCOMPARE(drawer->edge(), Qt::LeftEdge);
+ QCOMPARE(drawer->position(), 0.0);
+ QCOMPARE(drawer->dragMargin(), qGuiApp->styleHints()->startDragDistance());
+}
+
+void tst_QQuickDrawer::invalidEdge()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("window.qml"));
+
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(!root.isNull(), qPrintable(component.errorString()));
+
+ QQuickDrawer *drawer = root->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+
+ // Test an invalid value - it should warn and ignore it.
+ QTest::ignoreMessage(QtWarningMsg, qUtf8Printable(testFileUrl("window.qml").toString() + ":61:5: QML Drawer: invalid edge value - valid values are: Qt.TopEdge, Qt.LeftEdge, Qt.RightEdge, Qt.BottomEdge"));
+ drawer->setEdge(static_cast<Qt::Edge>(QQuickDrawer::Right));
+ QCOMPARE(drawer->edge(), Qt::LeftEdge);
+}
+
+void tst_QQuickDrawer::visible_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::newRow("Window") << "window.qml";
+ QTest::newRow("ApplicationWindow") << "applicationwindow.qml";
+}
+
+void tst_QQuickDrawer::visible()
+{
+ QFETCH(QString, source);
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+ QQuickItem *popupItem = drawer->popupItem();
+
+ QCOMPARE(drawer->isVisible(), false);
+ QCOMPARE(drawer->position(), qreal(0.0));
+
+ QQuickOverlay *overlay = QQuickOverlay::overlay(window);
+ QVERIFY(overlay);
+ QVERIFY(!overlay->childItems().contains(popupItem));
+
+ drawer->open();
+ QVERIFY(drawer->isVisible());
+ QVERIFY(overlay->childItems().contains(popupItem));
+ QTRY_COMPARE(drawer->position(), qreal(1.0));
+
+ drawer->close();
+ QTRY_VERIFY(!drawer->isVisible());
+ QTRY_COMPARE(drawer->position(), qreal(0.0));
+ QVERIFY(!overlay->childItems().contains(popupItem));
+
+ drawer->setVisible(true);
+ QVERIFY(drawer->isVisible());
+ QVERIFY(overlay->childItems().contains(popupItem));
+ QTRY_COMPARE(drawer->position(), qreal(1.0));
+
+ drawer->setVisible(false);
+ QTRY_VERIFY(!drawer->isVisible());
+ QTRY_COMPARE(drawer->position(), qreal(0.0));
+ QTRY_VERIFY(!overlay->childItems().contains(popupItem));
+}
+
+void tst_QQuickDrawer::state()
+{
+ QQuickControlsApplicationHelper helper(this, "applicationwindow.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+
+ QCOMPARE(drawer->isVisible(), false);
+
+ QSignalSpy visibleChangedSpy(drawer, SIGNAL(visibleChanged()));
+ QSignalSpy aboutToShowSpy(drawer, SIGNAL(aboutToShow()));
+ QSignalSpy aboutToHideSpy(drawer, SIGNAL(aboutToHide()));
+ QSignalSpy openedSpy(drawer, SIGNAL(opened()));
+ QSignalSpy closedSpy(drawer, SIGNAL(closed()));
+
+ QVERIFY(visibleChangedSpy.isValid());
+ QVERIFY(aboutToShowSpy.isValid());
+ QVERIFY(aboutToHideSpy.isValid());
+ QVERIFY(openedSpy.isValid());
+ QVERIFY(closedSpy.isValid());
+
+ int visibleChangedCount = 0;
+ int aboutToShowCount = 0;
+ int aboutToHideCount = 0;
+ int openedCount = 0;
+ int closedCount = 0;
+
+ // open programmatically...
+ drawer->open();
+ QCOMPARE(visibleChangedSpy.count(), ++visibleChangedCount);
+ QCOMPARE(aboutToShowSpy.count(), ++aboutToShowCount);
+ QCOMPARE(aboutToHideSpy.count(), aboutToHideCount);
+ QCOMPARE(openedSpy.count(), openedCount);
+ QCOMPARE(closedSpy.count(), closedCount);
+
+ // ...and wait until fully open
+ QVERIFY(openedSpy.wait());
+ QCOMPARE(visibleChangedSpy.count(), visibleChangedCount);
+ QCOMPARE(aboutToShowSpy.count(), aboutToShowCount);
+ QCOMPARE(aboutToHideSpy.count(), aboutToHideCount);
+ QCOMPARE(openedSpy.count(), ++openedCount);
+ QCOMPARE(closedSpy.count(), closedCount);
+
+ // close programmatically...
+ drawer->close();
+ QCOMPARE(visibleChangedSpy.count(), visibleChangedCount);
+ QCOMPARE(aboutToShowSpy.count(), aboutToShowCount);
+ QCOMPARE(aboutToHideSpy.count(), ++aboutToHideCount);
+ QCOMPARE(openedSpy.count(), openedCount);
+ QCOMPARE(closedSpy.count(), closedCount);
+
+ // ...and wait until fully closed
+ QVERIFY(closedSpy.wait());
+ QCOMPARE(visibleChangedSpy.count(), ++visibleChangedCount);
+ QCOMPARE(aboutToShowSpy.count(), aboutToShowCount);
+ QCOMPARE(aboutToHideSpy.count(), aboutToHideCount);
+ QCOMPARE(openedSpy.count(), openedCount);
+ QCOMPARE(closedSpy.count(), ++closedCount);
+
+ // open interactively...
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(0, drawer->height() / 2));
+ QTest::mouseMove(window, QPoint(drawer->width() * 0.2, drawer->height() / 2), 16);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(drawer->width() * 0.8, drawer->height() / 2), 16);
+ QCOMPARE(visibleChangedSpy.count(), ++visibleChangedCount);
+ QCOMPARE(aboutToShowSpy.count(), ++aboutToShowCount);
+ QCOMPARE(aboutToHideSpy.count(), aboutToHideCount);
+ QCOMPARE(openedSpy.count(), openedCount);
+ QCOMPARE(closedSpy.count(), closedCount);
+
+ // ...and wait until fully open
+ QVERIFY(openedSpy.wait());
+ QCOMPARE(visibleChangedSpy.count(), visibleChangedCount);
+ QCOMPARE(aboutToShowSpy.count(), aboutToShowCount);
+ QCOMPARE(aboutToHideSpy.count(), aboutToHideCount);
+ QCOMPARE(openedSpy.count(), ++openedCount);
+ QCOMPARE(closedSpy.count(), closedCount);
+
+ // close interactively...
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(drawer->width(), drawer->height() / 2));
+ QTest::mouseMove(window, QPoint(drawer->width() * 0.8, drawer->height() / 2), 16);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(drawer->width() * 0.2, drawer->height() / 2), 16);
+ QCOMPARE(visibleChangedSpy.count(), visibleChangedCount);
+ QCOMPARE(aboutToShowSpy.count(), aboutToShowCount);
+ QCOMPARE(aboutToHideSpy.count(), ++aboutToHideCount);
+ QCOMPARE(openedSpy.count(), openedCount);
+ QCOMPARE(closedSpy.count(), closedCount);
+
+ // ...and wait until fully closed
+ QVERIFY(closedSpy.wait());
+ QCOMPARE(visibleChangedSpy.count(), ++visibleChangedCount);
+ QCOMPARE(aboutToShowSpy.count(), aboutToShowCount);
+ QCOMPARE(aboutToHideSpy.count(), aboutToHideCount);
+ QCOMPARE(openedSpy.count(), openedCount);
+ QCOMPARE(closedSpy.count(), ++closedCount);
+}
+
+void tst_QQuickDrawer::position_data()
+{
+ QTest::addColumn<Qt::Edge>("edge");
+ QTest::addColumn<QPoint>("press");
+ QTest::addColumn<QPoint>("from");
+ QTest::addColumn<QPoint>("to");
+ QTest::addColumn<qreal>("position");
+
+ // We need to start swiping exactly from the selected edge, but on Android
+ // ApplicationWindow will be fullscreen instead of the defined size, so
+ // we need to extract the edge values from screen geometry.
+#ifndef Q_OS_ANDROID
+ const int rightMargin = 399;
+ const int bottomMargin = 399;
+#else
+ const QRect screenGeometry = QGuiApplication::primaryScreen()->availableGeometry();
+ const int rightMargin = screenGeometry.right();
+ const int bottomMargin = screenGeometry.bottom();
+#endif
+
+ QTest::newRow("top") << Qt::TopEdge << QPoint(100, 0) << QPoint(100, 50) << QPoint(100, 150) << qreal(0.5);
+ QTest::newRow("left") << Qt::LeftEdge << QPoint(0, 100) << QPoint(50, 100) << QPoint(150, 100) << qreal(0.5);
+ QTest::newRow("right") << Qt::RightEdge << QPoint(rightMargin, 100)
+ << QPoint(rightMargin - 50, 100) << QPoint(rightMargin - 150, 100)
+ << qreal(0.5);
+ QTest::newRow("bottom") << Qt::BottomEdge << QPoint(100, bottomMargin)
+ << QPoint(100, bottomMargin - 50) << QPoint(150, bottomMargin - 150)
+ << qreal(0.5);
+}
+
+void tst_QQuickDrawer::position()
+{
+ QFETCH(Qt::Edge, edge);
+ QFETCH(QPoint, press);
+ QFETCH(QPoint, from);
+ QFETCH(QPoint, to);
+ QFETCH(qreal, position);
+
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = helper.appWindow->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+ drawer->setEdge(edge);
+
+ // Give it some time (50 ms) before the press to avoid flakiness on OpenSUSE: QTBUG-77946
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, press, 50);
+ QTest::mouseMove(window, from);
+ QTest::mouseMove(window, to);
+ QCOMPARE(drawer->position(), position);
+
+ // moved half-way open at almost infinite speed => snap to open
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, to);
+ QTRY_COMPARE(drawer->position(), 1.0);
+}
+
+void tst_QQuickDrawer::dragMargin_data()
+{
+ QTest::addColumn<Qt::Edge>("edge");
+ QTest::addColumn<qreal>("dragMargin");
+ QTest::addColumn<qreal>("dragFromLeft");
+ QTest::addColumn<qreal>("dragFromRight");
+
+ QTest::newRow("left:0") << Qt::LeftEdge << qreal(0) << qreal(0) << qreal(0);
+ QTest::newRow("left:-1") << Qt::LeftEdge << qreal(-1) << qreal(0) << qreal(0);
+ QTest::newRow("left:startDragDistance") << Qt::LeftEdge << qreal(QGuiApplication::styleHints()->startDragDistance()) << qreal(0.45) << qreal(0);
+ QTest::newRow("left:startDragDistance*2") << Qt::LeftEdge << qreal(QGuiApplication::styleHints()->startDragDistance() * 2) << qreal(0.45) << qreal(0);
+
+ QTest::newRow("right:0") << Qt::RightEdge << qreal(0) << qreal(0) << qreal(0);
+ QTest::newRow("right:-1") << Qt::RightEdge << qreal(-1) << qreal(0) << qreal(0);
+ QTest::newRow("right:startDragDistance") << Qt::RightEdge << qreal(QGuiApplication::styleHints()->startDragDistance()) << qreal(0) << qreal(0.75);
+ QTest::newRow("right:startDragDistance*2") << Qt::RightEdge << qreal(QGuiApplication::styleHints()->startDragDistance() * 2) << qreal(0) << qreal(0.75);
+}
+
+void tst_QQuickDrawer::dragMargin()
+{
+ QFETCH(Qt::Edge, edge);
+ QFETCH(qreal, dragMargin);
+ QFETCH(qreal, dragFromLeft);
+ QFETCH(qreal, dragFromRight);
+
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = helper.appWindow->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+ drawer->setEdge(edge);
+ drawer->setDragMargin(dragMargin);
+
+ const int startDragDistance = qMax(20, QGuiApplication::styleHints()->startDragDistance() + 5) + 1;
+
+ // drag from the left
+ int leftX = qMax<int>(0, dragMargin);
+ int leftDistance = startDragDistance + drawer->width() * 0.45;
+ QVERIFY(leftDistance > QGuiApplication::styleHints()->startDragDistance());
+ // Give it some time (50 ms) before the press to avoid flakiness on OpenSUSE: QTBUG-77946
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(leftX, drawer->height() / 2), 50);
+ QTest::mouseMove(window, QPoint(leftX + startDragDistance, drawer->height() / 2));
+ QTest::mouseMove(window, QPoint(leftX + leftDistance, drawer->height() / 2));
+ QCOMPARE(drawer->position(), dragFromLeft);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(leftX + leftDistance, drawer->height() / 2));
+
+ drawer->close();
+ QTRY_COMPARE(drawer->position(), qreal(0.0));
+
+ // drag from the right
+ int rightX = qMin<int>(window->width() - 1, window->width() - dragMargin);
+ int rightDistance = startDragDistance + drawer->width() * 0.75;
+ QVERIFY(rightDistance > QGuiApplication::styleHints()->startDragDistance());
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(rightX, drawer->height() / 2));
+ QTest::mouseMove(window, QPoint(rightX - startDragDistance, drawer->height() / 2));
+ QTest::mouseMove(window, QPoint(rightX - rightDistance, drawer->height() / 2));
+ QCOMPARE(drawer->position(), dragFromRight);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(rightX - rightDistance, drawer->height() / 2));
+}
+
+static QRectF geometry(const QQuickItem *item)
+{
+ return QRectF(item->x(), item->y(), item->width(), item->height());
+}
+
+void tst_QQuickDrawer::reposition()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("reposition.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+ QQuickItem *popupItem = drawer->popupItem();
+ QVERIFY(popupItem);
+
+ drawer->open();
+ QQuickItem *dimmer = QQuickPopupPrivate::get(drawer)->dimmer;
+ QVERIFY(dimmer);
+
+ QCOMPARE(geometry(dimmer), QRectF(0, 0, window->width(), window->height()));
+ QTRY_COMPARE(geometry(popupItem), QRectF(0, 0, window->width() / 2., window->height()));
+
+ drawer->setY(100);
+ QCOMPARE(geometry(dimmer), QRectF(0, 100, window->width(), window->height() - 100));
+ QCOMPARE(geometry(popupItem), QRectF(0, 100, window->width() / 2., window->height() - 100));
+
+ drawer->setHeight(window->height());
+ QCOMPARE(geometry(dimmer), QRectF(0, 100, window->width(), window->height()));
+ QCOMPARE(geometry(popupItem), QRectF(0, 100, window->width() / 2., window->height()));
+
+ drawer->resetHeight();
+ QCOMPARE(geometry(dimmer), QRectF(0, 100, window->width(), window->height() - 100));
+ QCOMPARE(geometry(popupItem), QRectF(0, 100, window->width() / 2., window->height() - 100));
+
+ drawer->setParentItem(window->contentItem());
+ QCOMPARE(geometry(dimmer), QRectF(0, 150, window->width(), window->height() - 150));
+ QCOMPARE(geometry(popupItem), QRectF(0, 150, window->width() / 2., window->height() - 150));
+
+ drawer->setEdge(Qt::RightEdge);
+ QCOMPARE(geometry(dimmer), QRectF(0, 150, window->width(), window->height() - 150));
+ QTRY_COMPARE(geometry(popupItem), QRectF(window->width() - drawer->width(), 150, window->width() / 2., window->height() - 150));
+
+ window->setWidth(window->width() + 100);
+ QTRY_COMPARE(geometry(dimmer), QRectF(0, 150, window->width(), window->height() - 150));
+ QTRY_COMPARE(geometry(popupItem), QRectF(window->width() - drawer->width(), 150, window->width() / 2., window->height() - 150));
+
+ drawer->close();
+ QTRY_COMPARE(geometry(popupItem), QRectF(window->width(), 150, window->width() / 2., window->height() - 150));
+
+ QQuickDrawer *drawer2 = window->property("drawer2").value<QQuickDrawer *>();
+ QVERIFY(drawer2);
+ QQuickItem *popupItem2 = drawer2->popupItem();
+ QVERIFY(popupItem2);
+
+ drawer2->open();
+ QVERIFY(popupItem2->isVisible());
+ QCOMPARE(popupItem2->x(), -drawer2->width());
+ QTRY_COMPARE(popupItem2->x(), 0.0);
+}
+
+void tst_QQuickDrawer::header()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("header.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickItem *content = window->contentItem();
+ QVERIFY(content);
+
+ QQuickOverlay *overlay = QQuickOverlay::overlay(window);
+ QVERIFY(overlay);
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+ QQuickItem *popupItem = drawer->popupItem();
+
+ QQuickButton *button = window->property("button").value<QQuickButton*>();
+ QVERIFY(button);
+
+ drawer->open();
+ QVERIFY(drawer->isVisible());
+
+ QCOMPARE(drawer->parentItem(), overlay);
+ QCOMPARE(drawer->height(), overlay->height());
+ QCOMPARE(popupItem->height(), overlay->height());
+
+ drawer->setParentItem(content);
+ QCOMPARE(drawer->parentItem(), content);
+ QCOMPARE(drawer->height(), content->height());
+ QCOMPARE(popupItem->height(), content->height());
+
+ // must be possible to interact with the header when the drawer is below the header
+ QSignalSpy clickSpy(button, SIGNAL(clicked()));
+ QVERIFY(clickSpy.isValid());
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(button->x() + button->width() / 2, button->y() + button->height() / 2));
+ QCOMPARE(clickSpy.count(), 1);
+}
+
+void tst_QQuickDrawer::dragHandlerInteraction()
+{
+ QQuickControlsApplicationHelper helper(this, u"dragHandlerInteraction.qml"_qs);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ auto window = helper.appWindow;;
+ QVERIFY(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+ QTest::mousePress(window, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(250, 250));
+ QTest::mouseMove(window, QPoint(100, 100));
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(100, 100));
+ QTRY_COMPARE(window->property("changedCounter").toInt(), 2); // became active and inactive
+}
+
+void tst_QQuickDrawer::hover_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("modal");
+
+ QTest::newRow("Window:modal") << "window-hover.qml" << true;
+ QTest::newRow("Window:modeless") << "window-hover.qml" << false;
+ QTest::newRow("ApplicationWindow:modal") << "applicationwindow-hover.qml" << true;
+ QTest::newRow("ApplicationWindow:modeless") << "applicationwindow-hover.qml" << false;
+}
+
+void tst_QQuickDrawer::hover()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, modal);
+
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+ drawer->setModal(modal);
+
+ QQuickControl *drawerItem = qobject_cast<QQuickControl *>(drawer->popupItem());
+ QVERIFY(drawerItem);
+ QVERIFY(drawerItem->isHoverEnabled());
+
+ QQuickButton *backgroundButton = window->property("backgroundButton").value<QQuickButton*>();
+ QVERIFY(backgroundButton);
+ backgroundButton->setHoverEnabled(true);
+
+ QQuickButton *drawerButton = window->property("drawerButton").value<QQuickButton*>();
+ QVERIFY(drawerButton);
+ drawerButton->setHoverEnabled(true);
+
+ QSignalSpy openedSpy(drawer, SIGNAL(opened()));
+ QVERIFY(openedSpy.isValid());
+ drawer->open();
+ QVERIFY(openedSpy.count() == 1 || openedSpy.wait());
+
+ // hover the background button outside the drawer
+ QTest::mouseMove(window, QPoint(window->width() - 1, window->height() - 1));
+ QCOMPARE(backgroundButton->isHovered(), !modal);
+ QVERIFY(!drawerButton->isHovered());
+ QVERIFY(!drawerItem->isHovered());
+
+ // hover the drawer background
+ QTest::mouseMove(window, QPoint(1, 1));
+ QVERIFY(!backgroundButton->isHovered());
+ QVERIFY(!drawerButton->isHovered());
+ QVERIFY(drawerItem->isHovered());
+
+ // hover the button in a drawer
+ QTest::mouseMove(window, QPoint(2, 2));
+ QVERIFY(!backgroundButton->isHovered());
+ QVERIFY(drawerButton->isHovered());
+ QVERIFY(drawerItem->isHovered());
+
+ QSignalSpy closedSpy(drawer, SIGNAL(closed()));
+ QVERIFY(closedSpy.isValid());
+ drawer->close();
+ QVERIFY(closedSpy.count() == 1 || closedSpy.wait());
+
+ // hover the background button after closing the drawer
+ QTest::mouseMove(window, QPoint(window->width() / 2, window->height() / 2));
+ QVERIFY(backgroundButton->isHovered());
+ QVERIFY(!drawerButton->isHovered());
+ QVERIFY(!drawerItem->isHovered());
+}
+
+void tst_QQuickDrawer::wheel_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("modal");
+
+ QTest::newRow("Window:modal") << "window-wheel.qml" << true;
+ QTest::newRow("Window:modeless") << "window-wheel.qml" << false;
+ QTest::newRow("ApplicationWindow:modal") << "applicationwindow-wheel.qml" << true;
+ QTest::newRow("ApplicationWindow:modeless") << "applicationwindow-wheel.qml" << false;
+}
+
+static bool sendWheelEvent(QQuickItem *item, const QPoint &localPos, int degrees)
+{
+ QQuickWindow *window = item->window();
+ QWheelEvent wheelEvent(localPos, item->window()->mapToGlobal(localPos), QPoint(0, 0),
+ QPoint(0, 8 * degrees), Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
+ false);
+ QSpontaneKeyEvent::setSpontaneous(&wheelEvent);
+ return qGuiApp->notify(window, &wheelEvent);
+}
+
+void tst_QQuickDrawer::wheel()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, modal);
+
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickSlider *contentSlider = window->property("contentSlider").value<QQuickSlider*>();
+ QVERIFY(contentSlider);
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer && drawer->contentItem());
+ drawer->setModal(modal);
+
+ QQuickSlider *drawerSlider = window->property("drawerSlider").value<QQuickSlider*>();
+ QVERIFY(drawerSlider);
+
+ {
+ // wheel over the content
+ qreal oldContentValue = contentSlider->value();
+ qreal oldDrawerValue = drawerSlider->value();
+
+ QVERIFY(sendWheelEvent(contentSlider, QPoint(contentSlider->width() / 2, contentSlider->height() / 2), 15));
+
+ QVERIFY(!qFuzzyCompare(contentSlider->value(), oldContentValue)); // must have moved
+ QVERIFY(qFuzzyCompare(drawerSlider->value(), oldDrawerValue)); // must not have moved
+ }
+
+ QSignalSpy openedSpy(drawer, SIGNAL(opened()));
+ QVERIFY(openedSpy.isValid());
+ drawer->open();
+ QVERIFY(openedSpy.count() == 1 || openedSpy.wait());
+
+ {
+ // wheel over the drawer content
+ qreal oldContentValue = contentSlider->value();
+ qreal oldDrawerValue = drawerSlider->value();
+
+ QVERIFY(sendWheelEvent(drawerSlider, QPoint(drawerSlider->width() / 2, drawerSlider->height() / 2), 15));
+
+ QVERIFY(qFuzzyCompare(contentSlider->value(), oldContentValue)); // must not have moved
+ QVERIFY(!qFuzzyCompare(drawerSlider->value(), oldDrawerValue)); // must have moved
+ }
+
+ {
+ // wheel over the overlay
+ qreal oldContentValue = contentSlider->value();
+ qreal oldDrawerValue = drawerSlider->value();
+
+ QVERIFY(sendWheelEvent(QQuickOverlay::overlay(window), QPoint(0, 0), 15));
+
+ if (modal) {
+ // the content below a modal overlay must not move
+ QVERIFY(qFuzzyCompare(contentSlider->value(), oldContentValue));
+ } else {
+ // the content below a modeless overlay must move
+ QVERIFY(!qFuzzyCompare(contentSlider->value(), oldContentValue));
+ }
+ QVERIFY(qFuzzyCompare(drawerSlider->value(), oldDrawerValue)); // must not have moved
+ }
+}
+
+void tst_QQuickDrawer::multiple()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("multiple.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *leftDrawer = window->property("leftDrawer").value<QQuickDrawer*>();
+ QVERIFY(leftDrawer);
+ QQuickButton *leftButton = window->property("leftButton").value<QQuickButton*>();
+ QVERIFY(leftButton);
+ QSignalSpy leftClickSpy(leftButton, SIGNAL(clicked()));
+ QVERIFY(leftClickSpy.isValid());
+
+ QQuickDrawer *rightDrawer = window->property("rightDrawer").value<QQuickDrawer*>();
+ QVERIFY(rightDrawer);
+ QQuickButton *rightButton = window->property("rightButton").value<QQuickButton*>();
+ QVERIFY(rightButton);
+ QSignalSpy rightClickSpy(rightButton, SIGNAL(clicked()));
+ QVERIFY(rightClickSpy.isValid());
+
+ QQuickButton *contentButton = window->property("contentButton").value<QQuickButton*>();
+ QVERIFY(contentButton);
+ QSignalSpy contentClickSpy(contentButton, SIGNAL(clicked()));
+ QVERIFY(contentClickSpy.isValid());
+
+ // no drawers open, click the content
+ QTest::mouseClick(window, Qt::LeftButton);
+ QCOMPARE(contentClickSpy.count(), 1);
+ QCOMPARE(leftClickSpy.count(), 0);
+ QCOMPARE(rightClickSpy.count(), 0);
+
+ // drag the left drawer open
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(0, window->height() / 2));
+ QTest::mouseMove(window, QPoint(leftDrawer->width() / 4, window->height() / 2));
+ QTest::mouseMove(window, QPoint(leftDrawer->width() / 4 * 3, window->height() / 2));
+ QCOMPARE(leftDrawer->position(), 0.5);
+ QCOMPARE(rightDrawer->position(), 0.0);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(leftDrawer->width() / 2, window->height() / 2));
+ QTRY_COMPARE(leftDrawer->position(), 1.0);
+ QCOMPARE(rightDrawer->position(), 0.0);
+
+ // cannot drag the right drawer while the left drawer is open
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - 1, window->height() / 2));
+ QTest::mouseMove(window, QPoint(window->width() - leftDrawer->width() / 2, window->height() / 2));
+ QCOMPARE(leftDrawer->position(), 1.0);
+ QCOMPARE(rightDrawer->position(), 0.0);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - leftDrawer->width() / 2, window->height() / 2));
+ QCOMPARE(rightDrawer->position(), 0.0);
+ QCOMPARE(leftDrawer->position(), 1.0);
+
+ // open the right drawer below the left drawer
+ rightDrawer->open();
+ QTRY_COMPARE(rightDrawer->position(), 1.0);
+
+ // click the left drawer's button
+ QTest::mouseClick(window, Qt::LeftButton);
+ QCOMPARE(contentClickSpy.count(), 1);
+ QCOMPARE(leftClickSpy.count(), 1);
+ QCOMPARE(rightClickSpy.count(), 0);
+
+ // click the left drawer's background (button disabled, don't leak through to the right drawer below)
+ leftButton->setEnabled(false);
+ QTest::mouseClick(window, Qt::LeftButton);
+ QCOMPARE(contentClickSpy.count(), 1);
+ QCOMPARE(leftClickSpy.count(), 1);
+ QCOMPARE(rightClickSpy.count(), 0);
+ leftButton->setEnabled(true);
+
+ // click the overlay of the left drawer (don't leak through to right drawer below)
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - (window->width() - leftDrawer->width()) / 2, window->height() / 2));
+ QCOMPARE(contentClickSpy.count(), 1);
+ QCOMPARE(leftClickSpy.count(), 1);
+ QCOMPARE(rightClickSpy.count(), 0);
+ QTRY_VERIFY(!leftDrawer->isVisible());
+
+ // click the right drawer's button
+ QTest::mouseClick(window, Qt::LeftButton);
+ QCOMPARE(contentClickSpy.count(), 1);
+ QCOMPARE(leftClickSpy.count(), 1);
+ QCOMPARE(rightClickSpy.count(), 1);
+
+ // cannot drag the left drawer while the right drawer is open
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(0, window->height() / 2));
+ QTest::mouseMove(window, QPoint(leftDrawer->width() / 2, window->height() / 2));
+ QCOMPARE(leftDrawer->position(), 0.0);
+ QCOMPARE(rightDrawer->position(), 1.0);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(leftDrawer->width() / 2, window->height() / 2));
+ QCOMPARE(leftDrawer->position(), 0.0);
+ QCOMPARE(rightDrawer->position(), 1.0);
+
+ // click the right drawer's background (button disabled, don't leak through to the content below)
+ rightButton->setEnabled(false);
+ QTest::mouseClick(window, Qt::LeftButton);
+ QCOMPARE(contentClickSpy.count(), 1);
+ QCOMPARE(leftClickSpy.count(), 1);
+ QCOMPARE(rightClickSpy.count(), 1);
+ rightButton->setEnabled(true);
+
+ // click the overlay of the right drawer (don't leak through to the content below)
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint((window->width() - rightDrawer->width()) / 2, window->height() / 2));
+ QCOMPARE(contentClickSpy.count(), 1);
+ QCOMPARE(leftClickSpy.count(), 1);
+ QCOMPARE(rightClickSpy.count(), 1);
+ QTRY_VERIFY(!rightDrawer->isVisible());
+
+ // no drawers open, click the content
+ QTest::mouseClick(window, Qt::LeftButton);
+ QCOMPARE(contentClickSpy.count(), 2);
+ QCOMPARE(leftClickSpy.count(), 1);
+ QCOMPARE(rightClickSpy.count(), 1);
+
+ // drag the right drawer open
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - 1, window->height() / 2));
+ QTest::mouseMove(window, QPoint(window->width() - rightDrawer->width() / 4, window->height() / 2));
+ QTest::mouseMove(window, QPoint(window->width() - rightDrawer->width() / 4 * 3, window->height() / 2));
+ QCOMPARE(rightDrawer->position(), 0.5);
+ QCOMPARE(leftDrawer->position(), 0.0);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - rightDrawer->width() / 2, window->height() / 2));
+ QTRY_COMPARE(rightDrawer->position(), 1.0);
+ QCOMPARE(leftDrawer->position(), 0.0);
+}
+
+void tst_QQuickDrawer::touch_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<QPoint>("from");
+ QTest::addColumn<QPoint>("to");
+
+ QTest::newRow("Window:inside") << "window.qml" << QPoint(150, 100) << QPoint(50, 100);
+ QTest::newRow("Window:outside") << "window.qml" << QPoint(300, 100) << QPoint(100, 100);
+ QTest::newRow("ApplicationWindow:inside") << "applicationwindow.qml" << QPoint(150, 100) << QPoint(50, 100);
+ QTest::newRow("ApplicationWindow:outside") << "applicationwindow.qml" << QPoint(300, 100) << QPoint(100, 100);
+
+ QTest::newRow("Window+Button:inside") << "window-button.qml" << QPoint(150, 100) << QPoint(50, 100);
+ QTest::newRow("Window+Button:outside") << "window-button.qml" << QPoint(300, 100) << QPoint(100, 100);
+ QTest::newRow("ApplicationWindow+Button:inside") << "applicationwindow-button.qml" << QPoint(150, 100) << QPoint(50, 100);
+ QTest::newRow("ApplicationWindow+Button:outside") << "applicationwindow-button.qml" << QPoint(300, 100) << QPoint(100, 100);
+}
+
+void tst_QQuickDrawer::touch()
+{
+ QFETCH(QString, source);
+ QFETCH(QPoint, from);
+ QFETCH(QPoint, to);
+
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+
+ QSignalSpy drawerOpenedSpy(drawer, SIGNAL(opened()));
+ QSignalSpy drawerClosedSpy(drawer, SIGNAL(closed()));
+ QVERIFY(drawerOpenedSpy.isValid());
+ QVERIFY(drawerClosedSpy.isValid());
+
+ // drag to open
+ QTest::touchEvent(window, touchDevice.data()).press(0, QPoint(0, 100));
+ QTest::touchEvent(window, touchDevice.data()).move(0, QPoint(50, 100));
+ QTest::touchEvent(window, touchDevice.data()).move(0, QPoint(150, 100));
+ QTest::touchEvent(window, touchDevice.data()).release(0, QPoint(150, 100));
+ QVERIFY(drawerOpenedSpy.wait());
+ QCOMPARE(drawer->position(), 1.0);
+
+ // drag to close
+ QTest::touchEvent(window, touchDevice.data()).press(0, from);
+ for (int x = from.x(); x > to.x(); x -= 10)
+ QTest::touchEvent(window, touchDevice.data()).move(0, QPoint(x, to.y()));
+ QTest::touchEvent(window, touchDevice.data()).move(0, to);
+ QTest::touchEvent(window, touchDevice.data()).release(0, to);
+ QVERIFY(drawerClosedSpy.wait());
+ QCOMPARE(drawer->position(), 0.0);
+}
+
+void tst_QQuickDrawer::multiTouch()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("multiTouch.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickOverlay *overlay = QQuickOverlay::overlay(window);
+ QVERIFY(overlay);
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup *>();
+ QVERIFY(popup);
+
+ QQuickButton *button = window->property("button").value<QQuickButton *>();
+ QVERIFY(button);
+
+ QSignalSpy overlayPressedSpy(overlay, SIGNAL(pressed()));
+ QSignalSpy overlayReleasedSpy(overlay, SIGNAL(released()));
+ QVERIFY(overlayPressedSpy.isValid());
+ QVERIFY(overlayReleasedSpy.isValid());
+
+ QSignalSpy drawerOpenedSpy(drawer, SIGNAL(opened()));
+ QVERIFY(drawerOpenedSpy.isValid());
+
+ QSignalSpy buttonPressedSpy(button, SIGNAL(pressed()));
+ QSignalSpy buttonReleasedSpy(button, SIGNAL(released()));
+ QVERIFY(buttonPressedSpy.isValid());
+ QVERIFY(buttonReleasedSpy.isValid());
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+
+ drawer->open();
+ QVERIFY(drawer->isVisible());
+ QVERIFY(drawerOpenedSpy.wait());
+
+ // 1st press
+ QTest::touchEvent(window, touchDevice.data()).press(0, QPoint(300, 100));
+ QVERIFY(popup->isVisible());
+ QVERIFY(drawer->isVisible());
+ QCOMPARE(buttonPressedSpy.count(), 0);
+ QCOMPARE(overlayPressedSpy.count(), 1);
+
+ // 2nd press (blocked & ignored)
+ QTest::touchEvent(window, touchDevice.data()).stationary(0).press(1, QPoint(300, 200));
+ QVERIFY(popup->isVisible());
+ QVERIFY(drawer->isVisible());
+ QCOMPARE(buttonPressedSpy.count(), 0);
+ QCOMPARE(overlayPressedSpy.count(), 2);
+
+ // 2nd release (blocked & ignored)
+ QTest::touchEvent(window, touchDevice.data()).stationary(0).release(1, QPoint(300, 200));
+ QVERIFY(popup->isVisible());
+ QVERIFY(drawer->isVisible());
+ QCOMPARE(buttonPressedSpy.count(), 0);
+ QCOMPARE(buttonReleasedSpy.count(), 0);
+ QCOMPARE(overlayPressedSpy.count(), 2);
+ QCOMPARE(overlayReleasedSpy.count(), 1);
+
+ // 1st release
+ QTest::touchEvent(window, touchDevice.data()).release(0, QPoint(300, 100));
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(!drawer->isVisible());
+ QCOMPARE(buttonPressedSpy.count(), 0);
+ QCOMPARE(buttonReleasedSpy.count(), 0);
+ QCOMPARE(overlayPressedSpy.count(), 2);
+ QCOMPARE(overlayReleasedSpy.count(), 2);
+
+ drawer->open();
+ QVERIFY(drawer->isVisible());
+ QVERIFY(drawerOpenedSpy.wait());
+
+ // 1st drag
+ QTest::touchEvent(window, touchDevice.data()).press(0, QPoint(300, 100));
+ QCOMPARE(buttonPressedSpy.count(), 0);
+ QCOMPARE(overlayPressedSpy.count(), 3);
+ for (int x = 300; x >= 100; x -= 10) {
+ QTest::touchEvent(window, touchDevice.data()).move(0, QPoint(x, 100));
+ QVERIFY(popup->isVisible());
+ QVERIFY(drawer->isVisible());
+ }
+ QCOMPARE(drawer->position(), 0.5);
+
+ // 2nd drag (blocked & ignored)
+ QTest::touchEvent(window, touchDevice.data()).stationary(0).press(1, QPoint(300, 200));
+ QCOMPARE(buttonPressedSpy.count(), 0);
+ QCOMPARE(overlayPressedSpy.count(), 4);
+ for (int x = 300; x >= 0; x -= 10) {
+ QTest::touchEvent(window, touchDevice.data()).stationary(0).move(1, QPoint(x, 200));
+ QVERIFY(popup->isVisible());
+ QVERIFY(drawer->isVisible());
+ }
+ QCOMPARE(drawer->position(), 0.5);
+
+ // 2nd release (blocked & ignored)
+ QTest::touchEvent(window, touchDevice.data()).stationary(0).release(1, QPoint(300, 0));
+ QVERIFY(popup->isVisible());
+ QVERIFY(drawer->isVisible());
+ QCOMPARE(drawer->position(), 0.5);
+ QCOMPARE(buttonReleasedSpy.count(), 0);
+ QCOMPARE(overlayReleasedSpy.count(), 3);
+
+ // 1st release
+ QTest::touchEvent(window, touchDevice.data()).release(0, QPoint(300, 100));
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(!drawer->isVisible());
+ QCOMPARE(buttonReleasedSpy.count(), 0);
+ QCOMPARE(overlayReleasedSpy.count(), 4);
+}
+
+void tst_QQuickDrawer::grabber()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("grabber.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+
+ QSignalSpy drawerOpenedSpy(drawer, SIGNAL(opened()));
+ QSignalSpy drawerClosedSpy(drawer, SIGNAL(closed()));
+ QVERIFY(drawerOpenedSpy.isValid());
+ QVERIFY(drawerClosedSpy.isValid());
+
+ drawer->open();
+ QVERIFY(drawerOpenedSpy.wait());
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(300, 100));
+ QVERIFY(drawerClosedSpy.wait());
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup *>();
+ QVERIFY(popup);
+
+ QSignalSpy popupOpenedSpy(popup, SIGNAL(opened()));
+ QSignalSpy popupClosedSpy(popup, SIGNAL(closed()));
+ QVERIFY(popupOpenedSpy.isValid());
+ QVERIFY(popupClosedSpy.isValid());
+
+ popup->open();
+ QTRY_COMPARE(popupOpenedSpy.count(), 1);
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(100, 300));
+ QTRY_COMPARE(popupClosedSpy.count(), 1);
+}
+
+void tst_QQuickDrawer::interactive_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::newRow("Window") << "window.qml";
+ QTest::newRow("ApplicationWindow") << "applicationwindow.qml";
+}
+
+void tst_QQuickDrawer::interactive()
+{
+ if (!(QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)))
+ QSKIP("Window activation is not supported");
+
+ QFETCH(QString, source);
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer*>();
+ QVERIFY(drawer);
+
+ drawer->setInteractive(false);
+
+ QSignalSpy openedSpy(drawer, SIGNAL(opened()));
+ QSignalSpy aboutToHideSpy(drawer, SIGNAL(aboutToHide()));
+ QVERIFY(openedSpy.isValid());
+ QVERIFY(aboutToHideSpy.isValid());
+
+ drawer->open();
+ QVERIFY(openedSpy.wait());
+
+ // click outside
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(300, 100));
+ QCOMPARE(aboutToHideSpy.count(), 0);
+
+ // drag inside
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(drawer->width(), 0));
+ QTest::mouseMove(window, QPoint(0, 0));
+ QCOMPARE(drawer->position(), 1.0);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(0, 0));
+ QCOMPARE(drawer->position(), 1.0);
+ QCOMPARE(aboutToHideSpy.count(), 0);
+
+ // drag outside
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - 1, 0));
+ QTest::mouseMove(window, QPoint(0, 0));
+ QCOMPARE(drawer->position(), 1.0);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(0, 0));
+ QCOMPARE(drawer->position(), 1.0);
+ QCOMPARE(aboutToHideSpy.count(), 0);
+
+ // close on escape
+ QTest::keyClick(window, Qt::Key_Escape);
+ QCOMPARE(aboutToHideSpy.count(), 0);
+}
+
+void tst_QQuickDrawer::flickable_data()
+{
+ QTest::addColumn<bool>("mouse");
+ QTest::addColumn<QPoint>("from");
+ QTest::addColumn<QPoint>("to");
+
+ QTest::newRow("mouse,straight") << true << QPoint(200, 200) << QPoint(200, 100);
+ QTest::newRow("mouse,diagonal") << true << QPoint(200, 200) << QPoint(250, 100);
+ QTest::newRow("touch,straight") << false << QPoint(200, 200) << QPoint(200, 100);
+ QTest::newRow("touch,diagonal") << false << QPoint(200, 200) << QPoint(250, 100);
+}
+
+void tst_QQuickDrawer::flickable()
+{
+ QFETCH(bool, mouse);
+ QFETCH(QPoint, from);
+ QFETCH(QPoint, to);
+
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("flickable.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+
+ QQuickFlickable *flickable = window->property("flickable").value<QQuickFlickable *>();
+ QVERIFY(flickable);
+
+ QSignalSpy drawerOpenedSpy(drawer, SIGNAL(opened()));
+ QVERIFY(drawerOpenedSpy.isValid());
+
+ drawer->open();
+ QVERIFY(drawerOpenedSpy.wait());
+
+ if (mouse)
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, from);
+ else
+ QTest::touchEvent(window, touchDevice.data()).press(0, from);
+
+ static const int steps = 10;
+ for (int i = 0; i < steps; ++i) {
+ int x = i * qAbs(from.x() - to.x()) / steps;
+ int y = i * qAbs(from.y() - to.y()) / steps;
+
+ if (mouse)
+ QTest::mouseMove(window, QPoint(x, y));
+ else
+ QTest::touchEvent(window, touchDevice.data()).move(0, QPoint(x, y));
+ QTest::qWait(1); // avoid infinite velocity
+ }
+
+ QVERIFY(flickable->isDragging());
+
+ if (mouse)
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, to);
+ else
+ QTest::touchEvent(window, touchDevice.data()).release(0, to);
+
+ QVERIFY(!flickable->isDragging());
+}
+
+void tst_QQuickDrawer::dragOverModalShadow_data()
+{
+ QTest::addColumn<bool>("mouse");
+ QTest::newRow("mouse") << true;
+ QTest::newRow("touch") << false;
+}
+
+// QTBUG-60602
+void tst_QQuickDrawer::dragOverModalShadow()
+{
+ QFETCH(bool, mouse);
+
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("dragOverModalShadow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup *>();
+ QVERIFY(popup);
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QVERIFY(!drawer->isVisible());
+
+ const QPoint from(popup->x(), popup->y() + popup->height() + 5);
+ const QPoint to(popup->x() + popup->width(), popup->y() + popup->height() + 5);
+
+ if (mouse)
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, from);
+ else
+ QTest::touchEvent(window, touchDevice.data()).press(0, from);
+ QVERIFY(!drawer->isVisible());
+
+ static const int steps = 10;
+ for (int i = 0; i < steps; ++i) {
+ int x = from.x() + i * qAbs(from.x() - to.x()) / steps;
+ int y = from.y() + i * qAbs(from.y() - to.y()) / steps;
+
+ if (mouse)
+ QTest::mouseMove(window, QPoint(x, y));
+ else
+ QTest::touchEvent(window, touchDevice.data()).move(0, QPoint(x, y));
+ QTest::qWait(1); // avoid infinite velocity
+ QVERIFY(!drawer->isVisible());
+ }
+
+ if (mouse)
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, to);
+ else
+ QTest::touchEvent(window, touchDevice.data()).release(0, to);
+ QVERIFY(!drawer->isVisible());
+}
+
+void tst_QQuickDrawer::nonModal_data()
+{
+ QTest::addColumn<bool>("mouse");
+ QTest::newRow("mouse") << true;
+ QTest::newRow("touch") << false;
+}
+
+// QTBUG-59652
+void tst_QQuickDrawer::nonModal()
+{
+ QFETCH(bool, mouse);
+
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("window.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+ drawer->setModal(false);
+
+ const QPoint from(1, 1);
+ const QPoint to(150, 1);
+
+ // drag to open
+ QSignalSpy openedSpy(drawer, SIGNAL(opened()));
+ QVERIFY(openedSpy.isValid());
+
+ if (mouse)
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, from);
+ else
+ QTest::touchEvent(window, touchDevice.data()).press(0, from);
+
+ static const int steps = 10;
+ for (int i = 0; i < steps; ++i) {
+ int x = i * qAbs(from.x() - to.x()) / steps;
+ int y = i * qAbs(from.y() - to.y()) / steps;
+
+ if (mouse)
+ QTest::mouseMove(window, QPoint(x, y));
+ else
+ QTest::touchEvent(window, touchDevice.data()).move(0, QPoint(x, y));
+ QTest::qWait(1); // avoid infinite velocity
+ }
+ QVERIFY(drawer->isVisible());
+
+ if (mouse)
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, to);
+ else
+ QTest::touchEvent(window, touchDevice.data()).release(0, to);
+ QVERIFY(openedSpy.wait());
+
+ // drag to close
+ QSignalSpy closedSpy(drawer, SIGNAL(closed()));
+ QVERIFY(closedSpy.isValid());
+
+ if (mouse)
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, to);
+ else
+ QTest::touchEvent(window, touchDevice.data()).press(0, to);
+
+ for (int i = steps - 1; i >= 0; --i) {
+ int x = i * qAbs(from.x() - to.x()) / steps;
+ int y = i * qAbs(from.y() - to.y()) / steps;
+
+ if (mouse)
+ QTest::mouseMove(window, QPoint(x, y));
+ else
+ QTest::touchEvent(window, touchDevice.data()).move(0, QPoint(x, y));
+ QTest::qWait(1); // avoid infinite velocity
+ }
+ QVERIFY(drawer->isVisible());
+
+ if (mouse)
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, from);
+ else
+ QTest::touchEvent(window, touchDevice.data()).release(0, from);
+ QVERIFY(closedSpy.wait());
+}
+
+void tst_QQuickDrawer::slider_data()
+{
+ QTest::addColumn<bool>("mouse");
+ QTest::addColumn<int>("delta");
+
+ QTest::newRow("mouse") << true << 2;
+ QTest::newRow("touch") << false << 2;
+ QTest::newRow("mouse,delta") << true << 296 / 8;
+}
+
+void tst_QQuickDrawer::slider()
+{
+ QFETCH(bool, mouse);
+ QFETCH(int, delta);
+
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("slider.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+
+ QQuickSlider *slider = window->property("slider").value<QQuickSlider *>();
+ QVERIFY(slider);
+
+ QCOMPARE(slider->value(), 1.0);
+ QCOMPARE(drawer->position(), 1.0);
+
+ const qreal y = slider->height() / 2;
+ const QPoint from(slider->width() - 1, y);
+ const QPoint to(1, y);
+
+ QTest::qWait(1);
+
+ if (mouse)
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, from);
+ else
+ QTest::touchEvent(window, touchDevice.data()).press(0, from);
+
+ QTest::qWait(1);
+
+ int distance = qAbs(from.x() - to.x());
+ for (int dx = delta; dx <= distance; dx += delta) {
+ if (mouse)
+ QTest::mouseMove(window, from - QPoint(dx, 0));
+ else
+ QTest::touchEvent(window, touchDevice.data()).move(0, from - QPoint(dx, 0));
+ QTest::qWait(1); // avoid infinite velocity
+ }
+
+ QCOMPARE(slider->value(), 0.0);
+ QCOMPARE(drawer->position(), 1.0);
+
+ if (mouse)
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, to);
+ else
+ QTest::touchEvent(window, touchDevice.data()).release(0, to);
+}
+
+void tst_QQuickDrawer::topEdgeScreenEdge()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("topEdgeScreenEdge.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickDrawer *drawer = window->property("drawer").value<QQuickDrawer *>();
+ QVERIFY(drawer);
+
+ QVERIFY(QMetaObject::invokeMethod(drawer, "open"));
+ QTRY_COMPARE(drawer->position(), 1.0);
+}
+
+void tst_QQuickDrawer::touchOutsideOverlay() // QTBUG-103811
+{
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("itemPartialOverlayModal.qml")));
+ auto *drawer = window.rootObject()->findChild<QQuickDrawer*>();
+ QVERIFY(drawer);
+ QSignalSpy openedSpy(drawer, &QQuickDrawer::opened);
+ QSignalSpy closedSpy(drawer, &QQuickDrawer::closed);
+
+ drawer->open();
+ QVERIFY(openedSpy.size() == 1 || openedSpy.wait());
+ QVERIFY(drawer->isOpened());
+
+ // tap-dance in bottom area beyond the overlay
+ QPoint p1(100, 250);
+ QPoint p2(300, 250);
+ QTest::touchEvent(&window, touchDevice.data()).press(1, p1);
+ p1 -= QPoint(1, 0);
+ QTest::touchEvent(&window, touchDevice.data()).move(1, p1).press(2, p2);
+ p2 -= QPoint(1, 0);
+ QTest::touchEvent(&window, touchDevice.data()).release(1, p1).move(2, p2);
+ QTest::touchEvent(&window, touchDevice.data()).press(1, p1).stationary(2);
+ QTest::touchEvent(&window, touchDevice.data()).release(1, p1).release(2, p2);
+ QQuickTouchUtils::flush(&window);
+
+ // tap the overlay to try to close the drawer
+ QVERIFY(drawer->closePolicy().testFlag(QQuickPopup::CloseOnReleaseOutside));
+ const QPoint p3(300, 100);
+ QTest::touchEvent(&window, touchDevice.data()).press(3, p3);
+ QTest::touchEvent(&window, touchDevice.data()).release(3, p3);
+ QQuickTouchUtils::flush(&window);
+ QVERIFY(closedSpy.size() == 1 || closedSpy.wait());
+ QCOMPARE(drawer->isOpened(), false);
+}
+
+QTEST_QUICKCONTROLS_MAIN(tst_QQuickDrawer)
+
+#include "tst_qquickdrawer.moc"
diff --git a/tests/auto/quickcontrols2/qquickheaderview/CMakeLists.txt b/tests/auto/quickcontrols2/qquickheaderview/CMakeLists.txt
new file mode 100644
index 0000000000..1bfae70cbb
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickheaderview/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Generated from qquickheaderview.pro.
+
+#####################################################################
+## tst_qquickheaderview Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickheaderview
+ SOURCES
+ tst_qquickheaderview.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:qquickheaderview.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickheaderview CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickheaderview CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickheaderview/data/ListModel.qml b/tests/auto/quickcontrols2/qquickheaderview/data/ListModel.qml
new file mode 100644
index 0000000000..b8160a46dd
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickheaderview/data/ListModel.qml
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import TestTableModel
+
+Window {
+ objectName: "window"
+ width: 400
+ height: 400
+ visible: true
+
+ Component {
+ id: cellDelegate
+ Rectangle {
+ implicitHeight: 25
+ implicitWidth: 50
+ color: "red"
+ Text {
+ text: row + "," + column
+ }
+ }
+ }
+
+ HorizontalHeaderView {
+ id: hhv
+ objectName: "horizontalHeader"
+ model: ["AAA", "BBB", "CCC", "DDD", "EEE"]
+ syncView: tv
+ anchors.top: parent.top
+ x: vhv.width
+ }
+
+ VerticalHeaderView {
+ id: vhv
+ objectName: "verticalHeader"
+ model: ["111", "222", "333", "444", "555"]
+ syncView: tv
+ anchors.left: parent.left
+ y: hhv.height
+ }
+
+ TableView {
+ id: tv
+ objectName: "tableView"
+ model: TestTableModel {
+ id: tm
+ objectName: "tableModel"
+ rowCount: 5
+ columnCount: 5
+ }
+ delegate: cellDelegate
+ anchors.top: hhv.bottom
+ anchors.left: vhv.right
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickheaderview/data/Window.qml b/tests/auto/quickcontrols2/qquickheaderview/data/Window.qml
new file mode 100644
index 0000000000..9bf9963c69
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickheaderview/data/Window.qml
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import TestTableModel
+import TestTableModelWithHeader
+import HeaderDataProxyModel
+
+Window {
+ objectName: "window"
+ width: 400
+ height: 400
+ visible: true
+
+ Component {
+ id: cellDelegate
+ Rectangle {
+ implicitHeight: 25
+ implicitWidth: 50
+ color: "red"
+ Text {
+ text: row + "," + column
+ }
+ }
+ }
+
+ HeaderDataProxyModel {
+ id: pm
+ objectName: "proxyModel"
+ }
+
+ TestTableModel {
+ id: tm
+ objectName: "tableModel"
+ rowCount: 5
+ columnCount: 10
+ }
+
+ TestTableModelWithHeader {
+ id: thm
+ objectName: "tableHeaderModel"
+ rowCount: 5
+ columnCount: 10
+ }
+
+ HorizontalHeaderView {
+ id: hhv
+ objectName: "horizontalHeader"
+ width: 200
+ height: 200
+ model: thm
+ delegate: cellDelegate
+ }
+
+ VerticalHeaderView {
+ id: vhv
+ objectName: "verticalHeader"
+ width: 200
+ height: 200
+ model: thm
+ delegate: cellDelegate
+ }
+
+ TableView {
+ id: tv
+ objectName: "tableView"
+ width: 400
+ height: 400
+ model: thm
+ delegate:cellDelegate
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickheaderview/tst_qquickheaderview.cpp b/tests/auto/quickcontrols2/qquickheaderview/tst_qquickheaderview.cpp
new file mode 100644
index 0000000000..741875c112
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickheaderview/tst_qquickheaderview.cpp
@@ -0,0 +1,411 @@
+/****************************************************************************
+**
+** 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qsignalspy.h>
+#include <QtTest/qtest.h>
+#include <QtQuickTest/quicktest.h>
+
+#include <QAbstractItemModelTester>
+#include <QtQml/QQmlEngine>
+#include <QtQuick/private/qquickwindow_p.h>
+#include <QtQuick/private/qquicktext_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickheaderview_p.h>
+#include <private/qquickheaderview_p_p.h>
+
+class TestTableModel : public QAbstractTableModel {
+ Q_OBJECT
+ Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount NOTIFY rowCountChanged)
+ Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount NOTIFY columnCountChanged)
+
+public:
+ TestTableModel(QObject *parent = nullptr)
+ : QAbstractTableModel(parent)
+ {
+ }
+
+ int rowCount(const QModelIndex &index = QModelIndex()) const override
+ {
+ if (index.isValid())
+ return 0;
+ return m_rows;
+ }
+ virtual void setRowCount(int count)
+ {
+ beginResetModel();
+ m_rows = count;
+ emit rowCountChanged();
+ endResetModel();
+ }
+
+ int columnCount(const QModelIndex &index = QModelIndex()) const override
+ {
+ if (index.isValid())
+ return 0;
+ return m_cols;
+ }
+ virtual void setColumnCount(int count)
+ {
+ beginResetModel();
+ m_cols = count;
+ emit columnCountChanged();
+ endResetModel();
+ }
+
+ int indexValue(const QModelIndex &index) const
+ {
+ return index.row() + (index.column() * rowCount());
+ }
+
+ Q_INVOKABLE QModelIndex toQModelIndex(int serialIndex)
+ {
+ return createIndex(serialIndex % rowCount(), serialIndex / rowCount());
+ }
+
+ Q_INVOKABLE QVariant data(int row, int col)
+ {
+ return data(createIndex(row, col), Qt::DisplayRole);
+ }
+ QVariant data(const QModelIndex &index, int role) const override
+ {
+ if (!index.isValid())
+ return QVariant();
+
+ switch (role) {
+ case Qt::DisplayRole:
+ return QString("%1, %2, checked: %3 ")
+ .arg(index.row())
+ .arg(index.column())
+ .arg(m_checkedCells.contains(indexValue(index)));
+ case Qt::EditRole:
+ return m_checkedCells.contains(indexValue(index));
+ default:
+ return QVariant();
+ }
+ }
+
+ bool setData(const QModelIndex &index, const QVariant &value,
+ int role = Qt::EditRole) override
+ {
+
+ if (role != Qt::EditRole)
+ return false;
+
+ int i = indexValue(index);
+ bool checked = value.toBool();
+ if (checked == m_checkedCells.contains(i))
+ return false;
+
+ if (checked)
+ m_checkedCells.insert(i);
+ else
+ m_checkedCells.remove(i);
+
+ emit dataChanged(index, index, { role });
+ return true;
+ }
+
+ Q_INVOKABLE QHash<int, QByteArray> roleNames() const override
+ {
+ return {
+ { Qt::DisplayRole, "display" },
+ { Qt::EditRole, "edit" }
+ };
+ }
+
+signals:
+ void rowCountChanged();
+ void columnCountChanged();
+
+private:
+ int m_rows = 0;
+ int m_cols = 0;
+
+ QSet<int> m_checkedCells;
+};
+
+class TestTableModelWithHeader : public TestTableModel {
+
+ Q_OBJECT
+public:
+ void setRowCount(int count) override
+ {
+ vData.resize(count);
+ TestTableModel::setRowCount(count);
+ }
+
+ void setColumnCount(int count) override
+ {
+ hData.resize(count);
+ TestTableModel::setColumnCount(count);
+ }
+ Q_INVOKABLE QVariant headerData(int section, Qt::Orientation orientation,
+ int role = Qt::DisplayRole) const override
+ {
+ auto sectionCount = orientation == Qt::Horizontal ? columnCount() : rowCount();
+ if (section < 0 || section >= sectionCount)
+ return QVariant();
+ switch (role) {
+ case Qt::DisplayRole:
+ case Qt::EditRole: {
+ auto &data = orientation == Qt::Horizontal ? hData : vData;
+ return data[section].toString();
+ }
+ default:
+ return QVariant();
+ }
+ }
+ Q_INVOKABLE bool setHeaderData(int section, Qt::Orientation orientation,
+ const QVariant &value, int role = Qt::EditRole) override
+ {
+ qDebug() << Q_FUNC_INFO
+ << "section:" << section
+ << "orient:" << orientation
+ << "value:" << value
+ << "role:" << QAbstractItemModel::roleNames()[role];
+ auto sectionCount = orientation == Qt::Horizontal ? columnCount() : rowCount();
+ if (section < 0 || section >= sectionCount)
+ return false;
+ auto &data = orientation == Qt::Horizontal ? hData : vData;
+ data[section] = value;
+ emit headerDataChanged(orientation, section, section);
+ return true;
+ }
+
+private:
+ QList<QVariant> hData, vData;
+};
+
+class tst_QQuickHeaderView : public QQmlDataTest {
+ Q_OBJECT
+
+public:
+ tst_QQuickHeaderView();
+
+private slots:
+ void initTestCase() override;
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void defaults();
+ void testHeaderDataProxyModel();
+ void testOrientation();
+ void testModel();
+ void listModel();
+
+private:
+ QQmlEngine *engine;
+ QString errorString;
+
+ std::unique_ptr<QObject> rootObjectFromQml(const char *file)
+ {
+ auto component = new QQmlComponent(engine);
+ component->loadUrl(testFileUrl(file));
+ auto root = component->create();
+ if (!root)
+ errorString = component->errorString();
+ return std::unique_ptr<QObject>(new QObject(root));
+ }
+};
+
+tst_QQuickHeaderView::tst_QQuickHeaderView()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_QQuickHeaderView::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+ qmlRegisterType<TestTableModel>("TestTableModel", 0, 1, "TestTableModel");
+ qmlRegisterType<TestTableModelWithHeader>("TestTableModelWithHeader", 0, 1, "TestTableModelWithHeader");
+ qmlRegisterType<QHeaderDataProxyModel>("HeaderDataProxyModel", 0, 1, "HeaderDataProxyModel");
+}
+
+void tst_QQuickHeaderView::cleanupTestCase()
+{
+}
+
+void tst_QQuickHeaderView::init()
+{
+ engine = new QQmlEngine(this);
+}
+
+void tst_QQuickHeaderView::cleanup()
+{
+ if (engine) {
+ delete engine;
+ engine = nullptr;
+ }
+}
+
+void tst_QQuickHeaderView::defaults()
+{
+ QQmlComponent component(engine);
+ component.loadUrl(testFileUrl("Window.qml"));
+
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(root, qPrintable(component.errorString()));
+
+ auto hhv = root->findChild<QQuickHorizontalHeaderView *>("horizontalHeader");
+ QVERIFY(hhv);
+ auto vhv = root->findChild<QQuickVerticalHeaderView *>("verticalHeader");
+ QVERIFY(vhv);
+ auto tm = root->findChild<TestTableModel *>("tableModel");
+ QVERIFY(tm);
+ auto pm = root->findChild<QHeaderDataProxyModel *>("proxyModel");
+ QVERIFY(pm);
+ auto tv = root->findChild<QQuickTableView *>("tableView");
+ QVERIFY(tv);
+}
+
+void tst_QQuickHeaderView::testHeaderDataProxyModel()
+{
+ TestTableModel model;
+ model.setColumnCount(10);
+ model.setRowCount(7);
+ QHeaderDataProxyModel model2;
+ model2.setSourceModel(&model);
+ QAbstractItemModelTester tester(&model2, QAbstractItemModelTester::FailureReportingMode::QtTest);
+}
+
+void tst_QQuickHeaderView::testOrientation()
+{
+ QQmlComponent component(engine);
+ component.loadUrl(testFileUrl("Window.qml"));
+
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(root, qPrintable(component.errorString()));
+ // Make sure that the window is shown at this point, so that the test
+ // behaves similarly on all platforms
+ QVERIFY(QTest::qWaitForWindowActive(qobject_cast<QWindow *>(root.data())));
+
+ // If we want to make use of syncDirection, we need to set syncView as well.
+ // For that we need to create a second dummy table view.
+ QQuickTableView otherView;
+
+ auto hhv = root->findChild<QQuickHorizontalHeaderView *>("horizontalHeader");
+ QVERIFY(hhv);
+ QCOMPARE(hhv->columns(), 10);
+ QCOMPARE(hhv->rows(), 1);
+ auto vhv = root->findChild<QQuickVerticalHeaderView *>("verticalHeader");
+ QVERIFY(vhv);
+
+ hhv->setSyncView(&otherView);
+ hhv->setSyncDirection(Qt::Vertical);
+ QVERIFY(QQuickTest::qWaitForItemPolished(hhv));
+
+ vhv->setSyncView(&otherView);
+ vhv->setSyncDirection(Qt::Horizontal);
+ QVERIFY(QQuickTest::qWaitForItemPolished(vhv));
+
+ // Explicitly setting a different synDirection is ignored
+ QCOMPARE(hhv->syncDirection(), Qt::Horizontal);
+ QCOMPARE(hhv->flickableDirection(), QQuickFlickable::HorizontalFlick);
+ QCOMPARE(vhv->syncDirection(), Qt::Vertical);
+ QCOMPARE(vhv->flickableDirection(), QQuickFlickable::VerticalFlick);
+}
+
+void tst_QQuickHeaderView::testModel()
+{
+ QQmlComponent component(engine);
+ component.loadUrl(testFileUrl("Window.qml"));
+
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(root, qPrintable(component.errorString()));
+
+ auto hhv = root->findChild<QQuickHorizontalHeaderView *>("horizontalHeader");
+ QVERIFY(hhv);
+ auto thm = root->findChild<TestTableModel *>("tableHeaderModel");
+ QVERIFY(thm);
+ auto pm = root->findChild<QHeaderDataProxyModel *>("proxyModel");
+ QVERIFY(pm);
+
+ QSignalSpy modelChangedSpy(hhv, SIGNAL(modelChanged()));
+ QVERIFY(modelChangedSpy.isValid());
+
+ hhv->setModel(QVariant::fromValue(thm));
+ QCOMPARE(modelChangedSpy.count(), 0);
+
+ hhv->setModel(QVariant::fromValue(pm));
+ QCOMPARE(modelChangedSpy.count(), 1);
+
+ TestTableModel ttm2;
+ ttm2.setRowCount(100);
+ ttm2.setColumnCount(30);
+ hhv->setModel(QVariant::fromValue(&ttm2));
+ QCOMPARE(modelChangedSpy.count(), 2);
+}
+
+void tst_QQuickHeaderView::listModel()
+{
+ QQmlComponent component(engine);
+ component.loadUrl(testFileUrl("ListModel.qml"));
+
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(root, qPrintable(component.errorString()));
+
+ if (!QTest::qWaitForWindowActive(qobject_cast<QWindow *>(root.data())))
+ QSKIP("Window failed to become active!");
+
+ auto hhv = root->findChild<QQuickHorizontalHeaderView *>("horizontalHeader");
+ QVERIFY(hhv);
+ auto vhv = root->findChild<QQuickVerticalHeaderView *>("verticalHeader");
+ QVERIFY(vhv);
+
+ auto hhvCell1 = hhv->childAt(0, 0)->childAt(0, 0)->findChild<QQuickText *>();
+ QVERIFY(hhvCell1);
+ QCOMPARE(hhvCell1->property("text"), "AAA");
+
+ auto hhvCell2 = hhv->childAt(hhvCell1->width() + 5, 0)->
+ childAt(hhvCell1->width() + 5, 0)->findChild<QQuickText *>();
+ QVERIFY(hhvCell2);
+ QCOMPARE(hhvCell2->property("text"), "BBB");
+
+ auto vhvCell1 = vhv->childAt(0, 0)->childAt(0, 0)->findChild<QQuickText *>();
+ QVERIFY(vhvCell1);
+ QCOMPARE(vhvCell1->property("text"), "111");
+
+ auto vhvCell2 = vhv->childAt(0, vhvCell1->height() + 5)->
+ childAt(0, vhvCell1->height() + 5)->findChild<QQuickText *>();
+ QVERIFY(vhvCell2);
+ QCOMPARE(vhvCell2->property("text"), "222");
+}
+
+QTEST_MAIN(tst_QQuickHeaderView)
+
+#include "tst_qquickheaderview.moc"
diff --git a/tests/auto/quickcontrols2/qquickiconimage/BLACKLIST b/tests/auto/quickcontrols2/qquickiconimage/BLACKLIST
new file mode 100644
index 0000000000..70c935375d
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/BLACKLIST
@@ -0,0 +1,15 @@
+# QTBUG-101006
+[nameBindingSourceSize]
+android
+[sourceBindingSourceSize]
+android
+[alignment]
+android
+[color]
+android
+[fileSelectors]
+android
+[imageProvider]
+android
+[translucentColors]
+android
diff --git a/tests/auto/quickcontrols2/qquickiconimage/CMakeLists.txt b/tests/auto/quickcontrols2/qquickiconimage/CMakeLists.txt
new file mode 100644
index 0000000000..acb9b99a1a
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/CMakeLists.txt
@@ -0,0 +1,84 @@
+# Generated from qquickiconimage.pro.
+
+#####################################################################
+## tst_qquickiconimage Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/*.qml)
+list(APPEND test_data ${test_data_glob})
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/icons/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickiconimage
+ SOURCES
+ tst_qquickiconimage.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ LIBRARIES
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickPrivate
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Qml
+ Qt::QmlPrivate
+ Qt::Quick
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(resources_resource_files
+ "icons/testtheme/16x16/actions/appointment-new.png"
+ "icons/testtheme/22x22/actions/+testselector/appointment-new.png"
+ "icons/testtheme/22x22/actions/+testselector/appointment-new@2x.png"
+ "icons/testtheme/22x22/actions/appointment-new.png"
+ "icons/testtheme/22x22/actions/appointment-new@2x.png"
+ "icons/testtheme/22x22/actions/color-test-original.png"
+ "icons/testtheme/22x22/actions/color-test-original@2x.png"
+ "icons/testtheme/22x22/actions/color-test-tinted.png"
+ "icons/testtheme/22x22/actions/color-test-tinted@2x.png"
+ "icons/testtheme/22x22@2/actions/+testselector/appointment-new.png"
+ "icons/testtheme/22x22@2/actions/appointment-new.png"
+ "icons/testtheme/appointment-new.svg"
+ "icons/testtheme/index.theme"
+)
+
+qt_internal_add_resource(tst_qquickiconimage "resources"
+ PREFIX
+ "/"
+ FILES
+ ${resources_resource_files}
+)
+
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickiconimage CONDITION TARGET Qt::Svg
+ PUBLIC_LIBRARIES
+ Qt::Svg
+)
+
+qt_internal_extend_target(tst_qquickiconimage CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickiconimage CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/alignment.qml b/tests/auto/quickcontrols2/qquickiconimage/data/alignment.qml
new file mode 100644
index 0000000000..e6861520b9
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/alignment.qml
@@ -0,0 +1,16 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Row {
+ width: 200
+ height: 200
+
+ IconImage {
+ name: "appointment-new"
+ sourceSize: Qt.size(22, 22)
+ }
+ Image {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/color.qml b/tests/auto/quickcontrols2/qquickiconimage/data/color.qml
new file mode 100644
index 0000000000..b44b43885c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/color.qml
@@ -0,0 +1,18 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Row {
+ width: 200
+ height: 200
+
+ IconImage {
+ source: "qrc:/icons/testtheme/22x22/actions/color-test-original.png"
+ sourceSize: Qt.size(22, 22)
+ color: "red"
+ }
+ Image {
+ source: "qrc:/icons/testtheme/22x22/actions/color-test-tinted.png"
+ fillMode: Image.Pad
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/fileSelectors.qml b/tests/auto/quickcontrols2/qquickiconimage/data/fileSelectors.qml
new file mode 100644
index 0000000000..e6861520b9
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/fileSelectors.qml
@@ -0,0 +1,16 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Row {
+ width: 200
+ height: 200
+
+ IconImage {
+ name: "appointment-new"
+ sourceSize: Qt.size(22, 22)
+ }
+ Image {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/imageProvider.qml b/tests/auto/quickcontrols2/qquickiconimage/data/imageProvider.qml
new file mode 100644
index 0000000000..9b18a99e35
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/imageProvider.qml
@@ -0,0 +1,9 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+IconLabel {
+ icon.color: "transparent"
+ icon.source: "image://provider/red"
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingNoSizes.qml b/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingNoSizes.qml
new file mode 100644
index 0000000000..d457d205d5
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingNoSizes.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+IconImage {
+ name: "appointment-new"
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingSourceSize.qml b/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingSourceSize.qml
new file mode 100644
index 0000000000..e6861520b9
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingSourceSize.qml
@@ -0,0 +1,16 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Row {
+ width: 200
+ height: 200
+
+ IconImage {
+ name: "appointment-new"
+ sourceSize: Qt.size(22, 22)
+ }
+ Image {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingSourceSizeWidthHeight.qml b/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingSourceSizeWidthHeight.qml
new file mode 100644
index 0000000000..5e7ebefca4
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/nameBindingSourceSizeWidthHeight.qml
@@ -0,0 +1,10 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+IconImage {
+ name: "appointment-new"
+ sourceSize: Qt.size(22, 22)
+ width: 16
+ height: 16
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/root.qml b/tests/auto/quickcontrols2/qquickiconimage/data/root.qml
new file mode 100644
index 0000000000..ed02d2df7a
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/root.qml
@@ -0,0 +1,6 @@
+import QtQuick
+
+Item {
+ width: 200
+ height: 200
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingNoSizes.qml b/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingNoSizes.qml
new file mode 100644
index 0000000000..34fc6b339c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingNoSizes.qml
@@ -0,0 +1,15 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Row {
+ width: 200
+ height: 200
+
+ IconImage {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ }
+ Image {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceSize.qml b/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceSize.qml
new file mode 100644
index 0000000000..9f1b629074
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceSize.qml
@@ -0,0 +1,16 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Row {
+ width: 200
+ height: 200
+
+ IconImage {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ sourceSize: Qt.size(22, 22)
+ }
+ Image {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceSizeWidthHeight.qml b/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceSizeWidthHeight.qml
new file mode 100644
index 0000000000..4dc3ac7588
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceSizeWidthHeight.qml
@@ -0,0 +1,10 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+IconImage {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ sourceSize: Qt.size(22, 22)
+ width: 16
+ height: 16
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceTooLarge.qml b/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceTooLarge.qml
new file mode 100644
index 0000000000..a54d998aa5
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/sourceBindingSourceTooLarge.qml
@@ -0,0 +1,8 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+IconImage {
+ source: "qrc:/icons/testtheme/22x22/actions/appointment-new.png"
+ sourceSize: Qt.size(32, 32)
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/svgNoSizes.qml b/tests/auto/quickcontrols2/qquickiconimage/data/svgNoSizes.qml
new file mode 100644
index 0000000000..e29c23c5b2
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/svgNoSizes.qml
@@ -0,0 +1,15 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Row {
+ width: 200
+ height: 200
+
+ IconImage {
+ source: "qrc:/icons/testtheme/appointment-new.svg"
+ }
+ Image {
+ source: "qrc:/icons/testtheme/appointment-new.svg"
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/svgSourceBindingSourceSize.qml b/tests/auto/quickcontrols2/qquickiconimage/data/svgSourceBindingSourceSize.qml
new file mode 100644
index 0000000000..4674e8f14b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/svgSourceBindingSourceSize.qml
@@ -0,0 +1,17 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Row {
+ width: 200
+ height: 200
+
+ IconImage {
+ source: "qrc:/data/icons/testtheme/appointment-new.svg"
+ sourceSize: Qt.size(22, 22)
+ }
+ Image {
+ source: "qrc:/data/icons/testtheme/appointment-new.svg"
+ sourceSize: Qt.size(22, 22)
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/data/translucentColors.qml b/tests/auto/quickcontrols2/qquickiconimage/data/translucentColors.qml
new file mode 100644
index 0000000000..ad67bfe522
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/data/translucentColors.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+ApplicationWindow {
+ width: 500
+ height: 500
+ visible: true
+
+ IconImage {
+ width: Math.min(250, parent.width)
+ height: Math.min(250, parent.height)
+ source: "qrc:/icons/testtheme/22x22/actions/color-test-original.png"
+ sourceSize: Qt.size(250, 0)
+ color: Qt.rgba(0, 0, 0, 0.5)
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/16x16/actions/appointment-new.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/16x16/actions/appointment-new.png
new file mode 100644
index 0000000000..4356af9516
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/16x16/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/+testselector/appointment-new.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/+testselector/appointment-new.png
new file mode 100644
index 0000000000..d3134a55d4
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/+testselector/appointment-new.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/+testselector/appointment-new@2x.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/+testselector/appointment-new@2x.png
new file mode 100644
index 0000000000..250b94b019
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/+testselector/appointment-new@2x.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/appointment-new.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/appointment-new.png
new file mode 100644
index 0000000000..04cd010a68
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/appointment-new@2x.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/appointment-new@2x.png
new file mode 100644
index 0000000000..a63bbaf4c5
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/appointment-new@2x.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-original.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-original.png
new file mode 100644
index 0000000000..c17d166402
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-original.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-original@2x.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-original@2x.png
new file mode 100644
index 0000000000..d4411658f9
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-original@2x.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-tinted.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-tinted.png
new file mode 100644
index 0000000000..6f7938e365
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-tinted.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-tinted@2x.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-tinted@2x.png
new file mode 100644
index 0000000000..9215fc423b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22/actions/color-test-tinted@2x.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22@2/actions/+testselector/appointment-new.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22@2/actions/+testselector/appointment-new.png
new file mode 100644
index 0000000000..250b94b019
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22@2/actions/+testselector/appointment-new.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22@2/actions/appointment-new.png b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22@2/actions/appointment-new.png
new file mode 100644
index 0000000000..a63bbaf4c5
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/22x22@2/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/appointment-new.svg b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/appointment-new.svg
new file mode 100644
index 0000000000..4cb14f82f0
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/appointment-new.svg
@@ -0,0 +1,425 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:export-ydpi="90.000000"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
+ width="48px"
+ height="48px"
+ id="svg11300"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
+ sodipodi:docname="appointment-new.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective59" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5204">
+ <stop
+ style="stop-color:#c4a000;stop-opacity:1;"
+ offset="0"
+ id="stop5206" />
+ <stop
+ style="stop-color:#c4a000;stop-opacity:0;"
+ offset="1"
+ id="stop5208" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5196">
+ <stop
+ style="stop-color:#c4a000;stop-opacity:1;"
+ offset="0"
+ id="stop5198" />
+ <stop
+ style="stop-color:#c4a000;stop-opacity:0;"
+ offset="1"
+ id="stop5200" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient12512">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop12513" />
+ <stop
+ style="stop-color:#fff520;stop-opacity:0.89108908;"
+ offset="0.50000000"
+ id="stop12517" />
+ <stop
+ style="stop-color:#fff300;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop12514" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12512"
+ id="radialGradient278"
+ gradientUnits="userSpaceOnUse"
+ cx="55.000000"
+ cy="125.00000"
+ fx="55.000000"
+ fy="125.00000"
+ r="14.375000" />
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop10655" />
+ <stop
+ style="stop-color:#9193af;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop10657" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop42176" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop42178" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ style="stop-color:#fffffd;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2147" />
+ <stop
+ style="stop-color:#cbcbc9;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2149" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ id="stop37937"
+ offset="0.0000000"
+ style="stop-color:#9497b3;stop-opacity:1.0000000;" />
+ <stop
+ id="stop37939"
+ offset="1.0000000"
+ style="stop-color:#4c4059;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2152">
+ <stop
+ id="stop2154"
+ offset="0.0000000"
+ style="stop-color:#9aa29a;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2156"
+ offset="1.0000000"
+ style="stop-color:#b5beb5;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3816">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3818" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3820" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient3822"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2152"
+ id="linearGradient4307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.123841,0.000000,0.000000,0.969691,-31.88758,-19.59492)"
+ x1="8.9156475"
+ y1="37.197018"
+ x2="9.8855033"
+ y2="52.090678" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient4309"
+ gradientUnits="userSpaceOnUse"
+ cx="11.329200"
+ cy="10.583970"
+ fx="11.329200"
+ fy="10.583970"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient4311"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient4313"
+ gradientUnits="userSpaceOnUse"
+ x1="6.3422160"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5196"
+ id="radialGradient5202"
+ cx="23.375"
+ cy="10.972863"
+ fx="23.375"
+ fy="10.972863"
+ r="3.3478092"
+ gradientTransform="matrix(3.630420,1.654030e-15,-1.608743e-15,3.742066,-61.48607,-29.18618)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5204"
+ id="linearGradient5210"
+ x1="19.667364"
+ y1="4.2570662"
+ x2="20.329933"
+ y2="5.2845874"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5212"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ </defs>
+ <sodipodi:namedview
+ stroke="#c4a000"
+ fill="#babdb6"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="13.2248"
+ inkscape:cy="25.106052"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="833"
+ inkscape:window-height="772"
+ inkscape:window-x="305"
+ inkscape:window-y="76" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>http://jimmac.musichall.cz</dc:source>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ <dc:title>New Appointment</dc:title>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>appointment</rdf:li>
+ <rdf:li>new</rdf:li>
+ <rdf:li>meeting</rdf:li>
+ <rdf:li>rvsp</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4318"
+ style="opacity:1;color:#000000;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(2.563158,0.000000,0.000000,1.219602,-55.98414,14.04144)" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path14341"
+ d="M 18.587591,1.403729 L 4.226755,18.096665 L 5.4854717,19.339844 L 18.587591,1.403729 z "
+ style="color:#000000;fill:url(#linearGradient4307);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path18921"
+ d="M 18.467176,1.3138035 L 5.6605716,19.072612 L 7.4900985,20.687913 L 18.467176,1.3138035 z "
+ style="fill:#fefefe;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ transform="matrix(1.431529,0.000000,0.000000,1.431529,0.569459,-1.654618)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path27786"
+ style="fill:url(#radialGradient5212);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:0.69855404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.163838,0.000000,0.000000,1.163838,4.824801,2.777556)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path35549"
+ style="fill:url(#radialGradient4311);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4313);stroke-width:0.71139598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:#000000;fill:url(#radialGradient5202);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5210);stroke-width:0.56498736;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4120"
+ sodipodi:cx="23.375"
+ sodipodi:cy="11.875"
+ sodipodi:rx="8.5"
+ sodipodi:ry="8.5"
+ d="M 16.679382,6.6387137 A 8.5,8.5 0 0 1 23.332691,3.3751053 L 23.375,11.875 z"
+ transform="matrix(1.769951,0.000000,0.000000,1.769951,-17.02424,1.610741)"
+ sodipodi:start="3.8052902"
+ sodipodi:end="4.7074114" />
+ <path
+ transform="matrix(2.073295,0.000000,0.000000,2.073295,-7.310224,-13.13682)"
+ d="M 16.40625 17.28125 A 1.21875 1.21875 0 1 1 13.96875,17.28125 A 1.21875 1.21875 0 1 1 16.40625 17.28125 z"
+ sodipodi:ry="1.21875"
+ sodipodi:rx="1.21875"
+ sodipodi:cy="17.28125"
+ sodipodi:cx="15.1875"
+ id="path34778"
+ style="fill:#f3f3f3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48232403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ id="path35559"
+ d="M 22.176614,20.718014 L 13.155702,13.140282"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ id="path35561"
+ d="M 19.408614,29.776506 L 22.368655,25.283228"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:nodetypes="cc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,-12.40939)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35563"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,14.80922)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35565"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-35.91004,1.199890)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35567"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-8.691448,1.199890)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35569"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient4309);stroke-width:0.73656511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path10651"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ transform="matrix(1.357654,0.000000,0.000000,1.357654,1.769896,-0.493735)" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block"
+ id="path12511"
+ sodipodi:cx="55"
+ sodipodi:cy="125"
+ sodipodi:rx="14.375"
+ sodipodi:ry="14.375"
+ d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z"
+ transform="matrix(0.611127,0.000000,0.000000,0.611127,5.544052,-66.92818)"
+ inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
+ inkscape:export-xdpi="33.852203"
+ inkscape:export-ydpi="33.852203" />
+ </g>
+</svg>
diff --git a/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/index.theme b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/index.theme
new file mode 100644
index 0000000000..6ab6c15c42
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/icons/testtheme/index.theme
@@ -0,0 +1,21 @@
+[Icon Theme]
+Name=Test
+Comment=Test Theme
+
+Directories=16x16/actions,22x22/actions,22x22@2/actions
+
+[16x16/actions]
+Size=16
+Context=Actions
+Type=Fixed
+
+[22x22/actions]
+Size=22
+Context=Actions
+Type=Fixed
+
+[22x22@2/actions]
+Size=22
+Context=Actions
+Scale=2
+Type=Fixed
diff --git a/tests/auto/quickcontrols2/qquickiconimage/resources.qrc b/tests/auto/quickcontrols2/qquickiconimage/resources.qrc
new file mode 100644
index 0000000000..6558b03909
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/resources.qrc
@@ -0,0 +1,17 @@
+<RCC>
+ <qresource prefix="/">
+ <file>icons/testtheme/16x16/actions/appointment-new.png</file>
+ <file>icons/testtheme/22x22/actions/appointment-new.png</file>
+ <file>icons/testtheme/22x22/actions/appointment-new@2x.png</file>
+ <file>icons/testtheme/22x22@2/actions/appointment-new.png</file>
+ <file>icons/testtheme/22x22/actions/+testselector/appointment-new.png</file>
+ <file>icons/testtheme/22x22/actions/+testselector/appointment-new@2x.png</file>
+ <file>icons/testtheme/22x22@2/actions/+testselector/appointment-new.png</file>
+ <file>icons/testtheme/index.theme</file>
+ <file>icons/testtheme/appointment-new.svg</file>
+ <file>icons/testtheme/22x22/actions/color-test-original.png</file>
+ <file>icons/testtheme/22x22/actions/color-test-tinted.png</file>
+ <file>icons/testtheme/22x22/actions/color-test-original@2x.png</file>
+ <file>icons/testtheme/22x22/actions/color-test-tinted@2x.png</file>
+ </qresource>
+</RCC>
diff --git a/tests/auto/quickcontrols2/qquickiconimage/tst_qquickiconimage.cpp b/tests/auto/quickcontrols2/qquickiconimage/tst_qquickiconimage.cpp
new file mode 100644
index 0000000000..3aaa91967e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconimage/tst_qquickiconimage.cpp
@@ -0,0 +1,573 @@
+/****************************************************************************
+**
+** 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 <qtest.h>
+#include <QtTest/qsignalspy.h>
+
+#include <QtCore/qmath.h>
+#include <QtQml/qqmlapplicationengine.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlfileselector.h>
+#include <QtQuick/qquickitem.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuick/qquickimageprovider.h>
+#include <QtQuick/qquickitemgrabresult.h>
+#include <QtQuick/private/qquickimage_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2Impl/private/qquickiconimage_p.h>
+
+using namespace QQuickVisualTestUtils;
+
+class tst_qquickiconimage : public QQmlDataTest
+{
+ Q_OBJECT
+public:
+ tst_qquickiconimage();
+
+private slots:
+ void initTestCase() override;
+ void defaults();
+ void nameBindingSourceSize();
+ void nameBindingSourceSizeWidthHeight();
+ void nameBindingNoSizes();
+ void sourceBindingNoSizes();
+ void sourceBindingSourceSize();
+ void sourceBindingSourceSizeWidthHeight();
+ void sourceBindingSourceTooLarge();
+ void changeSourceSize();
+ void alignment_data();
+ void alignment();
+ void svgNoSizes();
+ void svgSourceBindingSourceSize();
+ void color();
+ void fileSelectors();
+ void imageProvider();
+ void translucentColors();
+
+private:
+ void setTheme();
+
+ qreal dpr;
+ int integerDpr;
+};
+
+static QImage grabItemToImage(QQuickItem *item)
+{
+ QSharedPointer<QQuickItemGrabResult> result = item->grabToImage();
+ QSignalSpy spy(result.data(), SIGNAL(ready()));
+ spy.wait();
+ return result->image();
+}
+
+#define SKIP_IF_DPR_TOO_HIGH() \
+ if (dpr > 2) \
+ QSKIP("Test does not support device pixel ratio greater than 2")
+
+tst_qquickiconimage::tst_qquickiconimage() :
+ QQmlDataTest(QT_QMLTEST_DATADIR),
+ dpr(qGuiApp->devicePixelRatio()),
+ integerDpr(qCeil(dpr))
+{
+ QQuickStyle::setStyle("Basic");
+}
+
+void tst_qquickiconimage::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+ QIcon::setThemeName(QStringLiteral("testtheme"));
+}
+
+void tst_qquickiconimage::defaults()
+{
+ QQuickIconImage iconImage;
+ QCOMPARE(iconImage.fillMode(), QQuickImage::Pad);
+ QCOMPARE(iconImage.name(), QString());
+ QCOMPARE(iconImage.source(), QUrl());
+ QCOMPARE(iconImage.color(), QColor(Qt::transparent));
+}
+
+void tst_qquickiconimage::nameBindingSourceSize()
+{
+ // We can't have images for every DPR.
+ SKIP_IF_DPR_TOO_HIGH();
+
+ QQuickView view(testFileUrl("nameBindingSourceSize.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ QQuickItem *image = view.rootObject()->childItems().at(1);
+ QVERIFY(image);
+
+ QCOMPARE(grabItemToImage(iconImage), grabItemToImage(image));
+ QCOMPARE(iconImage->sourceSize().width(), 22);
+ QCOMPARE(iconImage->sourceSize().height(), 22);
+ QCOMPARE(iconImage->implicitWidth(), 22.0);
+ QCOMPARE(iconImage->implicitHeight(), 22.0);
+ QCOMPARE(iconImage->width(), 22.0);
+ QCOMPARE(iconImage->height(), 22.0);
+
+ // The requested width of 16 is less than the pixmap's size on disk which
+ // is 22x22. Our default fillMode, Pad, would result in the image being clipped,
+ // so instead we change the fillMode to PreserveAspectFit. Doing so causes
+ // QQuickImage::updatePaintedGeometry() to set our implicit size to 22x16 to
+ // ensure that the aspect ratio is respected. Since we have no explicit height,
+ // the height (previously 22) becomes the implicit height (16).
+ iconImage->setWidth(16.0);
+ QCOMPARE(iconImage->fillMode(), QQuickImage::PreserveAspectFit);
+ QCOMPARE(iconImage->sourceSize().width(), 22);
+ QCOMPARE(iconImage->sourceSize().height(), 22);
+ QCOMPARE(iconImage->implicitWidth(), 22.0);
+ QCOMPARE(iconImage->implicitHeight(), 16.0);
+ QCOMPARE(iconImage->width(), 16.0);
+ QCOMPARE(iconImage->height(), 16.0);
+}
+
+void tst_qquickiconimage::nameBindingSourceSizeWidthHeight()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ QQuickView view(testFileUrl("nameBindingSourceSizeWidthHeight.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject());
+ QVERIFY(iconImage);
+ QCOMPARE(iconImage->sourceSize().width(), 22);
+ QCOMPARE(iconImage->sourceSize().height(), 22);
+ QCOMPARE(iconImage->implicitWidth(), 22.0);
+ QCOMPARE(iconImage->implicitHeight(), 22.0);
+ QCOMPARE(iconImage->width(), 16.0);
+ QCOMPARE(iconImage->height(), 16.0);
+}
+
+void tst_qquickiconimage::nameBindingNoSizes()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ QQuickView view(testFileUrl("nameBindingNoSizes.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject());
+ QVERIFY(iconImage);
+ // The smallest available size will be chosen.
+ QCOMPARE(iconImage->sourceSize().width(), 16);
+ QCOMPARE(iconImage->sourceSize().height(), 16);
+ QCOMPARE(iconImage->implicitWidth(), 16.0);
+ QCOMPARE(iconImage->implicitHeight(), 16.0);
+ QCOMPARE(iconImage->width(), 16.0);
+ QCOMPARE(iconImage->height(), 16.0);
+}
+
+void tst_qquickiconimage::sourceBindingNoSizes()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ QQuickView view(testFileUrl("sourceBindingNoSizes.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ QQuickItem *image = view.rootObject()->childItems().at(1);
+ QVERIFY(image);
+
+ QCOMPARE(iconImage->sourceSize().width(), 22 * integerDpr);
+ QCOMPARE(iconImage->sourceSize().height(), 22 * integerDpr);
+ QCOMPARE(iconImage->implicitWidth(), 22.0);
+ QCOMPARE(iconImage->implicitHeight(), 22.0);
+ QCOMPARE(iconImage->width(), 22.0);
+ QCOMPARE(iconImage->height(), 22.0);
+ QCOMPARE(grabItemToImage(iconImage), grabItemToImage(image));
+}
+
+void tst_qquickiconimage::sourceBindingSourceSize()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ QQuickView view(testFileUrl("sourceBindingSourceSize.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ QQuickItem *image = view.rootObject()->childItems().at(1);
+ QVERIFY(image);
+
+ QCOMPARE(iconImage->sourceSize().width(), 22);
+ QCOMPARE(iconImage->sourceSize().height(), 22);
+ QCOMPARE(iconImage->implicitWidth(), 22.0);
+ QCOMPARE(iconImage->implicitHeight(), 22.0);
+ QCOMPARE(iconImage->width(), 22.0);
+ QCOMPARE(iconImage->height(), 22.0);
+ QCOMPARE(grabItemToImage(iconImage), grabItemToImage(image));
+
+ // Changing width and height should not affect sourceSize.
+ iconImage->setWidth(50);
+ QCOMPARE(iconImage->sourceSize().width(), 22);
+ QCOMPARE(iconImage->sourceSize().height(), 22);
+ iconImage->setHeight(50);
+ QCOMPARE(iconImage->sourceSize().width(), 22);
+ QCOMPARE(iconImage->sourceSize().height(), 22);
+}
+
+void tst_qquickiconimage::sourceBindingSourceSizeWidthHeight()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ QQuickView view(testFileUrl("sourceBindingSourceSizeWidthHeight.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject());
+ QVERIFY(iconImage);
+ QCOMPARE(iconImage->sourceSize().width(), 22);
+ QCOMPARE(iconImage->sourceSize().height(), 22);
+ QCOMPARE(iconImage->implicitWidth(), 22.0);
+ QCOMPARE(iconImage->implicitHeight(), 22.0);
+ QCOMPARE(iconImage->width(), 16.0);
+ QCOMPARE(iconImage->height(), 16.0);
+}
+
+void tst_qquickiconimage::sourceBindingSourceTooLarge()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ QQuickView view(testFileUrl("sourceBindingSourceTooLarge.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject());
+ QVERIFY(iconImage);
+ QCOMPARE(iconImage->sourceSize().width(), 32);
+ QCOMPARE(iconImage->sourceSize().height(), 32);
+ QCOMPARE(iconImage->implicitWidth(), 22.0);
+ QCOMPARE(iconImage->implicitHeight(), 22.0);
+ QCOMPARE(iconImage->width(), 22.0);
+ QCOMPARE(iconImage->height(), 22.0);
+}
+
+void tst_qquickiconimage::alignment_data()
+{
+ QTest::addColumn<QQuickImage::HAlignment>("horizontalAlignment");
+ QTest::addColumn<QQuickImage::VAlignment>("verticalAlignment");
+
+ QTest::newRow("AlignLeft,AlignTop") << QQuickImage::AlignLeft << QQuickImage::AlignTop;
+ QTest::newRow("AlignLeft,AlignVCenter") << QQuickImage::AlignLeft << QQuickImage::AlignVCenter;
+ QTest::newRow("AlignLeft,AlignBottom") << QQuickImage::AlignLeft << QQuickImage::AlignBottom;
+ QTest::newRow("AlignHCenter,AlignTop") << QQuickImage::AlignHCenter << QQuickImage::AlignTop;
+ QTest::newRow("AlignHCenter,AlignVCenter") << QQuickImage::AlignHCenter << QQuickImage::AlignVCenter;
+ QTest::newRow("AlignHCenter,AlignBottom") << QQuickImage::AlignHCenter << QQuickImage::AlignBottom;
+ QTest::newRow("AlignRight,AlignTop") << QQuickImage::AlignRight << QQuickImage::AlignTop;
+ QTest::newRow("AlignRight,AlignVCenter") << QQuickImage::AlignRight << QQuickImage::AlignVCenter;
+ QTest::newRow("AlignRight,AlignBottom") << QQuickImage::AlignRight << QQuickImage::AlignBottom;
+}
+
+void tst_qquickiconimage::alignment()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ QFETCH(QQuickImage::HAlignment, horizontalAlignment);
+ QFETCH(QQuickImage::VAlignment, verticalAlignment);
+
+ QQuickView view(testFileUrl("alignment.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ QQuickImage *image = qobject_cast<QQuickImage*>(view.rootObject()->childItems().at(1));
+ QVERIFY(image);
+
+ // The default fillMode for IconImage is Image::Pad, so these two grabs
+ // should only be equal when the device pixel ratio is 1 or 2, as there is no
+ // @3x version of the image, and hence the Image will be upscaled
+ // and therefore blurry when the ratio is higher than 2.
+ if (qGuiApp->devicePixelRatio() <= 2)
+ QCOMPARE(grabItemToImage(iconImage), grabItemToImage(image));
+ else
+ QVERIFY(grabItemToImage(iconImage) != grabItemToImage(image));
+
+ // Check that the images are what we expect in different alignment configurations.
+ iconImage->setWidth(200);
+ iconImage->setHeight(100);
+ iconImage->setHorizontalAlignment(horizontalAlignment);
+ iconImage->setVerticalAlignment(verticalAlignment);
+ iconImage->setFillMode(QQuickImage::Pad);
+ image->setWidth(200);
+ image->setHeight(100);
+ image->setHorizontalAlignment(horizontalAlignment);
+ image->setVerticalAlignment(verticalAlignment);
+ image->setFillMode(QQuickImage::Pad);
+
+ if (qGuiApp->devicePixelRatio() <= 2)
+ QCOMPARE(grabItemToImage(iconImage), grabItemToImage(image));
+ else
+ QVERIFY(grabItemToImage(iconImage) != grabItemToImage(image));
+}
+
+void tst_qquickiconimage::svgNoSizes()
+{
+#ifndef QT_SVG_LIB
+ QSKIP("This test requires qtsvg");
+#else
+ QQuickView view(testFileUrl("svgNoSizes.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ QQuickImage *image = qobject_cast<QQuickImage*>(view.rootObject()->childItems().at(1));
+ QVERIFY(image);
+
+ QCOMPARE(iconImage->sourceSize().width(), 48);
+ QCOMPARE(iconImage->sourceSize().height(), 48);
+ QCOMPARE(iconImage->implicitWidth(), 48.0);
+ QCOMPARE(iconImage->implicitHeight(), 48.0);
+ QCOMPARE(iconImage->width(), 48.0);
+ QCOMPARE(iconImage->height(), 48.0);
+ QCOMPARE(grabItemToImage(iconImage), grabItemToImage(image));
+#endif
+}
+
+void tst_qquickiconimage::svgSourceBindingSourceSize()
+{
+#ifndef QT_SVG_LIB
+ QSKIP("This test requires qtsvg");
+#else
+ QQuickView view(testFileUrl("alignment.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ QQuickImage *image = qobject_cast<QQuickImage*>(view.rootObject()->childItems().at(1));
+ QVERIFY(image);
+
+ QCOMPARE(iconImage->sourceSize().width(), 22);
+ QCOMPARE(iconImage->sourceSize().height(), 22);
+ QCOMPARE(iconImage->implicitWidth(), 22.0);
+ QCOMPARE(iconImage->implicitHeight(), 22.0);
+ QCOMPARE(iconImage->width(), 22.0);
+ QCOMPARE(iconImage->height(), 22.0);
+ QCOMPARE(grabItemToImage(iconImage), grabItemToImage(image));
+#endif
+}
+
+void tst_qquickiconimage::color()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ if (QGuiApplication::platformName() == QLatin1String("offscreen"))
+ QSKIP("grabToImage() doesn't work on the \"offscreen\" platform plugin (QTBUG-63185)");
+
+ QQuickView view(testFileUrl("color.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ QQuickImage *image = qobject_cast<QQuickImage*>(view.rootObject()->childItems().at(1));
+ QVERIFY(image);
+
+ QImage iconImageWindowGrab = grabItemToImage(iconImage);
+ QCOMPARE(iconImageWindowGrab, grabItemToImage(image));
+
+ // Transparent pixels should remain transparent.
+ QCOMPARE(iconImageWindowGrab.pixelColor(0, 0), QColor(0, 0, 0, 0));
+
+ // Set a color after component completion.
+ iconImage->setColor(QColor(Qt::green));
+ iconImageWindowGrab = grabItemToImage(iconImage);
+ const QPoint centerPixelPos(11, 11);
+ QCOMPARE(iconImageWindowGrab.pixelColor(centerPixelPos), QColor(Qt::green));
+
+ // Set a semi-transparent color after component completion.
+ iconImage->setColor(QColor(0, 0, 255, 127));
+ iconImageWindowGrab = grabItemToImage(iconImage);
+ QCOMPARE(iconImageWindowGrab.pixelColor(centerPixelPos).red(), 0);
+ QCOMPARE(iconImageWindowGrab.pixelColor(centerPixelPos).green(), 0);
+ QCOMPARE(iconImageWindowGrab.pixelColor(centerPixelPos).blue(), 255);
+ QCOMPARE(iconImageWindowGrab.pixelColor(centerPixelPos).alpha(), 127);
+}
+
+void tst_qquickiconimage::changeSourceSize()
+{
+ QQuickView view(testFileUrl("sourceBindingSourceSize.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ // Ensure that there isn't any infinite recursion when trying to change the sourceSize.
+ QSize sourceSize = iconImage->sourceSize();
+ sourceSize.setWidth(sourceSize.width() - 1);
+ iconImage->setSourceSize(sourceSize);
+}
+
+
+void tst_qquickiconimage::fileSelectors()
+{
+ SKIP_IF_DPR_TOO_HIGH();
+
+ if (QGuiApplication::platformName() == QLatin1String("offscreen"))
+ QSKIP("grabToImage() doesn't work on the \"offscreen\" platform plugin (QTBUG-63185)");
+
+ QQuickView view;
+ QQmlFileSelector* fileSelector = new QQmlFileSelector(view.engine());
+ fileSelector->setExtraSelectors(QStringList() << "testselector");
+ view.setSource(testFileUrl("fileSelectors.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->childItems().at(0));
+ QVERIFY(iconImage);
+
+ QQuickItem *image = view.rootObject()->childItems().at(1);
+ QVERIFY(image);
+
+ QImage iconImageWindowGrab = grabItemToImage(iconImage);
+ QCOMPARE(iconImageWindowGrab, grabItemToImage(image));
+
+ QCOMPARE(iconImageWindowGrab.pixelColor(iconImageWindowGrab.width() / 2, iconImageWindowGrab.height() / 2), QColor(Qt::blue));
+}
+
+class TestImageProvider : public QQuickImageProvider
+{
+public:
+ TestImageProvider() : QQuickImageProvider(QQuickImageProvider::Pixmap) { }
+
+ QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override
+ {
+ QSize defaultSize(32, 32);
+ if (size)
+ *size = defaultSize;
+
+ QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : defaultSize.width(),
+ requestedSize.height() > 0 ? requestedSize.height() : defaultSize.height());
+ pixmap.fill(QColor(id).rgba());
+ return pixmap;
+ }
+};
+
+// don't crash (QTBUG-63959)
+void tst_qquickiconimage::imageProvider()
+{
+ if (QGuiApplication::platformName() == QLatin1String("offscreen"))
+ QSKIP("grabToImage() doesn't work on the \"offscreen\" platform plugin (QTBUG-63185)");
+
+ QQuickView view;
+ view.engine()->addImageProvider("provider", new TestImageProvider);
+ view.setSource(testFileUrl("imageProvider.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(view.rootObject()->findChild<QQuickIconImage *>());
+ QVERIFY(iconImage);
+
+ QImage image = grabItemToImage(iconImage);
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.pixelColor(image.width() / 2, image.height() / 2), QColor(Qt::red));
+}
+
+/*
+ QQuickIconImage::componentComplete() calls QQuickIconImagePrivate::updateIcon(),
+ which loads the icon's image via QQuickImageBase::load(). That eventually calls
+ QQuickImageBase::requestFinished(), which calls QQuickIconImage::pixmapChange().
+ That then calls QQuickIconImagePrivate::updateFillMode(), which can in turn
+ cause QQuickIconImage::pixmapChange() to be called again, causing recursion.
+
+ This was a problem because it resulted in icon.color being applied twice.
+
+ This test checks that that doesn't happen.
+*/
+void tst_qquickiconimage::translucentColors()
+{
+ if (QGuiApplication::platformName() == QLatin1String("offscreen"))
+ QSKIP("grabToImage() doesn't work on the \"offscreen\" platform plugin (QTBUG-63185)");
+
+ // Doesn't reproduce with QQuickView.
+ QQmlApplicationEngine engine;
+ engine.load(testFileUrl("translucentColors.qml"));
+ QQuickWindow *window = qobject_cast<QQuickWindow*>(engine.rootObjects().first());
+
+ QQuickIconImage *iconImage = qobject_cast<QQuickIconImage*>(window->findChild<QQuickIconImage*>());
+ QVERIFY(iconImage);
+
+ const QImage image = grabItemToImage(iconImage);
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.pixelColor(image.width() / 2, image.height() / 2), QColor::fromRgba(0x80000000));
+}
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+ Q_UNUSED(app);
+ tst_qquickiconimage test;
+ QTEST_SET_MAIN_SOURCE_PATH
+ return QTest::qExec(&test, argc, argv);
+}
+
+#include "tst_qquickiconimage.moc"
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/CMakeLists.txt b/tests/auto/quickcontrols2/qquickiconlabel/CMakeLists.txt
new file mode 100644
index 0000000000..45c2d45160
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Generated from qquickiconlabel.pro.
+
+#####################################################################
+## tst_qquickiconlabel Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickiconlabel
+ SOURCES
+ tst_qquickiconlabel.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ LIBRARIES
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickPrivate
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Qml
+ Qt::QmlPrivate
+ Qt::Quick
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickiconlabel CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickiconlabel CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/data/a.png b/tests/auto/quickcontrols2/qquickiconlabel/data/a.png
new file mode 100644
index 0000000000..fe839a40e4
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/data/a.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/data/colorChanges.qml b/tests/auto/quickcontrols2/qquickiconlabel/data/colorChanges.qml
new file mode 100644
index 0000000000..cd69508eaf
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/data/colorChanges.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+AbstractButton {
+ id: button
+ width: 200
+ height: 200
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
+ icon.color: enabled ? "transparent" : "red"
+
+ IconLabel {
+ icon: button.icon
+ text: button.text
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/data/iconSourceContext.qml b/tests/auto/quickcontrols2/qquickiconlabel/data/iconSourceContext.qml
new file mode 100644
index 0000000000..8cf09666d0
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/data/iconSourceContext.qml
@@ -0,0 +1,18 @@
+import QtQuick
+import QtQuick.Controls.Basic
+import QtQuick.Controls.impl
+import "sub" as Sub
+
+Item {
+ Image { source: "a.png" }
+ IconLabel { icon.source: "a.png" }
+ Button {
+ icon.color: "transparent"
+ icon.source: "a.png"
+ }
+ Button {
+ action: actions.action
+ icon.color: "transparent"
+ Sub.Actions { id: actions }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/data/iconlabel.qml b/tests/auto/quickcontrols2/qquickiconlabel/data/iconlabel.qml
new file mode 100644
index 0000000000..94f36a7b7e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/data/iconlabel.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+AbstractButton {
+ id: button
+ width: 200
+ height: 200
+ text: "Some text"
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
+
+ IconLabel {
+ icon: button.icon
+ text: button.text
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/data/spacingWithOnlyIcon.qml b/tests/auto/quickcontrols2/qquickiconlabel/data/spacingWithOnlyIcon.qml
new file mode 100644
index 0000000000..c00ffbb807
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/data/spacingWithOnlyIcon.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+AbstractButton {
+ id: button
+ width: 200
+ height: 200
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
+
+ IconLabel {
+ spacing: 10
+ mirrored: true
+ icon: button.icon
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/data/spacingWithOnlyText.qml b/tests/auto/quickcontrols2/qquickiconlabel/data/spacingWithOnlyText.qml
new file mode 100644
index 0000000000..20c61706b8
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/data/spacingWithOnlyText.qml
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+
+Item {
+ width: 200
+ height: 200
+
+ IconLabel {
+ spacing: 10
+ text: "Some text"
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/data/sub/Actions.qml b/tests/auto/quickcontrols2/qquickiconlabel/data/sub/Actions.qml
new file mode 100644
index 0000000000..20bd6a5e6b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/data/sub/Actions.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls.Basic
+
+QtObject {
+ readonly property Action action: Action { icon.source: "../a.png" }
+}
diff --git a/tests/auto/quickcontrols2/qquickiconlabel/tst_qquickiconlabel.cpp b/tests/auto/quickcontrols2/qquickiconlabel/tst_qquickiconlabel.cpp
new file mode 100644
index 0000000000..13aad8b465
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickiconlabel/tst_qquickiconlabel.cpp
@@ -0,0 +1,372 @@
+/****************************************************************************
+**
+** 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 <QtCore/qlist.h>
+
+#include <qtest.h>
+
+#include <QtQuick/qquickitem.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuick/qquickitemgrabresult.h>
+#include <QtQuick/private/qquicktext_p.h>
+#include <QtQuick/private/qquickimage_p_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTemplates2/private/qquickabstractbutton_p.h>
+#include <QtQuickTemplates2/private/qquickicon_p.h>
+#include <QtQuickControls2Impl/private/qquickiconimage_p.h>
+#include <QtQuickControls2Impl/private/qquickiconlabel_p.h>
+#include <QtQuickControls2Impl/private/qquickiconlabel_p_p.h>
+
+using namespace QQuickVisualTestUtils;
+
+class tst_qquickiconlabel : public QQmlDataTest
+{
+ Q_OBJECT
+public:
+ tst_qquickiconlabel();
+
+private slots:
+ void display_data();
+ void display();
+ void spacingWithOneDelegate_data();
+ void spacingWithOneDelegate();
+ void emptyIconSource();
+ void colorChanges();
+ void iconSourceContext();
+};
+
+tst_qquickiconlabel::tst_qquickiconlabel()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_qquickiconlabel::display_data()
+{
+ QTest::addColumn<QList<QQuickIconLabel::Display> >("displayTypes");
+ QTest::addColumn<bool>("mirrored");
+ QTest::addColumn<qreal>("labelWidth");
+ QTest::addColumn<qreal>("labelHeight");
+ QTest::addColumn<qreal>("spacing");
+
+ typedef QList<QQuickIconLabel::Display> DisplayVector;
+ QQuickIconLabel::Display IconOnly = QQuickIconLabel::IconOnly;
+ QQuickIconLabel::Display TextOnly = QQuickIconLabel::TextOnly;
+ QQuickIconLabel::Display TextUnderIcon = QQuickIconLabel::TextUnderIcon;
+ QQuickIconLabel::Display TextBesideIcon = QQuickIconLabel::TextBesideIcon;
+
+ QTest::addRow("IconOnly") << (DisplayVector() << IconOnly) << false << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextOnly") << (DisplayVector() << TextOnly) << false << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextUnderIcon") << (DisplayVector() << TextUnderIcon) << false << -1.0 << -1.0 << 10.0;
+ QTest::addRow("TextBesideIcon") << (DisplayVector() << TextBesideIcon) << false << -1.0 << -1.0 << 10.0;
+ QTest::addRow("IconOnly, spacing=10") << (DisplayVector() << IconOnly) << false << -1.0 << -1.0 << 10.0;
+ QTest::addRow("TextOnly, spacing=10") << (DisplayVector() << TextOnly) << false << -1.0 << -1.0 << 10.0;
+ QTest::addRow("TextUnderIcon, spacing=10") << (DisplayVector() << TextUnderIcon) << false << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextUnderIcon => IconOnly => TextUnderIcon")
+ << (DisplayVector() << TextUnderIcon << IconOnly << TextUnderIcon) << false << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextUnderIcon => IconOnly => TextUnderIcon, labelWidth=400")
+ << (DisplayVector() << TextUnderIcon << IconOnly << TextUnderIcon) << false << 400.0 << -1.0 << 0.0;
+ QTest::addRow("TextUnderIcon => TextOnly => TextUnderIcon")
+ << (DisplayVector() << TextUnderIcon << TextOnly << TextUnderIcon) << false << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextUnderIcon => TextOnly => TextUnderIcon, labelWidth=400")
+ << (DisplayVector() << TextUnderIcon << TextOnly << TextUnderIcon) << false << 400.0 << -1.0 << 0.0;
+ QTest::addRow("TextBesideIcon, spacing=10") << (DisplayVector() << TextBesideIcon) << false << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextBesideIcon => IconOnly => TextBesideIcon")
+ << (DisplayVector() << TextBesideIcon << IconOnly << TextBesideIcon) << false << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextBesideIcon => IconOnly => TextBesideIcon, labelWidth=400")
+ << (DisplayVector() << TextBesideIcon << IconOnly << TextBesideIcon) << false << 400.0 << -1.0 << 0.0;
+ QTest::addRow("TextBesideIcon => TextOnly => TextBesideIcon")
+ << (DisplayVector() << TextBesideIcon << TextOnly << TextBesideIcon) << false << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextBesideIcon => TextOnly => TextBesideIcon, labelWidth=400")
+ << (DisplayVector() << TextBesideIcon << TextOnly << TextBesideIcon) << false << 400.0 << -1.0 << 0.0;
+ QTest::addRow("IconOnly, mirrored") << (DisplayVector() << IconOnly) << true << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextOnly, mirrored") << (DisplayVector() << TextOnly) << true << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextUnderIcon, mirrored") << (DisplayVector() << TextUnderIcon) << true << -1.0 << -1.0 << 0.0;
+ QTest::addRow("TextBesideIcon, mirrored") << (DisplayVector() << TextBesideIcon) << true << -1.0 << -1.0 << 0.0;
+}
+
+void tst_qquickiconlabel::display()
+{
+ QFETCH(QList<QQuickIconLabel::Display>, displayTypes);
+ QFETCH(bool, mirrored);
+ QFETCH(qreal, labelWidth);
+ QFETCH(qreal, labelHeight);
+ QFETCH(qreal, spacing);
+
+ QQuickView view(testFileUrl("iconlabel.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickItem *rootItem = view.rootObject();
+ QVERIFY(rootItem);
+
+ QQuickIconLabel *label = rootItem->findChild<QQuickIconLabel *>();
+ QVERIFY(label);
+ QCOMPARE(label->spacing(), 0.0);
+ QCOMPARE(label->display(), QQuickIconLabel::TextBesideIcon);
+ QCOMPARE(label->isMirrored(), false);
+
+ // Setting labelWidth allows us to test the issue where the icon's
+ // width was not updated after switching between different display types.
+ if (!qFuzzyCompare(labelWidth, -1)) {
+ label->setWidth(labelWidth);
+ QCOMPARE(label->width(), labelWidth);
+ }
+ if (!qFuzzyCompare(labelHeight, -1)) {
+ label->setHeight(labelHeight);
+ QCOMPARE(label->height(), labelHeight);
+ }
+
+ label->setMirrored(mirrored);
+ QCOMPARE(label->isMirrored(), mirrored);
+
+ label->setSpacing(spacing);
+ QCOMPARE(label->spacing(), spacing);
+
+ const qreal horizontalPadding = label->leftPadding() + label->rightPadding();
+ const qreal verticalPadding = label->topPadding() + label->bottomPadding();
+
+ // Test that the icon and text are correctly positioned and sized after
+ // setting several different display types in succession.
+ for (QQuickIconLabel::Display displayType : qAsConst(displayTypes)) {
+ label->setDisplay(displayType);
+ QCOMPARE(label->display(), displayType);
+
+ QQuickIconImage *icon = label->findChild<QQuickIconImage *>();
+ QQuickText *text = label->findChild<QQuickText *>();
+
+ const qreal horizontalCenter = label->width() / 2;
+ const qreal verticalCenter = label->height() / 2;
+
+ switch (displayType) {
+ case QQuickIconLabel::IconOnly:
+ QVERIFY(icon);
+ QVERIFY(!text);
+ QCOMPARE(icon->x(), horizontalCenter - icon->width() / 2);
+ QCOMPARE(icon->y(), verticalCenter - icon->height() / 2);
+ QCOMPARE(icon->width(), icon->implicitWidth());
+ QCOMPARE(icon->height(), icon->implicitHeight());
+ QCOMPARE(label->implicitWidth(), icon->implicitWidth() + horizontalPadding);
+ QCOMPARE(label->implicitHeight(), icon->implicitHeight() + verticalPadding);
+ break;
+ case QQuickIconLabel::TextOnly:
+ QVERIFY(!icon);
+ QVERIFY(text);
+ QCOMPARE(text->x(), horizontalCenter - text->width() / 2);
+ QCOMPARE(text->y(), verticalCenter - text->height() / 2);
+ QCOMPARE(text->width(), text->implicitWidth());
+ QCOMPARE(text->height(), text->implicitHeight());
+ QCOMPARE(label->implicitWidth(), text->implicitWidth() + horizontalPadding);
+ QCOMPARE(label->implicitHeight(), text->implicitHeight() + verticalPadding);
+ break;
+ case QQuickIconLabel::TextUnderIcon: {
+ QVERIFY(icon);
+ QVERIFY(text);
+ const qreal combinedHeight = icon->height() + label->spacing() + text->height();
+ const qreal contentY = verticalCenter - combinedHeight / 2;
+ QCOMPARE(icon->x(), horizontalCenter - icon->width() / 2);
+ QCOMPARE(icon->y(), contentY);
+ QCOMPARE(icon->width(), icon->implicitWidth());
+ QCOMPARE(icon->height(), icon->implicitHeight());
+ QCOMPARE(text->x(), horizontalCenter - text->width() / 2);
+ QCOMPARE(text->y(), contentY + icon->height() + label->spacing());
+ QCOMPARE(text->width(), text->implicitWidth());
+ QCOMPARE(text->height(), text->implicitHeight());
+ QCOMPARE(label->implicitWidth(), qMax(icon->implicitWidth(), text->implicitWidth()) + horizontalPadding);
+ QCOMPARE(label->implicitHeight(), combinedHeight + verticalPadding);
+ break;
+ }
+ case QQuickIconLabel::TextBesideIcon:
+ default:
+ QVERIFY(icon);
+ QVERIFY(text);
+ const qreal combinedWidth = icon->width() + label->spacing() + text->width();
+ const qreal contentX = horizontalCenter - combinedWidth / 2;
+ QCOMPARE(icon->x(), contentX + (label->isMirrored() ? text->width() + label->spacing() : 0));
+ QCOMPARE(icon->y(), verticalCenter - icon->height() / 2);
+ QCOMPARE(icon->width(), icon->implicitWidth());
+ QCOMPARE(icon->height(), icon->implicitHeight());
+ QCOMPARE(text->x(), contentX + (label->isMirrored() ? 0 : icon->width() + label->spacing()));
+ QCOMPARE(text->y(), verticalCenter - text->height() / 2);
+ QCOMPARE(text->width(), text->implicitWidth());
+ QCOMPARE(text->height(), text->implicitHeight());
+ QCOMPARE(label->implicitWidth(), combinedWidth + horizontalPadding);
+ QCOMPARE(label->implicitHeight(), qMax(icon->implicitHeight(), text->implicitHeight()) + verticalPadding);
+ break;
+ }
+
+ if (text)
+ QCOMPARE(label->baselineOffset(), text->y() + text->baselineOffset());
+ else
+ QCOMPARE(label->baselineOffset(), 0);
+ }
+}
+
+void tst_qquickiconlabel::spacingWithOneDelegate_data()
+{
+ QTest::addColumn<QString>("qmlFileName");
+
+ QTest::addRow("spacingWithOnlyIcon") << QStringLiteral("spacingWithOnlyIcon.qml");
+ QTest::addRow("spacingWithOnlyText") << QStringLiteral("spacingWithOnlyText.qml");
+}
+
+void tst_qquickiconlabel::spacingWithOneDelegate()
+{
+ QFETCH(QString, qmlFileName);
+
+ QQuickView view(testFileUrl(qmlFileName));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickItem *rootItem = view.rootObject();
+ QVERIFY(rootItem);
+
+ QQuickIconLabel *label = rootItem->findChild<QQuickIconLabel *>();
+ QVERIFY(label);
+ QQuickItem *delegate = nullptr;
+ if (!label->icon().isEmpty()) {
+ QVERIFY(!label->findChild<QQuickText *>());
+ delegate = label->findChild<QQuickIconImage *>();
+ } else {
+ QVERIFY(!label->findChild<QQuickIconImage *>());
+ delegate = label->findChild<QQuickText *>();
+ }
+
+ QVERIFY(delegate);
+ QCOMPARE(delegate->x(), 0.0);
+ QCOMPARE(delegate->width(), label->width());
+}
+
+void tst_qquickiconlabel::emptyIconSource()
+{
+ QQuickView view(testFileUrl("iconlabel.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickItem *rootItem = view.rootObject();
+ QVERIFY(rootItem);
+
+ QQuickIconLabel *label = rootItem->findChild<QQuickIconLabel *>();
+ QVERIFY(label);
+ QCOMPARE(label->spacing(), 0.0);
+ QCOMPARE(label->display(), QQuickIconLabel::TextBesideIcon);
+ QCOMPARE(label->isMirrored(), false);
+
+ QQuickItem *icon = label->findChild<QQuickIconImage *>();
+ QVERIFY(icon);
+
+ QQuickItem *text = label->findChild<QQuickText *>();
+ QVERIFY(text);
+ qreal horizontalCenter = label->width() / 2;
+ const qreal combinedWidth = icon->width() + text->width();
+ const qreal contentX = horizontalCenter - combinedWidth / 2;
+ // The text should be positioned next to an item.
+ QCOMPARE(text->x(), contentX + icon->width() + label->spacing());
+
+ // Now give the label an explicit width large enough so that implicit size
+ // changes in its children don't affect its implicit size.
+ label->setWidth(label->implicitWidth() + 200);
+ label->setHeight(label->implicitWidth() + 100);
+ QVERIFY(icon->property("source").isValid());
+ label->setIcon(QQuickIcon());
+ QVERIFY(!label->findChild<QQuickIconImage *>());
+ horizontalCenter = label->width() / 2;
+ QCOMPARE(text->x(), horizontalCenter - text->width() / 2);
+}
+
+void tst_qquickiconlabel::colorChanges()
+{
+ if (QGuiApplication::platformName() == QLatin1String("offscreen"))
+ QSKIP("grabToImage() doesn't work on the \"offscreen\" platform plugin (QTBUG-63185)");
+
+ QQuickView view(testFileUrl("colorChanges.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickItem *rootItem = view.rootObject();
+ QVERIFY(rootItem);
+
+ QQuickIconLabel *label = rootItem->findChild<QQuickIconLabel *>();
+ QVERIFY(label);
+ QCOMPARE(label->spacing(), 0.0);
+ QCOMPARE(label->display(), QQuickIconLabel::TextBesideIcon);
+ QCOMPARE(label->isMirrored(), false);
+
+ QSharedPointer<QQuickItemGrabResult> grabResult = label->grabToImage();
+ QTRY_VERIFY(!grabResult->image().isNull());
+ const QImage enabledImageGrab = grabResult->image();
+
+ // The color should change to "red" when the item is disabled.
+ rootItem->setEnabled(false);
+
+ grabResult = label->grabToImage();
+ QTRY_VERIFY(!grabResult->image().isNull());
+ QVERIFY(grabResult->image() != enabledImageGrab);
+}
+
+void tst_qquickiconlabel::iconSourceContext()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("iconSourceContext.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+
+ QScopedPointer<QObject> o(component.create());
+ QQuickItem *root = qobject_cast<QQuickItem *>(o.data());
+ QVERIFY(root);
+
+ for (QQuickItem *child : root->childItems()) {
+ QQuickImage *image = qobject_cast<QQuickImage *>(child);
+ if (!image) {
+ QQuickIconLabel *label = nullptr;
+ if (QQuickAbstractButton *button = qobject_cast<QQuickAbstractButton *>(child)) {
+ label = qobject_cast<QQuickIconLabel *>(button->contentItem());
+ } else {
+ label = qobject_cast<QQuickIconLabel *>(child);
+ }
+ if (label) {
+ QQuickIconLabelPrivate *labelPrivate = static_cast<QQuickIconLabelPrivate *>(
+ QQuickItemPrivate::get(label));
+ image = labelPrivate->image;
+ }
+ }
+
+ QVERIFY(image);
+ QQuickImagePrivate *imagePrivate
+ = static_cast<QQuickImagePrivate *>(QQuickItemPrivate::get(image));
+ QCOMPARE(imagePrivate->pix.url(), testFileUrl("a.png"));
+ }
+
+}
+
+QTEST_MAIN(tst_qquickiconlabel)
+
+#include "tst_qquickiconlabel.moc"
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/BLACKLIST b/tests/auto/quickcontrols2/qquickimaginestyle/BLACKLIST
new file mode 100644
index 0000000000..27e33c71b3
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-102721
+[Imagine::test_qrcPaths]
+android
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/CMakeLists.txt b/tests/auto/quickcontrols2/qquickimaginestyle/CMakeLists.txt
new file mode 100644
index 0000000000..2d1e534f98
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/CMakeLists.txt
@@ -0,0 +1,42 @@
+# Generated from qquickimaginestyle.pro.
+
+#####################################################################
+## tst_qquickimaginestyle Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/tst_*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickimaginestyle
+ GUI
+ QMLTEST
+ SOURCES
+ tst_qquickimaginestyle.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qmake_immediate_resource_files
+ "control-assets/button-background.9.png"
+ "qtquickcontrols2.conf"
+ "test-assets/button-background-1.png"
+ "test-assets/button-background-2.png"
+ "test-assets/wobble.frag.qsb"
+)
+
+qt_internal_add_resource(tst_qquickimaginestyle "qmake_immediate"
+ PREFIX
+ "/"
+ FILES
+ ${qmake_immediate_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:qquickimaginestyle.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/control-assets/button-background.9.png b/tests/auto/quickcontrols2/qquickimaginestyle/control-assets/button-background.9.png
new file mode 100644
index 0000000000..18ec9e6f4f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/control-assets/button-background.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/data/tst_imagine.qml b/tests/auto/quickcontrols2/qquickimaginestyle/data/tst_imagine.qml
new file mode 100644
index 0000000000..c7afe4fbbf
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/data/tst_imagine.qml
@@ -0,0 +1,196 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtTest
+import QtQuick.Templates as T
+import QtQuick.Controls
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "Imagine"
+
+ Component {
+ id: buttonComponent
+ Button {}
+ }
+
+ Component {
+ id: implicitQrcButtonComponent
+ Button {
+ Imagine.path: ":/control-assets"
+ }
+ }
+
+ Component {
+ id: explicitQrcButtonComponent
+ Button {
+ Imagine.path: "qrc:/control-assets"
+ }
+ }
+
+ function test_qrcPaths_data() {
+ return [
+ { tag: ":/control-assets", component: implicitQrcButtonComponent },
+ { tag: "qrc:/control-assets", component: explicitQrcButtonComponent }
+ ]
+ }
+
+ function test_qrcPaths(data) {
+ if (Qt.platform.pluginName === "offscreen")
+ skip("grabImage() is not functional on the offscreen platform (QTBUG-63185)")
+
+ var control = createTemporaryObject(data.component, testCase)
+ verify(control)
+ compare(control.Imagine.path, data.tag)
+ var image = grabImage(control)
+ compare(image.pixel(control.width / 2, control.height / 2), "#ff0000")
+ }
+
+ function test_fontFromConfigFile() {
+ var control = createTemporaryObject(buttonComponent, testCase)
+ verify(control)
+ compare(control.font.pixelSize, 80)
+ }
+
+ Component {
+ id: ninePatchImageComponent
+
+ NinePatchImage {
+ property alias mouseArea: mouseArea
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ // The name of the images isn't important; we just want to check that
+ // going from regular to 9-patch to regular to regular works without crashing.
+ onPressed: parent.source = "qrc:/control-assets/button-background.9.png"
+ onReleased: parent.source = "qrc:/test-assets/button-background-1.png"
+ onClicked: parent.source = "qrc:/test-assets/button-background-2.png"
+ }
+ }
+ }
+
+ Component {
+ id: signalSpyComponent
+
+ SignalSpy {}
+ }
+
+ // QTBUG-78790
+ function test_switchBetween9PatchAndRegular() {
+ var ninePatchImage = createTemporaryObject(ninePatchImageComponent, testCase,
+ { source: "qrc:/test-assets/button-background-1.png" })
+ verify(ninePatchImage)
+
+ var clickSpy = signalSpyComponent.createObject(ninePatchImage,
+ { target: ninePatchImage.mouseArea, signalName: "clicked" })
+ verify(clickSpy.valid)
+
+ var afterRenderingSpy = signalSpyComponent.createObject(ninePatchImage,
+ { target: testCase.Window.window, signalName: "afterRendering" })
+ verify(afterRenderingSpy.valid)
+
+ mousePress(ninePatchImage)
+ // Wait max 1 second - in reality it should take a handful of milliseconds.
+ afterRenderingSpy.wait(1000)
+ mouseRelease(ninePatchImage)
+ compare(clickSpy.count, 1)
+ // Shouldn't result in a crash.
+ afterRenderingSpy.wait(1000)
+ }
+
+ Component {
+ id: invalidNinePatchImageProvider
+ Item {
+ width: 200
+ height: 200
+ property alias ninePatchImage: np
+
+ NinePatchImage {
+ id: np
+ source : "qrc:/test-assets/button-background-1.png"
+ cache: false
+ visible: false
+ }
+
+ ShaderEffect {
+ width: 200
+ height: 200
+ property variant source: np
+ property real amplitude: 0.04
+ property real frequency: 20
+ property real time: 0
+ fragmentShader: "qrc:/test-assets/wobble.frag.qsb"
+ }
+ }
+ }
+
+ // QTBUG-100508
+ function test_invalidNinePatchImageProvider() {
+ var container = createTemporaryObject(invalidNinePatchImageProvider, testCase)
+ verify(container);
+ var afterRenderingSpy = signalSpyComponent.createObject(null,
+ { target: testCase.Window.window, signalName: "afterRendering" })
+ verify(afterRenderingSpy.valid)
+
+ afterRenderingSpy.wait(1000)
+ container.ninePatchImage.source = ""
+ // Shouldn't result in a crash.
+ afterRenderingSpy.wait(1000)
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/qtquickcontrols2.conf b/tests/auto/quickcontrols2/qquickimaginestyle/qtquickcontrols2.conf
new file mode 100644
index 0000000000..cc58a8e374
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/qtquickcontrols2.conf
@@ -0,0 +1,5 @@
+[Controls]
+Style=Imagine
+
+[Imagine]
+Font\PixelSize=80
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/button-background-1.png b/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/button-background-1.png
new file mode 100644
index 0000000000..980eec3c92
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/button-background-1.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/button-background-2.png b/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/button-background-2.png
new file mode 100644
index 0000000000..8e2639d03b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/button-background-2.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/wobble.frag.qsb b/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/wobble.frag.qsb
new file mode 100644
index 0000000000..248c00b526
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/test-assets/wobble.frag.qsb
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickimaginestyle/tst_qquickimaginestyle.cpp b/tests/auto/quickcontrols2/qquickimaginestyle/tst_qquickimaginestyle.cpp
new file mode 100644
index 0000000000..952428ef04
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickimaginestyle/tst_qquickimaginestyle.cpp
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+QUICK_TEST_MAIN(tst_qquickimaginestyle)
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyle/CMakeLists.txt b/tests/auto/quickcontrols2/qquickmaterialstyle/CMakeLists.txt
new file mode 100644
index 0000000000..332f376d9f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyle/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Generated from qquickmaterialstyle.pro.
+
+#####################################################################
+## tst_qquickmaterialstyle Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/tst_*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickmaterialstyle
+ GUI
+ QMLTEST
+ SOURCES
+ tst_qquickmaterialstyle.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::Qml
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qmake_immediate_resource_files
+ "qtquickcontrols2.conf"
+)
+
+qt_internal_add_resource(tst_qquickmaterialstyle "qmake_immediate"
+ PREFIX
+ "/"
+ FILES
+ ${qmake_immediate_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:qquickmaterialstyle.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyle/data/tst_material.qml b/tests/auto/quickcontrols2/qquickmaterialstyle/data/tst_material.qml
new file mode 100644
index 0000000000..02b71305fe
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyle/data/tst_material.qml
@@ -0,0 +1,791 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtTest
+import QtQuick.Templates as T
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+import org.qtproject.Test
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "Material"
+
+ Component {
+ id: button
+ Button { }
+ }
+
+ Component {
+ id: styledButton
+ Button {
+ Material.theme: Material.Dark
+ Material.primary: Material.DeepOrange
+ Material.accent: Material.DeepPurple
+ Material.background: Material.Green
+ Material.foreground: Material.Blue
+ }
+ }
+
+ Component {
+ id: window
+ Window { }
+ }
+
+ Component {
+ id: applicationWindow
+ ApplicationWindow { }
+ }
+
+ Component {
+ id: styledWindow
+ Window {
+ Material.theme: Material.Dark
+ Material.primary: Material.Brown
+ Material.accent: Material.Green
+ Material.background: Material.Yellow
+ Material.foreground: Material.Grey
+ }
+ }
+
+ Component {
+ id: loader
+ Loader {
+ active: false
+ sourceComponent: Button { }
+ }
+ }
+
+ Component {
+ id: swipeView
+ SwipeView {
+ Material.theme: Material.Dark
+ Button { }
+ }
+ }
+
+ Component {
+ id: menu
+ ApplicationWindow {
+ Material.primary: Material.Blue
+ Material.accent: Material.Red
+ property alias menu: popup
+ Menu {
+ id: popup
+ Material.theme: Material.Dark
+ MenuItem { }
+ }
+ }
+ }
+
+ Component {
+ id: popupComponent
+ ApplicationWindow {
+ Material.primary: Material.Blue
+ Material.accent: Material.Red
+ visible: true
+ property alias popup: popupInstance
+ property alias label: labelInstance
+ property alias label2: labelInstance2
+ Popup {
+ id: popupInstance
+ Label {
+ id: labelInstance
+ text: "test"
+ color: popupInstance.Material.textSelectionColor
+ }
+ Component.onCompleted: open()
+ }
+ T.Popup {
+ contentItem: Label {
+ id: labelInstance2
+ text: "test"
+ color: Material.textSelectionColor
+ }
+ Component.onCompleted: open()
+ }
+ }
+ }
+
+ Component {
+ id: comboBox
+ ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+ Material.primary: Material.Blue
+ Material.accent: Material.Red
+ property alias combo: box
+ ComboBox {
+ id: box
+ Material.theme: Material.Dark
+ model: 1
+ }
+ }
+ }
+
+ Component {
+ id: windowPane
+ ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+ property alias pane: pane
+ Pane { id: pane }
+ }
+ }
+
+ // need to be synced with QQuickMaterialStyle::themeShade()
+ function themeshade(theme) {
+ if (theme === Material.Light)
+ return Material.Shade500
+ else
+ return Material.Shade200
+ }
+
+ function test_defaults() {
+ var control = button.createObject(testCase)
+ verify(control)
+ verify(control.Material)
+ compare(control.Material.primary, Material.color(Material.Indigo))
+ compare(control.Material.accent, Material.color(Material.Pink))
+ compare(control.Material.foreground, "#dd000000")
+ compare(control.Material.background, "#fafafa")
+ compare(control.Material.theme, Material.Light)
+ control.destroy()
+ }
+
+ function test_set() {
+ var control = button.createObject(testCase)
+ verify(control)
+ control.Material.primary = Material.Green
+ control.Material.accent = Material.Brown
+ control.Material.background = Material.Red
+ control.Material.foreground = Material.Blue
+ control.Material.theme = Material.Dark
+ compare(control.Material.primary, Material.color(Material.Green))
+ compare(control.Material.accent, Material.color(Material.Brown, themeshade(control.Material.theme)))
+ compare(control.Material.background, Material.color(Material.Red, themeshade(control.Material.theme)))
+ compare(control.Material.foreground, Material.color(Material.Blue))
+ compare(control.Material.theme, Material.Dark)
+ control.destroy()
+ }
+
+ function test_reset() {
+ var control = styledButton.createObject(testCase)
+ verify(control)
+ compare(control.Material.primary, Material.color(Material.DeepOrange))
+ compare(control.Material.accent, Material.color(Material.DeepPurple, themeshade(control.Material.theme)))
+ compare(control.Material.background, Material.color(Material.Green, themeshade(control.Material.theme)))
+ compare(control.Material.foreground, Material.color(Material.Blue))
+ compare(control.Material.theme, Material.Dark)
+ control.Material.primary = undefined
+ control.Material.accent = undefined
+ control.Material.background = undefined
+ control.Material.foreground = undefined
+ control.Material.theme = undefined
+ compare(control.Material.primary, testCase.Material.primary)
+ compare(control.Material.accent, testCase.Material.accent)
+ compare(control.Material.background, testCase.Material.background)
+ compare(control.Material.foreground, testCase.Material.foreground)
+ compare(control.Material.theme, testCase.Material.theme)
+ control.destroy()
+ }
+
+ function test_inheritance_data() {
+ return [
+ { tag: "primary", value1: Material.color(Material.Amber), value2: Material.color(Material.Indigo) },
+ { tag: "accent", value1: Material.color(Material.Amber), value2: Material.color(Material.Indigo) },
+ { tag: "background", value1: Material.color(Material.Amber), value2: Material.color(Material.Indigo) },
+ { tag: "foreground", value1: Material.color(Material.Amber), value2: Material.color(Material.Indigo) },
+ { tag: "theme", value1: Material.Dark, value2: Material.Light },
+ ]
+ }
+
+ function test_inheritance(data) {
+ var prop = data.tag
+ var parent = button.createObject(testCase)
+ parent.Material[prop] = data.value1
+ compare(parent.Material[prop], data.value1)
+
+ var child1 = button.createObject(parent)
+ compare(child1.Material[prop], data.value1)
+
+ parent.Material[prop] = data.value2
+ compare(parent.Material[prop], data.value2)
+ compare(child1.Material[prop], data.value2)
+
+ var child2 = button.createObject(parent)
+ compare(child2.Material[prop], data.value2)
+
+ child2.Material[prop] = data.value1
+ compare(child2.Material[prop], data.value1)
+ compare(child1.Material[prop], data.value2)
+ compare(parent.Material[prop], data.value2)
+
+ parent.Material[prop] = undefined
+ verify(parent.Material[prop] !== data.value1)
+ verify(parent.Material[prop] !== undefined)
+ compare(child1.Material[prop], parent.Material[prop])
+ verify(child2.Material[prop] !== parent.Material[prop])
+
+ var grandChild1 = button.createObject(child1)
+ var grandChild2 = button.createObject(child2)
+ compare(grandChild1.Material[prop], child1.Material[prop])
+ compare(grandChild2.Material[prop], child2.Material[prop])
+
+ var themelessGrandGrandChild = button.createObject(grandChild1)
+ var grandGrandGrandChild1 = button.createObject(themelessGrandGrandChild)
+ compare(grandGrandGrandChild1.Material[prop], parent.Material[prop])
+
+ child1.Material[prop] = data.value2
+ compare(child1.Material[prop], data.value2)
+ compare(grandChild1.Material[prop], data.value2)
+ compare(grandGrandGrandChild1.Material[prop], data.value2)
+
+ parent.destroy()
+ }
+
+ function test_inheritance_popup_data() {
+ return [
+ { tag: "primary", value1: Material.color(Material.Amber), value2: Material.color(Material.Indigo) },
+ { tag: "accent", value1: Material.color(Material.Amber), value2: Material.color(Material.Indigo) },
+ { tag: "theme", value1: Material.Dark, value2: Material.Light },
+ ]
+ }
+
+ function test_inheritance_popup(data) {
+ var prop = data.tag
+ var popupObject = popupComponent.createObject(testCase)
+ compare(popupObject.popup.Material.textSelectionColor.toString(), popupObject.Material.textSelectionColor.toString())
+ compare(popupObject.label.color.toString(), popupObject.Material.textSelectionColor.toString())
+ compare(popupObject.label2.color.toString(), popupObject.Material.textSelectionColor.toString())
+
+ popupObject.Material[prop] = data.value1
+ compare(popupObject.Material[prop], data.value1)
+ compare(popupObject.popup.Material.textSelectionColor.toString(), popupObject.Material.textSelectionColor.toString())
+ compare(popupObject.label.color.toString(), popupObject.Material.textSelectionColor.toString())
+ compare(popupObject.label2.color.toString(), popupObject.Material.textSelectionColor.toString())
+
+ popupObject.Material[prop] = data.value2
+ compare(popupObject.Material[prop], data.value2)
+ compare(popupObject.popup.Material.textSelectionColor.toString(), popupObject.Material.textSelectionColor.toString())
+ compare(popupObject.label.color.toString(), popupObject.Material.textSelectionColor.toString())
+ compare(popupObject.label2.color.toString(), popupObject.Material.textSelectionColor.toString())
+
+ popupObject.destroy()
+ }
+
+ function test_window() {
+ var parent = window.createObject()
+
+ var control = button.createObject(parent.contentItem)
+ compare(control.Material.primary, parent.Material.primary)
+ compare(control.Material.accent, parent.Material.accent)
+ compare(control.Material.background, parent.Material.background)
+ compare(control.Material.foreground, parent.Material.foreground)
+ compare(control.Material.theme, parent.Material.theme)
+
+ var styledChild = styledWindow.createObject(window)
+ verify(styledChild.Material.primary !== parent.Material.primary)
+ verify(styledChild.Material.accent !== parent.Material.accent)
+ verify(styledChild.Material.background !== parent.Material.background)
+ verify(styledChild.Material.foreground !== parent.Material.foreground)
+ verify(styledChild.Material.theme !== parent.Material.theme)
+
+ var unstyledChild = window.createObject(window)
+ compare(unstyledChild.Material.primary, parent.Material.primary)
+ compare(unstyledChild.Material.accent, parent.Material.accent)
+ compare(unstyledChild.Material.background, parent.Material.background)
+ compare(unstyledChild.Material.foreground, parent.Material.foreground)
+ compare(unstyledChild.Material.theme, parent.Material.theme)
+
+ parent.Material.primary = Material.Lime
+ compare(control.Material.primary, Material.color(Material.Lime))
+ verify(styledChild.Material.primary !== Material.color(Material.Lime))
+ // ### TODO: compare(unstyledChild.Material.primary, Material.color(Material.Lime))
+
+ parent.Material.accent = Material.Cyan
+ compare(control.Material.accent, Material.color(Material.Cyan))
+ verify(styledChild.Material.accent !== Material.color(Material.Cyan))
+ // ### TODO: compare(unstyledChild.Material.accent, Material.color(Material.Cyan))
+
+ parent.Material.background = Material.Indigo
+ compare(control.Material.background, Material.color(Material.Indigo))
+ verify(styledChild.Material.background !== Material.color(Material.Indigo))
+ // ### TODO: compare(unstyledChild.Material.background, Material.color(Material.Indigo))
+
+ parent.Material.foreground = Material.Pink
+ compare(control.Material.foreground, Material.color(Material.Pink))
+ verify(styledChild.Material.foreground !== Material.color(Material.Pink))
+ // ### TODO: compare(unstyledChild.Material.foreground, Material.color(Material.Pink))
+
+ parent.destroy()
+ }
+
+ function test_loader() {
+ var control = loader.createObject(testCase)
+ control.Material.primary = Material.Yellow
+ control.Material.accent = Material.Lime
+ control.Material.background = Material.LightGreen
+ control.Material.foreground = Material.LightBlue
+ control.active = true
+ compare(control.item.Material.primary, Material.color(Material.Yellow))
+ compare(control.item.Material.accent, Material.color(Material.Lime))
+ compare(control.item.Material.background, Material.color(Material.LightGreen))
+ compare(control.item.Material.foreground, Material.color(Material.LightBlue))
+ control.Material.primary = Material.Red
+ control.Material.accent = Material.Pink
+ control.Material.background = Material.Blue
+ control.Material.foreground = Material.Green
+ compare(control.item.Material.primary, Material.color(Material.Red))
+ compare(control.item.Material.accent, Material.color(Material.Pink))
+ compare(control.item.Material.background, Material.color(Material.Blue))
+ compare(control.item.Material.foreground, Material.color(Material.Green))
+ control.active = false
+ control.Material.primary = Material.Orange
+ control.Material.accent = Material.Brown
+ control.Material.background = Material.Red
+ control.Material.foreground = Material.Pink
+ control.active = true
+ compare(control.item.Material.primary, Material.color(Material.Orange))
+ compare(control.item.Material.accent, Material.color(Material.Brown))
+ compare(control.item.Material.background, Material.color(Material.Red))
+ compare(control.item.Material.foreground, Material.color(Material.Pink))
+ control.destroy()
+ }
+
+ function test_swipeView() {
+ var control = swipeView.createObject(testCase)
+ verify(control)
+ var child = control.itemAt(0)
+ verify(child)
+ compare(control.Material.theme, Material.Dark)
+ compare(child.Material.theme, Material.Dark)
+ control.destroy()
+ }
+
+ function test_menu() {
+ var container = menu.createObject(testCase)
+ verify(container)
+ verify(container.menu)
+ container.menu.open()
+ verify(container.menu.visible)
+ var child = container.menu.itemAt(0)
+ verify(child)
+ compare(container.Material.theme, Material.Light)
+ compare(container.menu.Material.theme, Material.Dark)
+ compare(child.Material.theme, Material.Dark)
+ compare(container.Material.primary, Material.color(Material.Blue))
+ compare(container.menu.Material.primary, Material.color(Material.Blue))
+ compare(child.Material.primary, Material.color(Material.Blue))
+ compare(container.Material.accent, Material.color(Material.Red))
+ compare(container.menu.Material.accent, Material.color(Material.Red, themeshade(container.menu.Material.theme)))
+ compare(child.Material.accent, Material.color(Material.Red, themeshade(child.Material.theme)))
+ container.destroy()
+ }
+
+ function test_comboBox() {
+ var window = comboBox.createObject(testCase)
+ verify(window)
+ verify(window.combo)
+ waitForRendering(window.combo)
+ window.combo.forceActiveFocus()
+ verify(window.combo.activeFocus)
+ keyClick(Qt.Key_Space)
+ verify(window.combo.popup.visible)
+ var listView = window.combo.popup.contentItem
+ verify(listView)
+ var child = listView.contentItem.children[0]
+ verify(child)
+ compare(window.Material.theme, Material.Light)
+ compare(window.combo.Material.theme, Material.Dark)
+ compare(child.Material.theme, Material.Dark)
+ compare(window.Material.primary, Material.color(Material.Blue))
+ compare(window.combo.Material.primary, Material.color(Material.Blue))
+ compare(child.Material.primary, Material.color(Material.Blue))
+ compare(window.Material.accent, Material.color(Material.Red))
+ compare(window.combo.Material.accent, Material.color(Material.Red, themeshade(window.combo.Material.theme)))
+ compare(child.Material.accent, Material.color(Material.Red, themeshade(child.Material.theme)))
+ window.destroy()
+ }
+
+ function test_windowChange() {
+ var ldr = loader.createObject()
+ verify(ldr)
+
+ var wnd = window.createObject()
+ verify(wnd)
+
+ wnd.Material.theme = Material.Dark
+ compare(wnd.Material.theme, Material.Dark)
+
+ ldr.active = true
+ verify(ldr.item)
+ compare(ldr.item.Material.theme, Material.Light)
+
+ ldr.parent = wnd.contentItem
+ compare(ldr.item.Material.theme, Material.Dark)
+
+ wnd.destroy()
+ }
+
+ function test_colors_data() {
+ return [
+ { tag: "primary" }, { tag: "accent" }, { tag: "background" }, { tag: "foreground" }
+ ]
+ }
+
+ function test_colors(data) {
+ var control = button.createObject(testCase)
+ verify(control)
+
+ var prop = data.tag
+
+ // Material.Color - enum
+ control.Material[prop] = Material.Red
+ compare(control.Material[prop], "#f44336")
+
+ // Material.Color - string
+ control.Material[prop] = "BlueGrey"
+ compare(control.Material[prop], "#607d8b")
+
+ // SVG named color
+ control.Material[prop] = "tomato"
+ compare(control.Material[prop], "#ff6347")
+
+ // #rrggbb
+ control.Material[prop] = "#123456"
+ compare(control.Material[prop], "#123456")
+
+ // #aarrggbb
+ control.Material[prop] = "#12345678"
+ compare(control.Material[prop], "#12345678")
+
+ // Qt.rgba() - no alpha
+ control.Material[prop] = Qt.rgba(0.5, 0.5, 0.5)
+ compare(control.Material[prop], "#808080")
+
+ // Qt.rgba() - with alpha
+ control.Material[prop] = Qt.rgba(0.5, 0.5, 0.5, 0.5)
+ compare(control.Material[prop], "#80808080")
+
+ // unknown
+ ignoreWarning(new RegExp("QML Button: unknown Material." + prop + " value: 123"))
+ control.Material[prop] = 123
+ ignoreWarning(new RegExp("QML Button: unknown Material." + prop + " value: foo"))
+ control.Material[prop] = "foo"
+ ignoreWarning(new RegExp("QML Button: unknown Material." + prop + " value: #1"))
+ control.Material[prop] = "#1"
+
+ control.destroy()
+ }
+
+ function test_font_data() {
+ return [
+ {tag: "Button:pixelSize", type: "Button", attribute: "pixelSize", value: 14, window: 20, pane: 10},
+ {tag: "Button:weight", type: "Button", attribute: "weight", value: Font.Medium, window: Font.Black, pane: Font.Bold},
+ {tag: "Button:capitalization", type: "Button", attribute: "capitalization", value: Font.AllUppercase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "TabButton:pixelSize", type: "TabButton", attribute: "pixelSize", value: 14, window: 20, pane: 10},
+ {tag: "TabButton:weight", type: "TabButton", attribute: "weight", value: Font.Medium, window: Font.Black, pane: Font.Bold},
+ {tag: "TabButton:capitalization", type: "TabButton", attribute: "capitalization", value: Font.AllUppercase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "ToolButton:pixelSize", type: "ToolButton", attribute: "pixelSize", value: 14, window: 20, pane: 10},
+ {tag: "ToolButton:weight", type: "ToolButton", attribute: "weight", value: Font.Medium, window: Font.Black, pane: Font.Bold},
+ {tag: "ToolButton:capitalization", type: "ToolButton", attribute: "capitalization", value: Font.AllUppercase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "ItemDelegate:pixelSize", type: "ItemDelegate", attribute: "pixelSize", value: 14, window: 20, pane: 10},
+ {tag: "ItemDelegate:weight", type: "ItemDelegate", attribute: "weight", value: Font.Medium, window: Font.Black, pane: Font.Bold},
+ {tag: "ItemDelegate:capitalization", type: "ItemDelegate", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "CheckDelegate:pixelSize", type: "CheckDelegate", attribute: "pixelSize", value: 16, window: 20, pane: 10},
+ {tag: "CheckDelegate:weight", type: "CheckDelegate", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "CheckDelegate:capitalization", type: "CheckDelegate", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "RadioDelegate:pixelSize", type: "RadioDelegate", attribute: "pixelSize", value: 16, window: 20, pane: 10},
+ {tag: "RadioDelegate:weight", type: "RadioDelegate", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "RadioDelegate:capitalization", type: "RadioDelegate", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "SwitchDelegate:pixelSize", type: "SwitchDelegate", attribute: "pixelSize", value: 16, window: 20, pane: 10},
+ {tag: "SwitchDelegate:weight", type: "SwitchDelegate", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "SwitchDelegate:capitalization", type: "SwitchDelegate", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "Label:pixelSize", type: "Label", attribute: "pixelSize", value: 14, window: 20, pane: 10},
+ {tag: "Label:weight", type: "Label", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "Label:capitalization", type: "Label", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "CheckBox:pixelSize", type: "CheckBox", attribute: "pixelSize", value: 14, window: 20, pane: 10},
+ {tag: "CheckBox:weight", type: "CheckBox", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "CheckBox:capitalization", type: "CheckBox", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "RadioButton:pixelSize", type: "RadioButton", attribute: "pixelSize", value: 14, window: 20, pane: 10},
+ {tag: "RadioButton:weight", type: "RadioButton", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "RadioButton:capitalization", type: "RadioButton", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "Switch:pixelSize", type: "Switch", attribute: "pixelSize", value: 14, window: 20, pane: 10},
+ {tag: "Switch:weight", type: "Switch", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "Switch:capitalization", type: "Switch", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "MenuItem:pixelSize", type: "MenuItem", attribute: "pixelSize", value: 16, window: 20, pane: 10},
+ {tag: "MenuItem:weight", type: "MenuItem", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "MenuItem:capitalization", type: "MenuItem", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "ComboBox:pixelSize", type: "ComboBox", attribute: "pixelSize", value: 16, window: 20, pane: 10},
+ {tag: "ComboBox:weight", type: "ComboBox", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "ComboBox:capitalization", type: "ComboBox", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "TextField:pixelSize", type: "TextField", attribute: "pixelSize", value: 16, window: 20, pane: 10},
+ {tag: "TextField:weight", type: "TextField", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "TextField:capitalization", type: "TextField", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "TextArea:pixelSize", type: "TextArea", attribute: "pixelSize", value: 16, window: 20, pane: 10},
+ {tag: "TextArea:weight", type: "TextArea", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "TextArea:capitalization", type: "TextArea", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase},
+
+ {tag: "SpinBox:pixelSize", type: "SpinBox", attribute: "pixelSize", value: 16, window: 20, pane: 10},
+ {tag: "SpinBox:weight", type: "SpinBox", attribute: "weight", value: Font.Normal, window: Font.Black, pane: Font.Bold},
+ {tag: "SpinBox:capitalization", type: "SpinBox", attribute: "capitalization", value: Font.MixedCase, window: Font.Capitalize, pane: Font.AllLowercase}
+ ]
+ }
+
+ function test_font(data) {
+ var window = windowPane.createObject(testCase)
+ verify(window)
+ verify(window.pane)
+
+ var control = Qt.createQmlObject("import QtQuick.Controls; " + data.type + " { }", window.pane)
+ verify(control)
+
+ compare(control.font[data.attribute], data.value)
+
+ window.font[data.attribute] = data.window
+ compare(window.font[data.attribute], data.window)
+ compare(window.pane.font[data.attribute], data.window)
+ compare(control.font[data.attribute], data.window)
+
+ window.pane.font[data.attribute] = data.pane
+ compare(window.font[data.attribute], data.window)
+ compare(window.pane.font[data.attribute], data.pane)
+ compare(control.font[data.attribute], data.pane)
+
+ window.pane.font = undefined
+ compare(window.font[data.attribute], data.window)
+ compare(window.pane.font[data.attribute], data.window)
+ compare(control.font[data.attribute], data.window)
+
+ window.destroy()
+ }
+
+ Component {
+ id: backgroundControls
+ ApplicationWindow {
+ id: window
+ property Button button: Button { }
+ property ComboBox combobox: ComboBox { }
+ property Drawer drawer: Drawer { }
+ property GroupBox groupbox: GroupBox { Material.elevation: 10 }
+ property Frame frame: Frame { Material.elevation: 10 }
+ property Menu menu: Menu { }
+ property Page page: Page { }
+ property Pane pane: Pane { }
+ property Popup popup: Popup { }
+ property TabBar tabbar: TabBar { }
+ property ToolBar toolbar: ToolBar { }
+ property ToolTip tooltip: ToolTip { }
+ }
+ }
+
+ function test_background_data() {
+ return [
+ { tag: "button", inherit: false, wait: 400 },
+ { tag: "combobox", inherit: false, wait: 400 },
+ { tag: "drawer", inherit: true },
+ { tag: "groupbox", inherit: true },
+ { tag: "frame", inherit: true },
+ { tag: "menu", inherit: true },
+ { tag: "page", inherit: true },
+ { tag: "pane", inherit: true },
+ { tag: "popup", inherit: true },
+ { tag: "tabbar", inherit: true },
+ { tag: "toolbar", inherit: false },
+ { tag: "tooltip", inherit: false }
+ ]
+ }
+
+ function test_background(data) {
+ var window = backgroundControls.createObject(testCase)
+ verify(window)
+
+ var control = window[data.tag]
+ verify(control)
+
+ control.parent = window.contentItem
+ control.visible = true
+
+ var defaultBackground = control.background.color
+
+ window.Material.background = "#ff0000"
+ compare(window.color, "#ff0000")
+
+ // For controls that have an animated background color, we wait the length
+ // of the color animation to be sure that the color hasn't actually changed.
+ if (data.wait)
+ wait(data.wait)
+
+ // We want the control's background color to be equal to the window's background
+ // color, because we want the color to propagate to items that might actually use
+ // it... Button, ComboBox, ToolBar and ToolTip have a special background color,
+ // so they don't use the generic background color unless explicitly set, so we
+ // compare the actual background rect color instead.
+ if (data.inherit)
+ compare(control.background.color, "#ff0000")
+ else
+ compare(control.background.color, defaultBackground)
+
+ control.Material.background = "#0000ff"
+ tryCompare(control.background, "color", "#0000ff")
+
+ window.destroy()
+ }
+
+ Component {
+ id: busyIndicator
+ BusyIndicator { }
+ }
+
+ function test_shade() {
+ var control = busyIndicator.createObject(testCase)
+
+ compare(control.contentItem.color.toString(), Material.color(Material.Pink, Material.Shade500))
+ control.Material.theme = Material.Dark
+ compare(control.contentItem.color.toString(), Material.color(Material.Pink, Material.Shade200))
+
+ control.destroy()
+ }
+
+ // We can't declare components with JS syntax (when creating a data row),
+ // so we use introspection to get the list of all components we should test.
+ QtObject {
+ id: bindingLoopComponents
+
+ property Component row_foregroundToPrimaryTextColor: Item { Material.foreground: Material.primaryTextColor }
+ // Not all properties can be bound without binding loops. For example, it's not possible to bind
+ // foreground to primaryHighlightedTextColor, because primaryHighlightedTextColor() depends on
+ // m_explicitForeground, which is modified when the foreground is set.
+ // So, we use background instead.
+ property Component row_backgroundToPrimaryHighlightedTextColor: Item { Material.background: Material.primaryHighlightedTextColor }
+ property Component row_foregroundToSecondaryTextColor: Item { Material.foreground: Material.secondaryTextColor }
+ property Component row_foregroundToSecondaryTextColorWithTheme: Item {
+ Material.foreground: Material.theme === Material.Dark ? Material.secondaryTextColor : Material.Red
+ }
+ property Component row_foregroundToHintTextColor: Item { Material.foreground: Material.secondaryTextColor }
+ property Component row_foregroundToTextSelectionColor: Item { Material.foreground: Material.textSelectionColor }
+ property Component row_foregroundToDropShadowColor: Item { Material.foreground: Material.dropShadowColor }
+ property Component row_foregroundToDividerColor: Item { Material.foreground: Material.dividerColor }
+ property Component row_foregroundToIconColor: Item { Material.foreground: Material.iconColor }
+ property Component row_foregroundToIconDisabledColor: Item { Material.foreground: Material.iconDisabledColor }
+ property Component row_foregroundToButtonColor: Item { Material.foreground: Material.buttonColor }
+ property Component row_foregroundToButtonDisabledColor: Item { Material.foreground: Material.buttonDisabledColor }
+ property Component row_foregroundToHighlightedButtonColor: Item { Material.foreground: Material.highlightedButtonColor }
+ property Component row_foregroundToFrameColor: Item { Material.foreground: Material.frameColor }
+ property Component row_foregroundToRippleColor: Item { Material.foreground: Material.rippleColor }
+ property Component row_foregroundToHighlightedRippleColor: Item { Material.foreground: Material.highlightedRippleColor }
+ property Component row_foregroundToSwitchUncheckedTrackColor: Item { Material.foreground: Material.switchUncheckedTrackColor }
+ property Component row_foregroundToSwitchCheckedTrackColor: Item { Material.foreground: Material.switchCheckedTrackColor }
+ property Component row_foregroundToSwitchUncheckedHandleColor: Item { Material.foreground: Material.switchUncheckedHandleColor }
+ property Component row_foregroundToSwitchCheckedHandleColor: Item { Material.foreground: Material.switchCheckedHandleColor }
+ property Component row_foregroundToSwitchDisabledTrackColor: Item { Material.foreground: Material.switchDisabledTrackColor }
+ property Component row_foregroundToSwitchDisabledHandleColor: Item { Material.foreground: Material.switchDisabledHandleColor }
+ property Component row_foregroundToScrollBarColor: Item { Material.foreground: Material.scrollBarColor }
+ property Component row_foregroundToScrollBarHoveredColor: Item { Material.foreground: Material.scrollBarHoveredColor }
+ property Component row_foregroundToScrollBarPressedColor: Item { Material.foreground: Material.scrollBarPressedColor }
+ property Component row_foregroundToDialogColor: Item { Material.foreground: Material.dialogColor }
+ property Component row_foregroundToBackgroundDimColor: Item { Material.foreground: Material.backgroundDimColor }
+ property Component row_foregroundToListHighlightColor: Item { Material.foreground: Material.listHighlightColor }
+ property Component row_foregroundToTooltipColor: Item { Material.foreground: Material.tooltipColor }
+ property Component row_foregroundToToolBarColor: Item { Material.foreground: Material.toolBarColor }
+ property Component row_backgroundToToolTextColor: Item { Material.background: Material.toolTextColor }
+ property Component row_foregroundToSpinBoxDisabledIconColor: Item { Material.foreground: Material.spinBoxDisabledIconColor }
+ property Component row_foregroundToSliderDisableColor: Item { Material.foreground: Material.sliderDisableColor }
+ }
+
+ function test_propertyBindingLoop_data() {
+ let data = []
+ for (let propertyName in bindingLoopComponents) {
+ if (!propertyName.startsWith("row_") || propertyName.endsWith("Changed"))
+ continue
+
+ let row = {}
+ row.tag = propertyName.substr(4)
+ row.component = bindingLoopComponents[propertyName]
+ data.push(row)
+ }
+ return data
+ }
+
+ /*
+ Test that binding attached Material properties to other (private, non-settable)
+ Material properties does not result in a binding loop.
+ */
+ function test_propertyBindingLoop(data) {
+ let item = createTemporaryObject(data.component, testCase)
+ verify(item)
+ verify(!BindingLoopDetector.bindingLoopDetected, "Detected binding loop")
+ BindingLoopDetector.reset()
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyle/qtquickcontrols2.conf b/tests/auto/quickcontrols2/qquickmaterialstyle/qtquickcontrols2.conf
new file mode 100644
index 0000000000..b6c7c87ea1
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyle/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Material
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyle/tst_qquickmaterialstyle.cpp b/tests/auto/quickcontrols2/qquickmaterialstyle/tst_qquickmaterialstyle.cpp
new file mode 100644
index 0000000000..269f7986dc
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyle/tst_qquickmaterialstyle.cpp
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQuickTest/quicktest.h>
+
+class Setup : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool bindingLoopDetected READ wasBindingLoopDetected FINAL)
+
+public:
+ Setup() {}
+
+ bool wasBindingLoopDetected() const { return mBindingLoopDetected; }
+
+public slots:
+ void reset() { mBindingLoopDetected = false; }
+
+ void qmlEngineAvailable(QQmlEngine *engine)
+ {
+ connect(engine, &QQmlEngine::warnings, this, &Setup::qmlWarnings);
+
+ qmlRegisterSingletonInstance("org.qtproject.Test", 1, 0, "BindingLoopDetector", this);
+ }
+
+ void qmlWarnings(const QList<QQmlError> &warnings)
+ {
+ for (const auto &error : warnings) {
+ if (error.messageType() == QtWarningMsg && error.description().contains(QStringLiteral("Binding loop detected")))
+ mBindingLoopDetected = true;
+ }
+ }
+
+private:
+ bool mBindingLoopDetected = false;
+};
+
+QUICK_TEST_MAIN_WITH_SETUP(tst_qquickmaterialstyle, Setup)
+
+#include "tst_qquickmaterialstyle.moc"
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyleconf/CMakeLists.txt b/tests/auto/quickcontrols2/qquickmaterialstyleconf/CMakeLists.txt
new file mode 100644
index 0000000000..753413c163
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyleconf/CMakeLists.txt
@@ -0,0 +1,63 @@
+# Generated from qquickmaterialstyleconf.pro.
+
+#####################################################################
+## tst_qquickmaterialstyleconf Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickmaterialstyleconf
+ SOURCES
+ tst_qquickmaterialstyleconf.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qquickmaterialstyleconf_resource_files
+ "qtquickcontrols2.conf"
+ "variant-dense.conf"
+ "variant-normal.conf"
+)
+
+qt_internal_add_resource(tst_qquickmaterialstyleconf "qquickmaterialstyleconf"
+ PREFIX
+ "/"
+ FILES
+ ${qquickmaterialstyleconf_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:qquickmaterialstyleconf.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickmaterialstyleconf CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickmaterialstyleconf CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyleconf/data/applicationwindow.qml b/tests/auto/quickcontrols2/qquickmaterialstyleconf/data/applicationwindow.qml
new file mode 100644
index 0000000000..1ce4598de6
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyleconf/data/applicationwindow.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias label: label
+ property alias button: button
+
+ Label {
+ id: label
+ }
+
+ Button {
+ id: button
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyleconf/qquickmaterialstyleconf.qrc b/tests/auto/quickcontrols2/qquickmaterialstyleconf/qquickmaterialstyleconf.qrc
new file mode 100644
index 0000000000..4921913909
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyleconf/qquickmaterialstyleconf.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qtquickcontrols2.conf</file>
+ <file>variant-dense.conf</file>
+ <file>variant-normal.conf</file>
+ </qresource>
+</RCC>
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyleconf/qtquickcontrols2.conf b/tests/auto/quickcontrols2/qquickmaterialstyleconf/qtquickcontrols2.conf
new file mode 100644
index 0000000000..30cee878be
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyleconf/qtquickcontrols2.conf
@@ -0,0 +1,10 @@
+[Controls]
+Style=Material
+
+[Material]
+Background=#444444
+Foreground=Red
+Font\PixelSize=22
+
+[Material\Font]
+Family=Courier
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyleconf/tst_qquickmaterialstyleconf.cpp b/tests/auto/quickcontrols2/qquickmaterialstyleconf/tst_qquickmaterialstyleconf.cpp
new file mode 100644
index 0000000000..6b145d7ac6
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyleconf/tst_qquickmaterialstyleconf.cpp
@@ -0,0 +1,129 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+
+using namespace QQuickControlsTestUtils;
+
+class tst_qquickmaterialstyleconf : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_qquickmaterialstyleconf();
+
+private slots:
+ void conf();
+ void variants_data();
+ void variants();
+};
+
+tst_qquickmaterialstyleconf::tst_qquickmaterialstyleconf()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_qquickmaterialstyleconf::conf()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QFont customFont;
+ customFont.setFamilies(QStringList{QLatin1String("Courier")});
+ customFont.setPixelSize(22);
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+ // We specified a custom background color and font, so the window should have them.
+ QCOMPARE(window->property("color").value<QColor>(), QColor("#444444"));
+ QCOMPARE(window->property("font").value<QFont>(), customFont);
+
+ // We specified a custom foreground color and font, so the label should have them.
+ QQuickItem *label = window->property("label").value<QQuickItem*>();
+ QVERIFY(label);
+ QCOMPARE(label->property("color").value<QColor>(), QColor("#F44336"));
+ QCOMPARE(label->property("font").value<QFont>(), customFont);
+}
+
+void tst_qquickmaterialstyleconf::variants_data()
+{
+ QTest::addColumn<QByteArray>("confPath");
+ QTest::addColumn<int>("expectedButtonHeight");
+ // Just to ensure that the correct conf is loaded.
+ QTest::addColumn<QColor>("expectedColor");
+
+ // (36 button height + 12 touchable area)
+ QTest::newRow("normal") << QByteArray(":/variant-normal.conf") << 48 << QColor::fromRgb(0x123456);
+ // We specified a custom variant (dense), so the button should be small.
+ // (32 button height + 12 touchable area)
+ QTest::newRow("dense") << QByteArray(":/variant-dense.conf") << 44 << QColor::fromRgb(0x789abc);
+}
+
+void tst_qquickmaterialstyleconf::variants()
+{
+ QFETCH(QByteArray, confPath);
+ QFETCH(int, expectedButtonHeight);
+ QFETCH(QColor, expectedColor);
+
+ qmlClearTypeRegistrations();
+ QQuickStylePrivate::reset();
+ qputenv("QT_QUICK_CONTROLS_CONF", confPath);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickItem *label = window->property("label").value<QQuickItem*>();
+ QVERIFY(label);
+ QCOMPARE(label->property("color").value<QColor>(), expectedColor);
+
+ QQuickItem *button = window->property("button").value<QQuickItem*>();
+ QVERIFY(button);
+ QCOMPARE(button->height(), expectedButtonHeight);
+}
+
+QTEST_MAIN(tst_qquickmaterialstyleconf)
+
+#include "tst_qquickmaterialstyleconf.moc"
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyleconf/variant-dense.conf b/tests/auto/quickcontrols2/qquickmaterialstyleconf/variant-dense.conf
new file mode 100644
index 0000000000..6636894ea4
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyleconf/variant-dense.conf
@@ -0,0 +1,6 @@
+[Controls]
+Style=Material
+
+[Material]
+Variant=Dense
+Foreground=#789abc
diff --git a/tests/auto/quickcontrols2/qquickmaterialstyleconf/variant-normal.conf b/tests/auto/quickcontrols2/qquickmaterialstyleconf/variant-normal.conf
new file mode 100644
index 0000000000..08778e92a4
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmaterialstyleconf/variant-normal.conf
@@ -0,0 +1,6 @@
+[Controls]
+Style=Material
+
+[Material]
+Variant=Normal
+Foreground=#123456
diff --git a/tests/auto/quickcontrols2/qquickmenu/BLACKLIST b/tests/auto/quickcontrols2/qquickmenu/BLACKLIST
new file mode 100644
index 0000000000..1590f58caa
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/BLACKLIST
@@ -0,0 +1,3 @@
+# QTBUG-87018
+[subMenuDisabledMouse]
+macos
diff --git a/tests/auto/quickcontrols2/qquickmenu/CMakeLists.txt b/tests/auto/quickcontrols2/qquickmenu/CMakeLists.txt
new file mode 100644
index 0000000000..14ef0a8fc4
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from qquickmenu.pro.
+
+#####################################################################
+## tst_qquickmenu Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickmenu
+ SOURCES
+ tst_qquickmenu.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:qquickmenu.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickmenu CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickmenu CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/actionShortcuts.qml b/tests/auto/quickcontrols2/qquickmenu/data/actionShortcuts.qml
new file mode 100644
index 0000000000..87ad41c8c5
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/actionShortcuts.qml
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias menu: menu
+ property alias subMenu: subMenu
+ property alias buttonMenu: buttonMenu
+
+ Menu {
+ id: menu
+ objectName: "menu"
+
+ Action {
+ objectName: text
+ text: "action1"
+ shortcut: "A"
+ }
+
+ Menu {
+ id: subMenu
+ objectName: "subMenu"
+
+ Action {
+ objectName: text
+ text: "subAction1"
+ shortcut: "B"
+ }
+ }
+ }
+
+ Button {
+ text: "Menu button"
+
+ Menu {
+ id: buttonMenu
+
+ Action {
+ objectName: text
+ text: "buttonMenuAction1"
+ shortcut: "C"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/actions.qml b/tests/auto/quickcontrols2/qquickmenu/data/actions.qml
new file mode 100644
index 0000000000..226c94500f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/actions.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias menu: menu
+
+ Menu {
+ id: menu
+ Action { text: "action1" }
+ MenuItem { text: "menuitem2" }
+ Action { text: "action3" }
+ MenuItem { text: "menuitem4" }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/addItem.qml b/tests/auto/quickcontrols2/qquickmenu/data/addItem.qml
new file mode 100644
index 0000000000..b9d38afd59
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/addItem.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 200
+ height: 200
+
+ property alias menu: menu
+
+ MenuItem {
+ id: newMenuItem
+ text: qsTr("New")
+ }
+
+ Menu {
+ id: menu
+ y: parent.height
+
+ Component.onCompleted: addItem(newMenuItem)
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/applicationWindowScrollable.qml b/tests/auto/quickcontrols2/qquickmenu/data/applicationWindowScrollable.qml
new file mode 100644
index 0000000000..22ab278ed0
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/applicationWindowScrollable.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ title: "Test Application Window"
+ width: 300
+ height: 300
+
+ property alias menu: menu
+
+ Menu {
+ id: menu
+
+ Repeater {
+ model: 20
+
+ delegate: MenuItem {
+ objectName: text
+ text: (index + 1)
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/applicationwindow.qml b/tests/auto/quickcontrols2/qquickmenu/data/applicationwindow.qml
new file mode 100644
index 0000000000..0d1baa5190
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/applicationwindow.qml
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ title: "Test Application Window"
+ width: 400
+ height: 400
+
+ property alias emptyMenu: emptyMenu
+ property alias menu: menu
+ property alias menuButton: menuButton
+ property Overlay overlay: menu.Overlay.overlay
+
+ Menu {
+ id: emptyMenu
+ }
+
+ Menu {
+ id: menu
+ cascade: true
+
+ MenuItem {
+ objectName: "firstMenuItem"
+ text: "A"
+ }
+ MenuItem {
+ objectName: "secondMenuItem"
+ text: "B"
+ }
+ MenuItem {
+ objectName: "thirdMenuItem"
+ text: "C"
+ }
+ }
+
+ Button {
+ id: menuButton
+ x: 250
+ visible: false
+ text: "Open Menu"
+ onClicked: menu.open()
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/delegateFromSeparateComponent.qml b/tests/auto/quickcontrols2/qquickmenu/data/delegateFromSeparateComponent.qml
new file mode 100644
index 0000000000..b2af27e98e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/delegateFromSeparateComponent.qml
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 800
+ height: 800
+
+ property alias menu: menu
+
+ Component {
+ id: menuItemComponent
+
+ MenuItem {
+ contentItem: Text {
+ text: parent.text
+ color: "blue"
+ }
+ background: Rectangle {
+ color: "#00ff00"
+ }
+ }
+ }
+
+ Menu {
+ id: menu
+ title: "Root Menu"
+
+ Action {
+ text: "Action Item 1"
+ }
+ Menu {
+ title: "Sub-menu"
+ delegate: menuItemComponent
+
+ Action {
+ text: "Sub-menu Action Item 1"
+ }
+ Menu {
+ title: "Sub-sub-menu"
+ delegate: menuItemComponent
+
+ Action {
+ text: "Sub-sub-menu Action Item 1"
+ }
+ }
+ Action {
+ text: "Sub-menu Action Item 2"
+ }
+ }
+ Action {
+ text: "Action Item 2"
+ }
+
+ delegate: menuItemComponent
+ visible: true
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/disableWhenTriggered.qml b/tests/auto/quickcontrols2/qquickmenu/data/disableWhenTriggered.qml
new file mode 100644
index 0000000000..9de8868f77
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/disableWhenTriggered.qml
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ Action {
+ id: actionOutsideMenu
+ text: "Action declared outside menu"
+ onTriggered: enabled = false
+ }
+
+ menuBar: MenuBar {
+ Menu {
+ title: "Menu"
+ objectName: title
+
+ Action {
+ text: "Action"
+ objectName: text
+ onTriggered: enabled = false
+ }
+ MenuItem {
+ objectName: "MenuItem with Action"
+ action: Action {
+ text: "Action declared inside MenuItem"
+ objectName: text
+ onTriggered: enabled = false
+ }
+ }
+ MenuItem {
+ objectName: "MenuItem with Action declared outside menu"
+ action: actionOutsideMenu
+ }
+ MenuItem {
+ text: "MenuItem with no Action"
+ objectName: text
+ onTriggered: enabled = false
+ }
+
+ Menu {
+ title: "Submenu"
+ objectName: title
+
+ Action {
+ text: "Sub-Action"
+ objectName: text
+ onTriggered: enabled = false
+ }
+ MenuItem {
+ objectName: "Sub-MenuItem with Action declared inside"
+ action: Action {
+ text: "Action declared inside Sub-MenuItem"
+ objectName: text
+ onTriggered: enabled = false
+ }
+ }
+ MenuItem {
+ objectName: "Sub-MenuItem with Action declared outside menu"
+ action: actionOutsideMenu
+ }
+ MenuItem {
+ text: "Sub-MenuItem with no Action"
+ objectName: text
+ onTriggered: enabled = false
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/disabledMenuItemKeyNavigation.qml b/tests/auto/quickcontrols2/qquickmenu/data/disabledMenuItemKeyNavigation.qml
new file mode 100644
index 0000000000..496544e925
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/disabledMenuItemKeyNavigation.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 200
+ height: 200
+
+ property alias menu: menu
+
+ Menu {
+ id: menu
+
+ MenuItem {
+ text: qsTr("Enabled 1")
+ }
+ MenuItem {
+ text: qsTr("Disabled 1")
+ enabled: false
+ }
+ MenuItem {
+ text: qsTr("Enabled 2")
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/giveMenuItemFocusOnButtonPress.qml b/tests/auto/quickcontrols2/qquickmenu/data/giveMenuItemFocusOnButtonPress.qml
new file mode 100644
index 0000000000..78fa236fae
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/giveMenuItemFocusOnButtonPress.qml
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 640
+ height: 480
+
+ property alias menuButton: menuButton
+ property alias menu: menu
+
+ signal menuButtonClicked
+
+ Button {
+ id: menuButton
+ text: "Open menu"
+
+ // Buttons do not emit clicked() for enter/return, hence the Keys usage.
+ // The signal is just for the test to ensure that the return was actually handled.
+ Keys.onReturnPressed: {
+ menuButtonClicked()
+ menu.open()
+ }
+ }
+
+ Menu {
+ id: menu
+ parent: menuButton
+
+ onOpened: command1.forceActiveFocus()
+
+ MenuItem {
+ id: command1
+ objectName: text
+ text: "Command 1"
+ }
+
+ MenuItem {
+ objectName: text
+ text: "Command 2"
+ }
+
+ MenuItem {
+ objectName: text
+ text: "Command 3"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/menuItemWidths.qml b/tests/auto/quickcontrols2/qquickmenu/data/menuItemWidths.qml
new file mode 100644
index 0000000000..e956a29f38
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/menuItemWidths.qml
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 600
+ height: 600
+
+ property alias menu: menu
+
+ Menu {
+ id: menu
+ MenuItem {
+ objectName: "MenuItem"
+ text: "MenuItem"
+ }
+ MenuSeparator {
+ objectName: "MenuSeparator"
+ }
+ Menu {
+ title: "Sub-menu"
+ objectName: "Sub-menu"
+
+ MenuItem {
+ objectName: "SubMenuItem"
+ text: "SubMenuItem"
+ }
+ }
+ Rectangle {
+ objectName: "CustomSeparator"
+ height: 2
+ color: "salmon"
+ }
+ Rectangle {
+ // Use a binding to test retranslate(), which re-evaluates all bindings.
+ implicitWidth: someValue
+ objectName: "CustomRectangleSeparator"
+ height: 2
+ color: "salmon"
+
+ property int someValue: 120
+ }
+ Control {
+ objectName: "CustomControlSeparator"
+ implicitWidth: someOtherValue
+ height: 2
+ background: Rectangle {
+ color: "navajowhite"
+ }
+
+ property int someOtherValue: 180
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/menuSeparator.qml b/tests/auto/quickcontrols2/qquickmenu/data/menuSeparator.qml
new file mode 100644
index 0000000000..64ba601461
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/menuSeparator.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 200
+ height: 200
+
+ property alias menu: menu
+
+ MenuItem {
+ id: newMenuItem
+ text: qsTr("New")
+ }
+
+ MenuSeparator {
+ id: menuSeparator
+ }
+
+ MenuItem {
+ id: saveMenuItem
+ text: qsTr("Save")
+ }
+
+ Menu {
+ id: menu
+ cascade: true
+
+ Component.onCompleted: {
+ addItem(newMenuItem)
+ addItem(menuSeparator)
+ addItem(saveMenuItem)
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/mnemonics.qml b/tests/auto/quickcontrols2/qquickmenu/data/mnemonics.qml
new file mode 100644
index 0000000000..6525e59ed4
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/mnemonics.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias menu: menu
+ property alias action: action
+ property alias menuItem: menuItem
+ property alias subMenu: subMenu
+ property alias subMenuItem: subMenuItem
+
+ Menu {
+ id: menu
+
+ Action {
+ id: action
+ text: "&Action"
+ }
+
+ MenuItem {
+ id: menuItem
+ text: "Menu &Item"
+ }
+
+ Menu {
+ id: subMenu
+ title: "Sub &Menu"
+
+ MenuItem {
+ id: subMenuItem
+ text: "&Sub Menu Item"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/order.qml b/tests/auto/quickcontrols2/qquickmenu/data/order.qml
new file mode 100644
index 0000000000..f2f18168de
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/order.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 200
+ height: 200
+
+ property alias menu: menu
+
+ Component {
+ id: menuItem
+ MenuItem { }
+ }
+
+ Menu {
+ id: menu
+ property alias repeater: repeater
+ MenuItem { text: "static_1" }
+ Repeater {
+ id: repeater
+ model: 2
+ MenuItem { text: "repeated_" + (index + 2) }
+ }
+ MenuItem { text: "static_4" }
+ Component.onCompleted: {
+ addItem(menuItem.createObject(menu.contentItem, {text: "dynamic_5"}))
+ addItem(menuItem.createObject(menu.contentItem, {text: "dynamic_6"}))
+ insertItem(0, menuItem.createObject(menu.contentItem, {text: "dynamic_0"}))
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/popup.qml b/tests/auto/quickcontrols2/qquickmenu/data/popup.qml
new file mode 100644
index 0000000000..88c08b46e8
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/popup.qml
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 600
+
+ property alias menu: menu
+ property alias menuItem1: menuItem1
+ property alias menuItem2: menuItem2
+ property alias menuItem3: menuItem3
+ property alias button: button
+
+ function popupAtCursor() {
+ menu.popup()
+ }
+
+ function popupAtPos(pos) {
+ menu.popup(pos)
+ }
+
+ function popupAtCoord(x, y) {
+ menu.popup(x, y)
+ }
+
+ function popupItemAtCursor(item) {
+ menu.popup(item)
+ }
+
+ function popupItemAtPos(pos, item) {
+ menu.popup(pos, item)
+ }
+
+ function popupItemAtCoord(x, y, item) {
+ menu.popup(x, y, item)
+ }
+
+ function popupAtParentCursor(parent) {
+ menu.popup(parent)
+ }
+
+ function popupAtParentPos(parent, pos) {
+ menu.popup(parent, pos)
+ }
+
+ function popupAtParentCoord(parent, x, y) {
+ menu.popup(parent, x, y)
+ }
+
+ function popupItemAtParentCursor(parent, item) {
+ menu.popup(parent, item)
+ }
+
+ function popupItemAtParentPos(parent, pos, item) {
+ menu.popup(parent, pos, item)
+ }
+
+ function popupItemAtParentCoord(parent, x, y, item) {
+ menu.popup(parent, x, y, item)
+ }
+
+ Menu {
+ id: menu
+ MenuItem { id: menuItem1; text: "Foo" }
+ MenuItem { id: menuItem2; text: "Bar" }
+ MenuItem { id: menuItem3; text: "Baz" }
+ }
+
+ Button {
+ id: button
+ text: "Button"
+ anchors.centerIn: parent
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/pressAndHold.qml b/tests/auto/quickcontrols2/qquickmenu/data/pressAndHold.qml
new file mode 100644
index 0000000000..a16a15da80
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/pressAndHold.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias menu: menu
+
+ MouseArea {
+ anchors.fill: parent
+ onPressAndHold: menu.open()
+ }
+
+ Menu {
+ id: menu
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ MenuItem { text: "One" }
+ MenuItem { text: "Two" }
+ MenuItem { text: "Three" }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/removeTakeItem.qml b/tests/auto/quickcontrols2/qquickmenu/data/removeTakeItem.qml
new file mode 100644
index 0000000000..cfe7585e43
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/removeTakeItem.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 200
+ height: 200
+
+ property alias menu: menu
+ property alias menuItem1: menuItem1
+ property alias menuItem2: menuItem2
+ property alias menuItem3: menuItem3
+
+ function takeSecondItem() {
+ return menu.takeItem(1)
+ }
+
+ function removeFirstItem() {
+ menu.removeItem(menuItem1)
+ }
+
+ function removeNullItem() {
+ menu.removeItem(null)
+ }
+
+ Menu {
+ id: menu
+ MenuItem {
+ id: menuItem1
+ }
+ MenuItem {
+ id: menuItem2
+ }
+ MenuItem {
+ id: menuItem3
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/repeater.qml b/tests/auto/quickcontrols2/qquickmenu/data/repeater.qml
new file mode 100644
index 0000000000..50c8adcb32
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/repeater.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 200
+ height: 200
+
+ property alias menu: menu
+ property alias repeater: repeater
+
+ Menu {
+ id: menu
+ Repeater {
+ id: repeater
+ model: 5
+ MenuItem { property int idx: index }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/scrollableWithPadding.qml b/tests/auto/quickcontrols2/qquickmenu/data/scrollableWithPadding.qml
new file mode 100644
index 0000000000..c8e73858fa
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/scrollableWithPadding.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Window
+
+Window {
+ title: "Test Window"
+ width: 300
+ height: dummyItem.height * 10
+
+ property alias menu: menu
+ MenuItem {
+ id: dummyItem
+ objectName: "Dummy"
+ text: objectName
+ }
+
+ Menu {
+ id: menu
+ topPadding: 10
+ Repeater {
+ model: 10
+
+ delegate: MenuItem {
+ objectName: text
+ text: (index + 1)
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/subMenuDisabled.qml b/tests/auto/quickcontrols2/qquickmenu/data/subMenuDisabled.qml
new file mode 100644
index 0000000000..e50ab7abc7
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/subMenuDisabled.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 600
+ height: 400
+
+ property alias mainMenu: mainMenu
+ property alias subMenu: subMenu
+
+ Menu {
+ id: mainMenu
+ title: "Menu"
+
+ Menu {
+ id: subMenu
+ title: "Sub Menu"
+ MenuItem {
+ id: subMenuItem1
+ text: "Sub Menu Item 1"
+ enabled: false
+ }
+ MenuItem {
+ id: subMenuItem2
+ text: "Sub Menu Item 2"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/subMenus.qml b/tests/auto/quickcontrols2/qquickmenu/data/subMenus.qml
new file mode 100644
index 0000000000..8227a29fb2
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/subMenus.qml
@@ -0,0 +1,137 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 600
+ height: 400
+
+ property alias mainMenu: mainMenu
+ property alias subMenu1: subMenu1
+ property alias subMenu2: subMenu2
+ property alias subSubMenu1: subSubMenu1
+
+ Menu {
+ id: mainMenu
+ MenuItem {
+ id: mainMenuItem1
+ objectName: "mainMenuItem1"
+ text: "Main 1"
+ }
+
+ Menu {
+ overlap: 0
+ id: subMenu1
+ objectName: "subMenu1"
+ title: "Sub Menu 1"
+
+ MenuItem {
+ id: subMenuItem1
+ objectName: "subMenuItem1"
+ text: "Sub 1"
+ }
+
+ MenuItem {
+ id: subMenuItem2
+ objectName: "subMenuItem2"
+ text: "Sub 2"
+ }
+
+ Menu {
+ overlap: 0
+ id: subSubMenu1
+ objectName: "subSubMenu1"
+ title: "Sub Sub Menu 1"
+
+ MenuItem {
+ id: subSubMenuItem1
+ objectName: "subSubMenuItem1"
+ text: "Sub Sub 1"
+ }
+ MenuItem {
+ id: subSubMenuItem2
+ objectName: "subSubMenuItem2"
+ text: "Sub Sub 2"
+ }
+ }
+ }
+
+ MenuItem {
+ id: mainMenuItem2
+ objectName: "mainMenuItem2"
+ text: "Main 2"
+ }
+
+ Menu {
+ id: subMenu2
+ objectName: "subMenu2"
+ title: "Sub Menu 2"
+
+ MenuItem {
+ id: subMenuItem3
+ objectName: "subMenuItem3"
+ text: "Sub 3"
+ }
+ MenuItem {
+ id: subMenuItem4
+ objectName: "subMenuItem4"
+ text: "Sub 4"
+ }
+ }
+
+ MenuItem {
+ id: mainMenuItem3
+ objectName: "mainMenuItem3"
+ text: "Main 3"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/data/windowScrollable.qml b/tests/auto/quickcontrols2/qquickmenu/data/windowScrollable.qml
new file mode 100644
index 0000000000..7c3a5234fb
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/data/windowScrollable.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Window
+
+Window {
+ title: "Test Window"
+ width: 300
+ height: 300
+
+ property alias menu: menu
+
+ Menu {
+ id: menu
+
+ Repeater {
+ model: 20
+
+ delegate: MenuItem {
+ objectName: text
+ text: (index + 1)
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp b/tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp
new file mode 100644
index 0000000000..9e37541137
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp
@@ -0,0 +1,2064 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtTest/qsignalspy.h>
+#include <QtGui/qcursor.h>
+#if QT_CONFIG(shortcut)
+#include <QtGui/qkeysequence.h>
+#endif
+#include <QtGui/qstylehints.h>
+#include <QtGui/qpa/qplatformintegration.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickControlsTestUtils/private/qtest_quickcontrols_p.h>
+
+#include <QtQuickTemplates2/private/qquickaction_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickoverlay_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+#include <QtQuickTemplates2/private/qquickmenu_p.h>
+#include <QtQuickTemplates2/private/qquickmenuitem_p.h>
+#include <QtQuickTemplates2/private/qquickmenuseparator_p.h>
+
+using namespace QQuickVisualTestUtils;
+using namespace QQuickControlsTestUtils;
+
+class tst_QQuickMenu : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickMenu();
+
+private slots:
+ void defaults();
+ void count();
+ void mouse();
+ void pressAndHold();
+ void contextMenuKeyboard();
+ void disabledMenuItemKeyNavigation();
+ void mnemonics();
+ void menuButton();
+ void addItem();
+ void menuSeparator();
+ void repeater();
+ void order();
+ void popup();
+ void actions();
+#if QT_CONFIG(shortcut)
+ void actionShortcuts();
+#endif
+ void removeTakeItem();
+ void subMenuMouse_data();
+ void subMenuMouse();
+ void subMenuDisabledMouse_data();
+ void subMenuDisabledMouse();
+ void subMenuKeyboard_data();
+ void subMenuKeyboard();
+ void subMenuDisabledKeyboard_data();
+ void subMenuDisabledKeyboard();
+ void subMenuPosition_data();
+ void subMenuPosition();
+ void addRemoveSubMenus();
+ void scrollable_data();
+ void scrollable();
+ void disableWhenTriggered_data();
+ void disableWhenTriggered();
+ void menuItemWidth_data();
+ void menuItemWidth();
+ void menuItemWidthAfterMenuWidthChanged_data();
+ void menuItemWidthAfterMenuWidthChanged();
+ void menuItemWidthAfterImplicitWidthChanged_data();
+ void menuItemWidthAfterImplicitWidthChanged();
+ void menuItemWidthAfterRetranslate();
+ void giveMenuItemFocusOnButtonPress();
+
+private:
+ static bool hasWindowActivation();
+};
+
+tst_QQuickMenu::tst_QQuickMenu()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+bool tst_QQuickMenu::hasWindowActivation()
+{
+ return (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation));
+}
+
+void tst_QQuickMenu::defaults()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickMenu *emptyMenu = helper.appWindow->property("emptyMenu").value<QQuickMenu*>();
+ QCOMPARE(emptyMenu->isVisible(), false);
+ QCOMPARE(emptyMenu->currentIndex(), -1);
+ QCOMPARE(emptyMenu->contentItem()->property("currentIndex"), QVariant(-1));
+ QCOMPARE(emptyMenu->count(), 0);
+}
+
+void tst_QQuickMenu::count()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickMenu *menu = helper.window->property("emptyMenu").value<QQuickMenu*>();
+ QVERIFY(menu);
+
+ QSignalSpy countSpy(menu, &QQuickMenu::countChanged);
+ QVERIFY(countSpy.isValid());
+
+ menu->addItem(new QQuickItem);
+ QCOMPARE(menu->count(), 1);
+ QCOMPARE(countSpy.count(), 1);
+
+ menu->insertItem(0, new QQuickItem);
+ QCOMPARE(menu->count(), 2);
+ QCOMPARE(countSpy.count(), 2);
+
+ menu->removeItem(menu->itemAt(1));
+ QCOMPARE(menu->count(), 1);
+ QCOMPARE(countSpy.count(), 3);
+
+ QScopedPointer<QQuickItem> item(menu->takeItem(0));
+ QVERIFY(item);
+ QCOMPARE(menu->count(), 0);
+ QCOMPARE(countSpy.count(), 4);
+}
+
+void tst_QQuickMenu::mouse()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QSKIP("Mouse hovering not functional on offscreen/minimal platforms");
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QVERIFY(menu);
+ menu->open();
+ QVERIFY(menu->isVisible());
+ QQuickOverlay *overlay = window->property("overlay").value<QQuickOverlay*>();
+ QVERIFY(overlay);
+ QVERIFY(overlay->childItems().contains(menu->contentItem()->parentItem()));
+ QTRY_VERIFY(menu->isOpened());
+
+ QQuickItem *firstItem = menu->itemAt(0);
+ QSignalSpy clickedSpy(firstItem, SIGNAL(clicked()));
+ QSignalSpy triggeredSpy(firstItem, SIGNAL(triggered()));
+ QSignalSpy visibleSpy(menu, SIGNAL(visibleChanged()));
+
+ // Ensure that presses cause the current index to change,
+ // so that the highlight acts as a way of illustrating press state.
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier,
+ QPoint(menu->x() + menu->leftPadding() + firstItem->width() / 2, menu->y() + menu->topPadding() + firstItem->height() / 2));
+ QVERIFY(firstItem->hasActiveFocus());
+ QCOMPARE(menu->currentIndex(), 0);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(0));
+ QVERIFY(menu->isVisible());
+
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier,
+ QPoint(menu->x() + menu->leftPadding() + firstItem->width() / 2, menu->y() + menu->topPadding() + firstItem->height() / 2));
+ QCOMPARE(clickedSpy.count(), 1);
+ QCOMPARE(triggeredSpy.count(), 1);
+ QTRY_COMPARE(visibleSpy.count(), 1);
+ QVERIFY(!menu->isVisible());
+ QVERIFY(!overlay->childItems().contains(menu->contentItem()));
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1));
+
+ menu->open();
+ QCOMPARE(visibleSpy.count(), 2);
+ QVERIFY(menu->isVisible());
+ QVERIFY(overlay->childItems().contains(menu->contentItem()->parentItem()));
+ QTRY_VERIFY(menu->isOpened());
+
+ // Ensure that we have enough space to click outside of the menu.
+ QVERIFY(window->width() > menu->contentItem()->width());
+ QVERIFY(window->height() > menu->contentItem()->height());
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ QPoint(menu->contentItem()->x() + menu->contentItem()->width() + 1,
+ menu->contentItem()->y() + menu->contentItem()->height() + 1));
+ QTRY_COMPARE(visibleSpy.count(), 3);
+ QVERIFY(!menu->isVisible());
+ QVERIFY(!overlay->childItems().contains(menu->contentItem()->parentItem()));
+
+ menu->open();
+ QCOMPARE(visibleSpy.count(), 4);
+ QVERIFY(menu->isVisible());
+ QVERIFY(overlay->childItems().contains(menu->contentItem()->parentItem()));
+ QTRY_VERIFY(menu->isOpened());
+
+ // Hover-highlighting does not work on Android
+#ifndef Q_OS_ANDROID
+ // Hover-highlight through the menu items one by one
+ QQuickItem *prevHoverItem = nullptr;
+ QQuickItem *listView = menu->contentItem();
+ for (int y = menu->topPadding(); y < listView->height(); ++y) {
+ QQuickItem *hoverItem = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(listView, "itemAt", Q_RETURN_ARG(QQuickItem *, hoverItem), Q_ARG(qreal, 0), Q_ARG(qreal, listView->property("contentY").toReal() + y)));
+ if (!hoverItem || !hoverItem->isVisible() || hoverItem == prevHoverItem)
+ continue;
+ QTest::mouseMove(window, QPoint(
+ menu->x() + menu->leftPadding() + hoverItem->x() + hoverItem->width() / 2,
+ menu->y() + menu->topPadding() + hoverItem->y() + hoverItem->height() / 2));
+ QTRY_VERIFY(hoverItem->property("highlighted").toBool());
+ if (prevHoverItem)
+ QVERIFY(!prevHoverItem->property("highlighted").toBool());
+ prevHoverItem = hoverItem;
+ }
+#endif
+
+ // Try pressing within the menu and releasing outside of it; it should close.
+ // TODO: won't work until QQuickPopup::releasedOutside() actually gets emitted
+// QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(firstItem->width() / 2, firstItem->height() / 2));
+// QVERIFY(firstItem->hasActiveFocus());
+// QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(0));
+// QVERIFY(menu->isVisible());
+// QCOMPARE(triggeredSpy.count(), 1);
+
+// QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(menu->contentItem()->width() + 1, firstItem->height() / 2));
+// QCOMPARE(clickedSpy.count(), 1);
+// QCOMPARE(triggeredSpy.count(), 1);
+// QCOMPARE(visibleSpy.count(), 5);
+// QVERIFY(!menu->isVisible());
+// QVERIFY(!overlay->childItems().contains(menu->contentItem()));
+// QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1));
+}
+
+void tst_QQuickMenu::pressAndHold()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("pressAndHold.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QTRY_VERIFY(menu->isVisible());
+
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QVERIFY(menu->isVisible());
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QTRY_VERIFY(!menu->isVisible());
+}
+
+void tst_QQuickMenu::contextMenuKeyboard()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ if (QGuiApplication::styleHints()->tabFocusBehavior() != Qt::TabFocusAllControls)
+ QSKIP("This platform only allows tab focus for text controls");
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+ QVERIFY(QGuiApplication::focusWindow() == window);
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1));
+
+ QQuickMenuItem *firstItem = qobject_cast<QQuickMenuItem *>(menu->itemAt(0));
+ QVERIFY(firstItem);
+ QSignalSpy visibleSpy(menu, SIGNAL(visibleChanged()));
+
+ menu->setFocus(true);
+ menu->open();
+ QCOMPARE(visibleSpy.count(), 1);
+ QVERIFY(menu->isVisible());
+ QQuickOverlay *overlay = window->property("overlay").value<QQuickOverlay*>();
+ QVERIFY(overlay);
+ QVERIFY(overlay->childItems().contains(menu->contentItem()->parentItem()));
+ QTRY_VERIFY(menu->isOpened());
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->property("highlighted").toBool());
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1));
+
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(firstItem->hasActiveFocus());
+ QVERIFY(firstItem->hasVisualFocus());
+ QVERIFY(firstItem->isHighlighted());
+ QCOMPARE(firstItem->focusReason(), Qt::TabFocusReason);
+ QCOMPARE(menu->currentIndex(), 0);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(0));
+
+ QQuickMenuItem *secondItem = qobject_cast<QQuickMenuItem *>(menu->itemAt(1));
+ QVERIFY(secondItem);
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->hasVisualFocus());
+ QVERIFY(!firstItem->isHighlighted());
+ QVERIFY(secondItem->hasActiveFocus());
+ QVERIFY(secondItem->hasVisualFocus());
+ QVERIFY(secondItem->isHighlighted());
+ QCOMPARE(secondItem->focusReason(), Qt::TabFocusReason);
+ QCOMPARE(menu->currentIndex(), 1);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(1));
+
+ QSignalSpy secondTriggeredSpy(secondItem, SIGNAL(triggered()));
+ QTest::keyClick(window, Qt::Key_Space);
+ QCOMPARE(secondTriggeredSpy.count(), 1);
+ QTRY_COMPARE(visibleSpy.count(), 2);
+ QVERIFY(!menu->isVisible());
+ QVERIFY(!overlay->childItems().contains(menu->contentItem()));
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->hasVisualFocus());
+ QVERIFY(!firstItem->isHighlighted());
+ QVERIFY(!secondItem->hasActiveFocus());
+ QVERIFY(!secondItem->hasVisualFocus());
+ QVERIFY(!secondItem->isHighlighted());
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1));
+
+ // Enter/return should also work.
+ // Open the menu.
+ menu->open();
+ QCOMPARE(visibleSpy.count(), 3);
+ QVERIFY(menu->isVisible());
+ QTRY_VERIFY(menu->isOpened());
+ // Give the first item focus.
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(firstItem->hasActiveFocus());
+ QVERIFY(firstItem->hasVisualFocus());
+ QVERIFY(firstItem->isHighlighted());
+ QCOMPARE(firstItem->focusReason(), Qt::TabFocusReason);
+ QCOMPARE(menu->currentIndex(), 0);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(0));
+ // Press enter.
+ QSignalSpy firstTriggeredSpy(firstItem, SIGNAL(triggered()));
+ QTest::keyClick(window, Qt::Key_Return);
+ QCOMPARE(firstTriggeredSpy.count(), 1);
+ QTRY_COMPARE(visibleSpy.count(), 4);
+ QVERIFY(!menu->isVisible());
+ QVERIFY(!overlay->childItems().contains(menu->contentItem()));
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->hasVisualFocus());
+ QVERIFY(!firstItem->isHighlighted());
+ QVERIFY(!secondItem->hasActiveFocus());
+ QVERIFY(!secondItem->hasVisualFocus());
+ QVERIFY(!secondItem->isHighlighted());
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1));
+
+ menu->open();
+ QCOMPARE(visibleSpy.count(), 5);
+ QVERIFY(menu->isVisible());
+ QVERIFY(overlay->childItems().contains(menu->contentItem()->parentItem()));
+ QTRY_VERIFY(menu->isOpened());
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->hasVisualFocus());
+ QVERIFY(!firstItem->isHighlighted());
+ QVERIFY(!secondItem->hasActiveFocus());
+ QVERIFY(!secondItem->hasVisualFocus());
+ QVERIFY(!secondItem->isHighlighted());
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1));
+
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(firstItem->hasActiveFocus());
+ QVERIFY(firstItem->hasVisualFocus());
+ QVERIFY(firstItem->isHighlighted());
+ QCOMPARE(firstItem->focusReason(), Qt::TabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(secondItem->hasActiveFocus());
+ QVERIFY(secondItem->hasVisualFocus());
+ QVERIFY(secondItem->isHighlighted());
+ QCOMPARE(secondItem->focusReason(), Qt::TabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Down);
+ QQuickMenuItem *thirdItem = qobject_cast<QQuickMenuItem *>(menu->itemAt(2));
+ QVERIFY(thirdItem);
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->hasVisualFocus());
+ QVERIFY(!firstItem->isHighlighted());
+ QVERIFY(!secondItem->hasActiveFocus());
+ QVERIFY(!secondItem->hasVisualFocus());
+ QVERIFY(!secondItem->isHighlighted());
+ QVERIFY(thirdItem->hasActiveFocus());
+ QVERIFY(thirdItem->hasVisualFocus());
+ QVERIFY(thirdItem->isHighlighted());
+ QCOMPARE(thirdItem->focusReason(), Qt::TabFocusReason);
+
+ // Key navigation shouldn't wrap by default.
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->hasVisualFocus());
+ QVERIFY(!firstItem->isHighlighted());
+ QVERIFY(!secondItem->hasActiveFocus());
+ QVERIFY(!secondItem->hasVisualFocus());
+ QVERIFY(!secondItem->isHighlighted());
+ QVERIFY(thirdItem->hasActiveFocus());
+ QVERIFY(thirdItem->hasVisualFocus());
+ QVERIFY(thirdItem->isHighlighted());
+ QCOMPARE(thirdItem->focusReason(), Qt::TabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Up);
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->hasVisualFocus());
+ QVERIFY(!firstItem->isHighlighted());
+ QVERIFY(secondItem->hasActiveFocus());
+ QVERIFY(secondItem->hasVisualFocus());
+ QVERIFY(secondItem->isHighlighted());
+ QCOMPARE(secondItem->focusReason(), Qt::BacktabFocusReason);
+ QVERIFY(!thirdItem->hasActiveFocus());
+ QVERIFY(!thirdItem->hasVisualFocus());
+ QVERIFY(!thirdItem->isHighlighted());
+
+ QTest::keyClick(window, Qt::Key_Backtab);
+ QVERIFY(firstItem->hasActiveFocus());
+ QVERIFY(firstItem->hasVisualFocus());
+ QVERIFY(firstItem->isHighlighted());
+ QCOMPARE(firstItem->focusReason(), Qt::BacktabFocusReason);
+ QVERIFY(!secondItem->hasActiveFocus());
+ QVERIFY(!secondItem->hasVisualFocus());
+ QVERIFY(!secondItem->isHighlighted());
+ QVERIFY(!thirdItem->hasActiveFocus());
+ QVERIFY(!thirdItem->hasVisualFocus());
+ QVERIFY(!thirdItem->isHighlighted());
+
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_COMPARE(visibleSpy.count(), 6);
+ QVERIFY(!menu->isVisible());
+}
+
+// QTBUG-70181
+void tst_QQuickMenu::disabledMenuItemKeyNavigation()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ if (QGuiApplication::styleHints()->tabFocusBehavior() != Qt::TabFocusAllControls)
+ QSKIP("This platform only allows tab focus for text controls");
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("disabledMenuItemKeyNavigation.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+ QVERIFY(QGuiApplication::focusWindow() == window);
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1));
+
+ QQuickMenuItem *firstItem = qobject_cast<QQuickMenuItem *>(menu->itemAt(0));
+ QVERIFY(firstItem);
+
+ QQuickMenuItem *secondItem = qobject_cast<QQuickMenuItem *>(menu->itemAt(1));
+ QVERIFY(secondItem);
+
+ QQuickMenuItem *thirdItem = qobject_cast<QQuickMenuItem *>(menu->itemAt(2));
+ QVERIFY(thirdItem);
+
+ menu->setFocus(true);
+ menu->open();
+ QVERIFY(menu->isVisible());
+ QTRY_VERIFY(menu->isOpened());
+ QVERIFY(!firstItem->hasActiveFocus());
+ QVERIFY(!firstItem->property("highlighted").toBool());
+ QCOMPARE(menu->currentIndex(), -1);
+
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(firstItem->hasActiveFocus());
+ QVERIFY(firstItem->hasVisualFocus());
+ QVERIFY(firstItem->isHighlighted());
+ QCOMPARE(firstItem->focusReason(), Qt::TabFocusReason);
+ QCOMPARE(menu->currentIndex(), 0);
+
+ // Shouldn't be possible to give focus to a disabled menu item.
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(!secondItem->hasActiveFocus());
+ QVERIFY(!secondItem->hasVisualFocus());
+ QVERIFY(!secondItem->isHighlighted());
+ QVERIFY(thirdItem->hasActiveFocus());
+ QVERIFY(thirdItem->hasVisualFocus());
+ QVERIFY(thirdItem->isHighlighted());
+ QCOMPARE(thirdItem->focusReason(), Qt::TabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Up);
+ QVERIFY(firstItem->hasActiveFocus());
+ QVERIFY(firstItem->hasVisualFocus());
+ QVERIFY(firstItem->isHighlighted());
+ QCOMPARE(firstItem->focusReason(), Qt::BacktabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_VERIFY(!menu->isVisible());
+}
+
+void tst_QQuickMenu::mnemonics()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+#ifdef Q_OS_MACOS
+ QSKIP("Mnemonics are not used on macOS");
+#endif
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("mnemonics.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ MnemonicKeySimulator keySim(window);
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QQuickAction *action = window->property("action").value<QQuickAction *>();
+ QQuickMenuItem *menuItem = window->property("menuItem").value<QQuickMenuItem *>();
+ QQuickMenu *subMenu = window->property("subMenu").value<QQuickMenu *>();
+ QQuickMenuItem *subMenuItem = window->property("subMenuItem").value<QQuickMenuItem *>();
+ QVERIFY(menu && action && menuItem && subMenu && subMenuItem);
+
+ keySim.press(Qt::Key_Alt);
+ menu->open();
+ QTRY_VERIFY(menu->isOpened());
+
+ QSignalSpy actionSpy(action, &QQuickAction::triggered);
+ QVERIFY(actionSpy.isValid());
+ keySim.click(Qt::Key_A); // "&Action"
+ QCOMPARE(actionSpy.count(), 1);
+
+ menu->open();
+ QTRY_VERIFY(menu->isOpened());
+
+ QSignalSpy menuItemSpy(menuItem, &QQuickMenuItem::triggered);
+ QVERIFY(menuItemSpy.isValid());
+ keySim.click(Qt::Key_I); // "Menu &Item"
+ keySim.release(Qt::Key_Alt);
+ QCOMPARE(menuItemSpy.count(), 1);
+
+ keySim.press(Qt::Key_Alt);
+ menu->open();
+ QTRY_VERIFY(menu->isOpened());
+
+ keySim.click(Qt::Key_M); // "Sub &Menu"
+ QTRY_VERIFY(subMenu->isOpened());
+
+ QSignalSpy subMenuItemSpy(subMenuItem, &QQuickMenuItem::triggered);
+ QVERIFY(subMenuItemSpy.isValid());
+ keySim.click(Qt::Key_S); // "&Sub Menu Item"
+ keySim.release(Qt::Key_Alt);
+ QCOMPARE(subMenuItemSpy.count(), 1);
+}
+
+void tst_QQuickMenu::menuButton()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ if (QGuiApplication::styleHints()->tabFocusBehavior() != Qt::TabFocusAllControls)
+ QSKIP("This platform only allows tab focus for text controls");
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+ QVERIFY(QGuiApplication::focusWindow() == window);
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QQuickButton *menuButton = window->property("menuButton").value<QQuickButton*>();
+ QSignalSpy visibleSpy(menu, SIGNAL(visibleChanged()));
+
+ menuButton->setVisible(true);
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ menuButton->mapToScene(QPointF(menuButton->width() / 2, menuButton->height() / 2)).toPoint());
+ QCOMPARE(visibleSpy.count(), 1);
+ QVERIFY(menu->isVisible());
+ QTRY_VERIFY(menu->isOpened());
+
+ QTest::keyClick(window, Qt::Key_Tab);
+ QQuickItem *firstItem = menu->itemAt(0);
+ QVERIFY(firstItem->hasActiveFocus());
+}
+
+void tst_QQuickMenu::addItem()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("addItem.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QVERIFY(menu);
+ menu->open();
+ QVERIFY(menu->isVisible());
+
+ QQuickItem *menuItem = menu->itemAt(0);
+ QVERIFY(menuItem);
+ QTRY_VERIFY(!QQuickItemPrivate::get(menuItem)->culled); // QTBUG-53262
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ menuItem->mapToScene(QPointF(menuItem->width() / 2, menuItem->height() / 2)).toPoint());
+ QTRY_VERIFY(!menu->isVisible());
+}
+
+void tst_QQuickMenu::menuSeparator()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("menuSeparator.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QVERIFY(menu);
+ menu->open();
+ QVERIFY(menu->isVisible());
+
+ QQuickMenuItem *newMenuItem = qobject_cast<QQuickMenuItem*>(menu->itemAt(0));
+ QVERIFY(newMenuItem);
+ QCOMPARE(newMenuItem->text(), QStringLiteral("New"));
+
+ QQuickMenuSeparator *menuSeparator = qobject_cast<QQuickMenuSeparator*>(menu->itemAt(1));
+ QVERIFY(menuSeparator);
+
+ QQuickMenuItem *saveMenuItem = qobject_cast<QQuickMenuItem*>(menu->itemAt(2));
+ QVERIFY(saveMenuItem);
+ QCOMPARE(saveMenuItem->text(), QStringLiteral("Save"));
+ QTRY_VERIFY(!QQuickItemPrivate::get(saveMenuItem)->culled); // QTBUG-53262
+ QTRY_VERIFY(menu->isOpened());
+
+ // Clicking on items should still close the menu.
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ newMenuItem->mapToScene(QPointF(newMenuItem->width() / 2, newMenuItem->height() / 2)).toPoint());
+ QTRY_VERIFY(!menu->isVisible());
+
+ menu->open();
+ QTRY_VERIFY(menu->isOpened());
+
+ // Clicking on a separator shouldn't close the menu.
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ menuSeparator->mapToScene(QPointF(menuSeparator->width() / 2, menuSeparator->height() / 2)).toPoint());
+ QVERIFY(menu->isVisible());
+
+ // Clicking on items should still close the menu.
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ saveMenuItem->mapToScene(QPointF(saveMenuItem->width() / 2, saveMenuItem->height() / 2)).toPoint());
+ QTRY_VERIFY(!menu->isVisible());
+
+ moveMouseAway(window);
+
+ menu->open();
+ QVERIFY(menu->isVisible());
+ QTRY_VERIFY(menu->isOpened());
+
+ // Key navigation skips separators
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(newMenuItem->hasActiveFocus());
+ QVERIFY(newMenuItem->hasVisualFocus());
+ QCOMPARE(newMenuItem->focusReason(), Qt::TabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(saveMenuItem->hasActiveFocus());
+ QVERIFY(saveMenuItem->hasVisualFocus());
+ QCOMPARE(saveMenuItem->focusReason(), Qt::TabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(saveMenuItem->hasActiveFocus());
+ QVERIFY(saveMenuItem->hasVisualFocus());
+ QCOMPARE(saveMenuItem->focusReason(), Qt::TabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Up);
+ QVERIFY(newMenuItem->hasActiveFocus());
+ QVERIFY(newMenuItem->hasVisualFocus());
+ QCOMPARE(newMenuItem->focusReason(), Qt::BacktabFocusReason);
+
+ QTest::keyClick(window, Qt::Key_Up);
+ QVERIFY(newMenuItem->hasActiveFocus());
+ QVERIFY(newMenuItem->hasVisualFocus());
+ QCOMPARE(newMenuItem->focusReason(), Qt::BacktabFocusReason);
+}
+
+void tst_QQuickMenu::repeater()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("repeater.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QVERIFY(menu);
+ menu->open();
+ QVERIFY(menu->isVisible());
+
+ QObject *repeater = window->property("repeater").value<QObject*>();
+ QVERIFY(repeater);
+
+ int count = repeater->property("count").toInt();
+ QCOMPARE(count, 5);
+
+ for (int i = 0; i < count; ++i) {
+ QQuickItem *item = menu->itemAt(i);
+ QVERIFY(item);
+ QCOMPARE(item->property("idx").toInt(), i);
+
+ QQuickItem *repeaterItem = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(repeater, "itemAt", Q_RETURN_ARG(QQuickItem*, repeaterItem), Q_ARG(int, i)));
+ QCOMPARE(item, repeaterItem);
+ }
+
+ repeater->setProperty("model", 3);
+
+ count = repeater->property("count").toInt();
+ QCOMPARE(count, 3);
+
+ for (int i = 0; i < count; ++i) {
+ QQuickItem *item = menu->itemAt(i);
+ QVERIFY(item);
+ QCOMPARE(item->property("idx").toInt(), i);
+
+ QQuickItem *repeaterItem = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(repeater, "itemAt", Q_RETURN_ARG(QQuickItem*, repeaterItem), Q_ARG(int, i)));
+ QCOMPARE(item, repeaterItem);
+ }
+}
+
+void tst_QQuickMenu::order()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("order.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QVERIFY(menu);
+ menu->open();
+ QVERIFY(menu->isVisible());
+
+ const QStringList texts = {"dynamic_0", "static_1", "repeated_2", "repeated_3", "static_4", "dynamic_5", "dynamic_6"};
+
+ for (int i = 0; i < texts.count(); ++i) {
+ QQuickItem *item = menu->itemAt(i);
+ QVERIFY(item);
+ QCOMPARE(item->property("text").toString(), texts.at(i));
+ }
+}
+
+void tst_QQuickMenu::popup()
+{
+ // Try moving the cursor from the current position
+ // Skip if it fails since the test relies on moving the cursor
+ const QPoint point = QCursor::pos() + QPoint(1, 1);
+ QCursor::setPos(point);
+ if (!QTest::qWaitFor([point]{ return QCursor::pos() == point; }))
+ QSKIP("Setting cursor position is not supported on this platform");
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("popup.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+
+ QQuickMenuItem *menuItem1 = window->property("menuItem1").value<QQuickMenuItem *>();
+ QVERIFY(menuItem1);
+
+ QQuickMenuItem *menuItem2 = window->property("menuItem2").value<QQuickMenuItem *>();
+ QVERIFY(menuItem2);
+
+ QQuickMenuItem *menuItem3 = window->property("menuItem3").value<QQuickMenuItem *>();
+ QVERIFY(menuItem3);
+
+ QQuickItem *button = window->property("button").value<QQuickItem *>();
+ QVERIFY(button);
+
+ // Android does not support settings cursor position
+#if QT_CONFIG(cursor) && !defined(Q_OS_ANDROID)
+ QPoint oldCursorPos = QCursor::pos();
+ QPoint cursorPos = window->mapToGlobal(QPoint(11, 22));
+ QCursor::setPos(cursorPos);
+ QTRY_COMPARE(QCursor::pos(), cursorPos);
+
+ QVERIFY(QMetaObject::invokeMethod(window, "popupAtCursor"));
+ QCOMPARE(menu->parentItem(), window->contentItem());
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1);
+ const qreal elevenOrLeftMargin = qMax(qreal(11), menu->leftMargin());
+ const qreal twentyTwoOrTopMargin = qMax(qreal(22), menu->topMargin());
+ // If the Menu has large margins, it may be moved to stay within them.
+ // QTBUG-75503: QTRY_COMPARE doesn't use qFuzzyCompare() in all cases,
+ // meaning a lot of these comparisons could trigger a 10 second wait;
+ // use QTRY_VERIFY and qFuzzyCompare instead.
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), elevenOrLeftMargin));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), twentyTwoOrTopMargin));
+ menu->close();
+
+ QVERIFY(QMetaObject::invokeMethod(window, "popupAtPos", Q_ARG(QVariant, QPointF(33, 44))));
+ QCOMPARE(menu->parentItem(), window->contentItem());
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1);
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), qMax(qreal(33), menu->leftMargin())));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), qMax(qreal(44), menu->topMargin())));
+ menu->close();
+
+ QVERIFY(QMetaObject::invokeMethod(window, "popupAtCoord", Q_ARG(QVariant, 55), Q_ARG(QVariant, 66)));
+ QCOMPARE(menu->parentItem(), window->contentItem());
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1);
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), qMax(qreal(55), menu->leftMargin())));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), qMax(qreal(66), menu->topMargin())));
+ menu->close();
+
+ menu->setParentItem(nullptr);
+ QVERIFY(QMetaObject::invokeMethod(window, "popupAtParentCursor", Q_ARG(QVariant, QVariant::fromValue(button))));
+ QCOMPARE(menu->parentItem(), button);
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1);
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), button->mapFromScene(QPointF(elevenOrLeftMargin, twentyTwoOrTopMargin)).x()));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), button->mapFromScene(QPointF(elevenOrLeftMargin, twentyTwoOrTopMargin)).y()));
+ menu->close();
+
+ menu->setParentItem(nullptr);
+ QVERIFY(QMetaObject::invokeMethod(window, "popupAtParentPos", Q_ARG(QVariant, QVariant::fromValue(button)), Q_ARG(QVariant, QPointF(-11, -22))));
+ QCOMPARE(menu->parentItem(), button);
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1);
+ // Don't need to worry about margins here because we're opening close
+ // to the center of the window.
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), -11));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), -22));
+ QCOMPARE(menu->popupItem()->position(), button->mapToScene(QPointF(-11, -22)));
+ menu->close();
+
+ menu->setParentItem(nullptr);
+ QVERIFY(QMetaObject::invokeMethod(window, "popupAtParentCoord", Q_ARG(QVariant, QVariant::fromValue(button)), Q_ARG(QVariant, -33), Q_ARG(QVariant, -44)));
+ QCOMPARE(menu->parentItem(), button);
+ QCOMPARE(menu->currentIndex(), -1);
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1);
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), -33));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), -44));
+ QCOMPARE(menu->popupItem()->position(), button->mapToScene(QPointF(-33, -44)));
+ menu->close();
+
+ const qreal twelveOrLeftMargin = qMax(qreal(12), menu->leftMargin());
+ cursorPos = window->mapToGlobal(QPoint(twelveOrLeftMargin, window->height() / 2));
+ QCursor::setPos(cursorPos);
+ QTRY_COMPARE(QCursor::pos(), cursorPos);
+
+ const QList<QQuickMenuItem *> menuItems = QList<QQuickMenuItem *>() << menuItem1 << menuItem2 << menuItem3;
+ for (QQuickMenuItem *menuItem : menuItems) {
+ menu->resetParentItem();
+
+ QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtCursor", Q_ARG(QVariant, QVariant::fromValue(menuItem))));
+ QCOMPARE(menu->currentIndex(), menuItems.indexOf(menuItem));
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem));
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), twelveOrLeftMargin));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), window->height() / 2 - menu->topPadding() - menuItem->y()));
+ menu->close();
+
+ QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtPos", Q_ARG(QVariant, QPointF(33, window->height() / 3)), Q_ARG(QVariant, QVariant::fromValue(menuItem))));
+ QCOMPARE(menu->currentIndex(), menuItems.indexOf(menuItem));
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem));
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), 33));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), window->height() / 3 - menu->topPadding() - menuItem->y()));
+ menu->close();
+
+ QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtCoord", Q_ARG(QVariant, 55), Q_ARG(QVariant, window->height() / 3 * 2), Q_ARG(QVariant, QVariant::fromValue(menuItem))));
+ QCOMPARE(menu->currentIndex(), menuItems.indexOf(menuItem));
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem));
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), 55));
+ QTRY_COMPARE_WITH_TIMEOUT(menu->y(), window->height() / 3 * 2 - menu->topPadding() - menuItem->y(), 500);
+ menu->close();
+
+ menu->setParentItem(nullptr);
+ QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtParentCursor", Q_ARG(QVariant, QVariant::fromValue(button)), Q_ARG(QVariant, QVariant::fromValue(menuItem))));
+ QCOMPARE(menu->parentItem(), button);
+ QCOMPARE(menu->currentIndex(), menuItems.indexOf(menuItem));
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem));
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), button->mapFromScene(QPoint(twelveOrLeftMargin, window->height() / 2)).x()));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), button->mapFromScene(QPoint(twelveOrLeftMargin, window->height() / 2)).y() - menu->topPadding() - menuItem->y()));
+ menu->close();
+
+ menu->setParentItem(nullptr);
+ QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtParentPos", Q_ARG(QVariant, QVariant::fromValue(button)), Q_ARG(QVariant, QPointF(-11, -22)), Q_ARG(QVariant, QVariant::fromValue(menuItem))));
+ QCOMPARE(menu->parentItem(), button);
+ QCOMPARE(menu->currentIndex(), menuItems.indexOf(menuItem));
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem));
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), -11));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), -22 - menu->topPadding() - menuItem->y()));
+ QCOMPARE(menu->popupItem()->position(), button->mapToScene(QPointF(-11, -22 - menu->topPadding() - menuItem->y())));
+ menu->close();
+
+ menu->setParentItem(nullptr);
+ QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtParentCoord", Q_ARG(QVariant, QVariant::fromValue(button)), Q_ARG(QVariant, -33), Q_ARG(QVariant, -44), Q_ARG(QVariant, QVariant::fromValue(menuItem))));
+ QCOMPARE(menu->parentItem(), button);
+ QCOMPARE(menu->currentIndex(), menuItems.indexOf(menuItem));
+ QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem));
+ QTRY_VERIFY(qFuzzyCompare(menu->x(), -33));
+ QTRY_VERIFY(qFuzzyCompare(menu->y(), -44 - menu->topPadding() - menuItem->y()));
+ QCOMPARE(menu->popupItem()->position(), button->mapToScene(QPointF(-33, -44 - menu->topPadding() - menuItem->y())));
+ menu->close();
+ }
+
+ QCursor::setPos(oldCursorPos);
+ QTRY_COMPARE(QCursor::pos(), oldCursorPos);
+#endif
+}
+
+void tst_QQuickMenu::actions()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("actions.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+
+ QPointer<QQuickAction> action1 = menu->actionAt(0);
+ QVERIFY(!action1.isNull());
+
+ QPointer<QQuickAction> action3 = menu->actionAt(2);
+ QVERIFY(!action3.isNull());
+
+ QVERIFY(!menu->actionAt(1));
+ QVERIFY(!menu->actionAt(3));
+
+ QPointer<QQuickMenuItem> menuItem1 = qobject_cast<QQuickMenuItem *>(menu->itemAt(0));
+ QVERIFY(!menuItem1.isNull());
+ QCOMPARE(menuItem1->action(), action1.data());
+ QCOMPARE(menuItem1->text(), "action1");
+
+ QPointer<QQuickMenuItem> menuItem2 = qobject_cast<QQuickMenuItem *>(menu->itemAt(1));
+ QVERIFY(!menuItem2.isNull());
+ QVERIFY(!menuItem2->action());
+ QCOMPARE(menuItem2->text(), "menuitem2");
+
+ QPointer<QQuickMenuItem> menuItem3 = qobject_cast<QQuickMenuItem *>(menu->itemAt(2));
+ QVERIFY(!menuItem3.isNull());
+ QCOMPARE(menuItem3->action(), action3.data());
+ QCOMPARE(menuItem3->text(), "action3");
+
+ QPointer<QQuickMenuItem> menuItem4 = qobject_cast<QQuickMenuItem *>(menu->itemAt(3));
+ QVERIFY(!menuItem4.isNull());
+ QVERIFY(!menuItem4->action());
+ QCOMPARE(menuItem4->text(), "menuitem4");
+
+ // takeAction(int) does not destroy the action, but does destroy the respective item
+ QCOMPARE(menu->takeAction(0), action1.data());
+ QVERIFY(!menu->itemAt(3));
+ QCoreApplication::sendPostedEvents(action1, QEvent::DeferredDelete);
+ QVERIFY(!action1.isNull());
+ QCoreApplication::sendPostedEvents(menuItem1, QEvent::DeferredDelete);
+ QVERIFY(menuItem1.isNull());
+
+ // takeAction(int) does not destroy an item that doesn't have an action
+ QVERIFY(!menuItem2->subMenu());
+ QVERIFY(!menu->takeAction(0));
+ QCoreApplication::sendPostedEvents(menuItem2, QEvent::DeferredDelete);
+ QVERIFY(!menuItem2.isNull());
+
+ // addAction(Action) re-creates the respective item in the menu
+ menu->addAction(action1);
+ menuItem1 = qobject_cast<QQuickMenuItem *>(menu->itemAt(3));
+ QVERIFY(!menuItem1.isNull());
+ QCOMPARE(menuItem1->action(), action1.data());
+
+ // removeAction(Action) destroys both the action and the respective item
+ menu->removeAction(action1);
+ QVERIFY(!menu->itemAt(3));
+ QCoreApplication::sendPostedEvents(action1, QEvent::DeferredDelete);
+ QVERIFY(action1.isNull());
+ QCoreApplication::sendPostedEvents(menuItem1, QEvent::DeferredDelete);
+ QVERIFY(menuItem1.isNull());
+}
+
+#if QT_CONFIG(shortcut)
+void tst_QQuickMenu::actionShortcuts()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("actionShortcuts.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ // Try the menu's shortcut.
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+ QPointer<QQuickAction> action1 = menu->actionAt(0);
+ QVERIFY(action1);
+ QCOMPARE(action1->shortcut(), QKeySequence(Qt::Key_A));
+
+ QSignalSpy action1TriggeredSpy(action1, SIGNAL(triggered()));
+ QVERIFY(action1TriggeredSpy.isValid());
+
+ QTest::keyClick(window, Qt::Key_A);
+ QCOMPARE(action1TriggeredSpy.count(), 1);
+
+ // Try the sub-menu.
+ QQuickMenu *subMenu = window->property("subMenu").value<QQuickMenu *>();
+ QVERIFY(subMenu);
+ QPointer<QQuickAction> subMenuAction1 = subMenu->actionAt(0);
+ QVERIFY(subMenuAction1);
+ QCOMPARE(subMenuAction1->shortcut(), QKeySequence(Qt::Key_B));
+
+ QSignalSpy subMenuAction1TriggeredSpy(subMenuAction1, SIGNAL(triggered()));
+ QVERIFY(subMenuAction1TriggeredSpy.isValid());
+
+ QTest::keyClick(window, Qt::Key_B);
+ QCOMPARE(subMenuAction1TriggeredSpy.count(), 1);
+
+ // Try the button menu.
+ QQuickMenu *buttonMenu = window->property("buttonMenu").value<QQuickMenu *>();
+ QVERIFY(buttonMenu);
+ QPointer<QQuickAction> buttonMenuAction1 = buttonMenu->actionAt(0);
+ QVERIFY(buttonMenuAction1);
+ QCOMPARE(buttonMenuAction1->shortcut(), QKeySequence(Qt::Key_C));
+
+ QSignalSpy buttonMenuAction1TriggeredSpy(buttonMenuAction1, SIGNAL(triggered()));
+ QVERIFY(buttonMenuAction1TriggeredSpy.isValid());
+
+ QTest::keyClick(window, Qt::Key_C);
+ QCOMPARE(buttonMenuAction1TriggeredSpy.count(), 1);
+}
+#endif
+
+void tst_QQuickMenu::removeTakeItem()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("removeTakeItem.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+
+ QPointer<QQuickMenuItem> menuItem1 = window->property("menuItem1").value<QQuickMenuItem *>();
+ QVERIFY(!menuItem1.isNull());
+ QCOMPARE(menuItem1->menu(), menu);
+
+ QPointer<QQuickMenuItem> menuItem2 = window->property("menuItem2").value<QQuickMenuItem *>();
+ QVERIFY(!menuItem2.isNull());
+ QCOMPARE(menuItem2->menu(), menu);
+
+ QPointer<QQuickMenuItem> menuItem3 = window->property("menuItem3").value<QQuickMenuItem *>();
+ QVERIFY(!menuItem3.isNull());
+ QCOMPARE(menuItem3->menu(), menu);
+
+ // takeItem(int) does not destroy
+ QVariant ret;
+ QVERIFY(QMetaObject::invokeMethod(window, "takeSecondItem", Q_RETURN_ARG(QVariant, ret)));
+ QCOMPARE(ret.value<QQuickMenuItem *>(), menuItem2);
+ QVERIFY(!menuItem2->menu());
+ QCoreApplication::sendPostedEvents(menuItem2, QEvent::DeferredDelete);
+ QVERIFY(!menuItem2.isNull());
+
+ // removeItem(Item) destroys
+ QVERIFY(QMetaObject::invokeMethod(window, "removeFirstItem"));
+ QVERIFY(!menuItem1->menu());
+ QCoreApplication::sendPostedEvents(menuItem1, QEvent::DeferredDelete);
+ QVERIFY(menuItem1.isNull());
+
+ // removeItem(null) must not call removeItem(0)
+ QVERIFY(QMetaObject::invokeMethod(window, "removeNullItem"));
+ QCOMPARE(menuItem3->menu(), menu);
+ QCoreApplication::sendPostedEvents(menuItem3, QEvent::DeferredDelete);
+ QVERIFY(!menuItem3.isNull());
+}
+
+void tst_QQuickMenu::subMenuMouse_data()
+{
+ QTest::addColumn<bool>("cascade");
+
+ QTest::newRow("cascading") << true;
+ QTest::newRow("non-cascading") << false;
+}
+
+void tst_QQuickMenu::subMenuMouse()
+{
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QSKIP("Mouse hovering not functional on offscreen/minimal platforms");
+
+ QFETCH(bool, cascade);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("subMenus.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *mainMenu = window->property("mainMenu").value<QQuickMenu *>();
+ QVERIFY(mainMenu);
+ mainMenu->setCascade(cascade);
+ QCOMPARE(mainMenu->cascade(), cascade);
+
+ QQuickMenu *subMenu1 = window->property("subMenu1").value<QQuickMenu *>();
+ QVERIFY(subMenu1);
+ subMenu1->setCascade(cascade);
+ QCOMPARE(subMenu1->cascade(), cascade);
+
+ QQuickMenu *subMenu2 = window->property("subMenu2").value<QQuickMenu *>();
+ QVERIFY(subMenu2);
+ subMenu2->setCascade(cascade);
+ QCOMPARE(subMenu2->cascade(), cascade);
+
+ QQuickMenu *subSubMenu1 = window->property("subSubMenu1").value<QQuickMenu *>();
+ QVERIFY(subSubMenu1);
+ subSubMenu1->setCascade(cascade);
+ QCOMPARE(subSubMenu1->cascade(), cascade);
+
+ mainMenu->open();
+ QVERIFY(mainMenu->isVisible());
+ QTRY_VERIFY(mainMenu->isOpened());
+ QVERIFY(!subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+
+ // open the sub-menu with mouse click
+ QQuickMenuItem *subMenu1Item = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(1));
+ QVERIFY(subMenu1Item);
+ QCOMPARE(subMenu1Item->subMenu(), subMenu1);
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, subMenu1Item->mapToScene(QPoint(1, 1)).toPoint());
+ QTRY_COMPARE(mainMenu->isVisible(), cascade);
+ QVERIFY(subMenu1->isVisible());
+ QTRY_VERIFY(subMenu1->isOpened());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+
+ // on Android mouse hover will not open and close sub-menus
+#ifndef Q_OS_ANDROID
+ // open the cascading sub-sub-menu with mouse hover
+ QQuickMenuItem *subSubMenu1Item = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(2));
+ QVERIFY(subSubMenu1Item);
+ QCOMPARE(subSubMenu1Item->subMenu(), subSubMenu1);
+ QTest::mouseMove(window, subSubMenu1Item->mapToScene(QPoint(1, 1)).toPoint());
+ QCOMPARE(mainMenu->isVisible(), cascade);
+ QVERIFY(subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+ if (cascade) {
+ QTRY_VERIFY(subSubMenu1->isVisible());
+ QTRY_VERIFY(subSubMenu1->isOpened());
+ }
+
+ // close the sub-sub-menu with mouse hover over another parent menu item
+ QQuickMenuItem *subMenuItem1 = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(0));
+ QVERIFY(subMenuItem1);
+ QVERIFY(!subMenuItem1->subMenu());
+ QTest::mouseMove(window, subMenuItem1->mapToScene(QPoint(1, 1)).toPoint());
+ QCOMPARE(mainMenu->isVisible(), cascade);
+ QVERIFY(subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QTRY_VERIFY(!subSubMenu1->isVisible());
+
+ // re-open the sub-sub-menu with mouse hover
+ QTest::mouseMove(window, subSubMenu1Item->mapToScene(QPoint(1, 1)).toPoint());
+ QCOMPARE(mainMenu->isVisible(), cascade);
+ QVERIFY(subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ if (!cascade) {
+ QVERIFY(!subSubMenu1->isVisible());
+ } else {
+ QTRY_VERIFY(subSubMenu1->isVisible());
+ QTRY_VERIFY(subSubMenu1->isOpened());
+ }
+
+ // close sub-menu and sub-sub-menu with mouse hover in the main menu
+ QQuickMenuItem *mainMenuItem1 = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(0));
+ QVERIFY(mainMenuItem1);
+ QTest::mouseMove(window, mainMenuItem1->mapToScene(QPoint(1, 1)).toPoint());
+ QCOMPARE(mainMenu->isVisible(), cascade);
+ QTRY_COMPARE(subMenu1->isVisible(), !cascade);
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+#else
+ QQuickMenuItem *mainMenuItem1 = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(0));
+ QVERIFY(mainMenuItem1);
+#endif // !Q_OS_ANDROID
+
+ // close all menus by click triggering an item
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, mainMenuItem1->mapToScene(QPoint(1, 1)).toPoint());
+ QTRY_VERIFY(!mainMenu->isVisible());
+ QTRY_VERIFY(!subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+}
+
+void tst_QQuickMenu::subMenuDisabledMouse_data()
+{
+ subMenuMouse_data();
+}
+
+// QTBUG-69540
+void tst_QQuickMenu::subMenuDisabledMouse()
+{
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QSKIP("Mouse hovering not functional on offscreen/minimal platforms");
+
+ QFETCH(bool, cascade);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("subMenuDisabled.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *mainMenu = window->property("mainMenu").value<QQuickMenu *>();
+ QVERIFY(mainMenu);
+ mainMenu->setCascade(cascade);
+ QCOMPARE(mainMenu->cascade(), cascade);
+
+ QQuickMenuItem *menuItem1 = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(0));
+ QVERIFY(menuItem1);
+
+ QQuickMenu *subMenu = window->property("subMenu").value<QQuickMenu *>();
+ QVERIFY(subMenu);
+
+ mainMenu->open();
+ QTRY_VERIFY(mainMenu->isOpened());
+ QVERIFY(!menuItem1->isHighlighted());
+ QVERIFY(!subMenu->isVisible());
+
+ // Hover-highlighting does not work on Android
+#ifndef Q_OS_ANDROID
+ // Generate a hover event to set the current index
+ QTest::mouseMove(window, menuItem1->mapToScene(QPoint(2, 2)).toPoint());
+ QTRY_VERIFY(menuItem1->isHighlighted());
+#endif
+ // Open the sub-menu with a mouse click.
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, menuItem1->mapToScene(QPoint(1, 1)).toPoint());
+ // Need to use the TRY variant here,
+ // as e.g. Material, iOS style menus have transitions and don't open/close immediately.
+ QTRY_COMPARE(mainMenu->isVisible(), cascade);
+ QTRY_VERIFY(subMenu->isOpened());
+ QTRY_VERIFY(menuItem1->isHighlighted());
+ // Now the sub-menu is open. The current behavior is that the first menu item
+ // in the new menu is highlighted; make sure that we choose the next item if
+ // the first is disabled.
+ QQuickMenuItem *subMenuItem1 = qobject_cast<QQuickMenuItem *>(subMenu->itemAt(0));
+ QVERIFY(subMenuItem1);
+ QQuickMenuItem *subMenuItem2 = qobject_cast<QQuickMenuItem *>(subMenu->itemAt(1));
+ QVERIFY(subMenuItem2);
+ QVERIFY(!subMenuItem1->isHighlighted());
+ QVERIFY(subMenuItem2->isHighlighted());
+
+ // Close all menus by clicking on the item that isn't disabled.
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, subMenuItem2->mapToScene(QPoint(1, 1)).toPoint());
+ QTRY_VERIFY(!mainMenu->isVisible());
+ QTRY_VERIFY(!subMenu->isVisible());
+}
+
+void tst_QQuickMenu::subMenuKeyboard_data()
+{
+ QTest::addColumn<bool>("cascade");
+ QTest::addColumn<bool>("mirrored");
+
+ QTest::newRow("cascading") << true << false;
+ QTest::newRow("cascading,mirrored") << true << true;
+ QTest::newRow("non-cascading") << false << false;
+ QTest::newRow("non-cascading,mirrored") << false << true;
+}
+
+void tst_QQuickMenu::subMenuKeyboard()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QFETCH(bool, cascade);
+ QFETCH(bool, mirrored);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("subMenus.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
+
+ QQuickMenu *mainMenu = window->property("mainMenu").value<QQuickMenu *>();
+ QVERIFY(mainMenu);
+ mainMenu->setCascade(cascade);
+ QCOMPARE(mainMenu->cascade(), cascade);
+
+ QQuickMenu *subMenu1 = window->property("subMenu1").value<QQuickMenu *>();
+ QVERIFY(subMenu1);
+
+ QQuickMenu *subMenu2 = window->property("subMenu2").value<QQuickMenu *>();
+ QVERIFY(subMenu2);
+
+ QQuickMenu *subSubMenu1 = window->property("subSubMenu1").value<QQuickMenu *>();
+ QVERIFY(subSubMenu1);
+
+ mainMenu->open();
+ QVERIFY(mainMenu->isVisible());
+ QTRY_VERIFY(mainMenu->isOpened());
+ QVERIFY(!subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+
+ // navigate to the sub-menu item and trigger it to open the sub-menu
+ QQuickMenuItem *subMenu1Item = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(1));
+ QVERIFY(subMenu1Item);
+ QVERIFY(!subMenu1Item->isHighlighted());
+ QCOMPARE(subMenu1Item->subMenu(), subMenu1);
+ QTest::keyClick(window, Qt::Key_Down);
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(subMenu1Item->isHighlighted());
+ QTest::keyClick(window, Qt::Key_Space);
+ QTRY_COMPARE(mainMenu->isVisible(), cascade);
+ QVERIFY(subMenu1->isVisible());
+ QTRY_VERIFY(subMenu1->isOpened());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+
+ // navigate to the sub-sub-menu item and open it with the arrow key
+ QQuickMenuItem *subSubMenu1Item = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(2));
+ QVERIFY(subSubMenu1Item);
+ QVERIFY(!subSubMenu1Item->isHighlighted());
+ QCOMPARE(subSubMenu1Item->subMenu(), subSubMenu1);
+ QTest::keyClick(window, Qt::Key_Down);
+ QTest::keyClick(window, Qt::Key_Down);
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(subSubMenu1Item->isHighlighted());
+ QTRY_COMPARE(mainMenu->isVisible(), cascade);
+ QVERIFY(subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+ QTest::keyClick(window, mirrored ? Qt::Key_Left : Qt::Key_Right);
+ QCOMPARE(mainMenu->isVisible(), cascade);
+ QTRY_COMPARE(subMenu1->isVisible(), cascade);
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(subSubMenu1->isVisible());
+ QTRY_VERIFY(subSubMenu1->isOpened());
+
+ // navigate within the sub-sub-menu
+ QQuickMenuItem *subSubMenuItem1 = qobject_cast<QQuickMenuItem *>(subSubMenu1->itemAt(0));
+ QVERIFY(subSubMenuItem1);
+ QQuickMenuItem *subSubMenuItem2 = qobject_cast<QQuickMenuItem *>(subSubMenu1->itemAt(1));
+ QVERIFY(subSubMenuItem2);
+ QVERIFY(subSubMenuItem1->isHighlighted());
+ QVERIFY(!subSubMenuItem2->isHighlighted());
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(!subSubMenuItem1->isHighlighted());
+ QVERIFY(subSubMenuItem2->isHighlighted());
+
+ // navigate to the parent menu with the arrow key
+ QTest::keyClick(window, mirrored ? Qt::Key_Right : Qt::Key_Left);
+ QVERIFY(subSubMenu1Item->isHighlighted());
+ QCOMPARE(mainMenu->isVisible(), cascade);
+ QVERIFY(subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QTRY_VERIFY(!subSubMenu1->isVisible());
+
+ // navigate within the sub-menu
+ QQuickMenuItem *subMenuItem1 = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(0));
+ QVERIFY(subMenuItem1);
+ QQuickMenuItem *subMenuItem2 = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(1));
+ QVERIFY(subMenuItem2);
+ QVERIFY(!subMenuItem1->isHighlighted());
+ QVERIFY(!subMenuItem2->isHighlighted());
+ QVERIFY(subSubMenu1Item->isHighlighted());
+ QTest::keyClick(window, Qt::Key_Up);
+ QVERIFY(!subMenuItem1->isHighlighted());
+ QVERIFY(subMenuItem2->isHighlighted());
+ QVERIFY(!subSubMenu1Item->isHighlighted());
+
+ // close the menus with esc
+ QTest::keyClick(window, Qt::Key_Escape);
+ QCOMPARE(mainMenu->isVisible(), cascade);
+ QTRY_VERIFY(!subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_VERIFY(!mainMenu->isVisible());
+ QVERIFY(!subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+}
+
+void tst_QQuickMenu::subMenuDisabledKeyboard_data()
+{
+ subMenuKeyboard_data();
+}
+
+// QTBUG-69540
+void tst_QQuickMenu::subMenuDisabledKeyboard()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QFETCH(bool, cascade);
+ QFETCH(bool, mirrored);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("subMenuDisabled.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
+
+ QQuickMenu *mainMenu = window->property("mainMenu").value<QQuickMenu *>();
+ QVERIFY(mainMenu);
+ mainMenu->setCascade(cascade);
+ QCOMPARE(mainMenu->cascade(), cascade);
+
+ QQuickMenuItem *menuItem1 = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(0));
+ QVERIFY(menuItem1);
+
+ QQuickMenu *subMenu = window->property("subMenu").value<QQuickMenu *>();
+ QVERIFY(subMenu);
+
+ mainMenu->open();
+ QVERIFY(mainMenu->isVisible());
+ QTRY_VERIFY(mainMenu->isOpened());
+ QVERIFY(!menuItem1->isHighlighted());
+ QVERIFY(!subMenu->isVisible());
+
+ // Highlight the top-level menu item.
+ QTest::keyClick(window, Qt::Key_Down);
+ QVERIFY(menuItem1->isHighlighted());
+
+ QQuickMenuItem *subMenuItem1 = qobject_cast<QQuickMenuItem *>(subMenu->itemAt(0));
+ QVERIFY(subMenuItem1);
+ QQuickMenuItem *subMenuItem2 = qobject_cast<QQuickMenuItem *>(subMenu->itemAt(1));
+ QVERIFY(subMenuItem2);
+
+ // Open the sub-menu.
+ QTest::keyClick(window, mirrored ? Qt::Key_Left : Qt::Key_Right);
+ // The first sub-menu item is disabled, so it should highlight the second one.
+ QVERIFY(!subMenuItem1->isHighlighted());
+ QVERIFY(subMenuItem2->isHighlighted());
+
+ // Close the menus with escape.
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_COMPARE(mainMenu->isVisible(), cascade);
+ QTRY_VERIFY(!subMenu->isVisible());
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_VERIFY(!mainMenu->isVisible());
+ QVERIFY(!subMenu->isVisible());
+}
+
+/*
+ QCOMPARE() compares doubles with 1-in-1e12 precision, which is too fine for these tests.
+ Casting to floats, compared with 1-in-1e5 precision, gives more robust results.
+*/
+#define FLOAT_EQ(u, v) QCOMPARE(float(u), float(v))
+
+void tst_QQuickMenu::subMenuPosition_data()
+{
+ QTest::addColumn<bool>("cascade");
+ QTest::addColumn<bool>("flip");
+ QTest::addColumn<bool>("mirrored");
+ QTest::addColumn<qreal>("overlap");
+
+ QTest::newRow("cascading") << true << false << false << 0.0;
+ QTest::newRow("cascading,flip") << true << true << false << 0.0;
+ QTest::newRow("cascading,overlap") << true << false << false << 10.0;
+ QTest::newRow("cascading,flip,overlap") << true << true << false << 10.0;
+ QTest::newRow("cascading,mirrored") << true << false << true << 0.0;
+ QTest::newRow("cascading,mirrored,flip") << true << true << true << 0.0;
+ QTest::newRow("cascading,mirrored,overlap") << true << false << true << 10.0;
+ QTest::newRow("cascading,mirrored,flip,overlap") << true << true << true << 10.0;
+ QTest::newRow("non-cascading") << false << false << false << 0.0;
+}
+
+void tst_QQuickMenu::subMenuPosition()
+{
+ QFETCH(bool, cascade);
+ QFETCH(bool, flip);
+ QFETCH(bool, mirrored);
+ QFETCH(qreal, overlap);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("subMenus.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+
+ // Ensure that the default size of the window fits three menus side by side.
+ QQuickMenu *mainMenu = window->property("mainMenu").value<QQuickMenu *>();
+ QVERIFY(mainMenu);
+ window->setWidth(mainMenu->width() * 3 + mainMenu->leftMargin() + mainMenu->rightMargin());
+
+ // the default size of the window fits three menus side by side.
+ // when testing flipping, we resize the window so that the first
+ // sub-menu fits, but the second doesn't
+ if (flip)
+ window->setWidth(window->width() - mainMenu->width());
+
+ centerOnScreen(window);
+ moveMouseAway(window);
+#ifndef Q_OS_ANDROID
+ window->show();
+#else
+ // On Android the desired size does not fit into the screen, so we just
+ // call showNormal. This will make the window larger than the screen, but
+ // all the geometry calculations will be correct. Otherwise we'll get
+ // unpredictable results
+ window->showNormal();
+#endif
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
+
+ mainMenu->setCascade(cascade);
+ QCOMPARE(mainMenu->cascade(), cascade);
+ mainMenu->setOverlap(overlap);
+ QCOMPARE(mainMenu->overlap(), overlap);
+
+ QQuickMenu *subMenu1 = window->property("subMenu1").value<QQuickMenu *>();
+ QVERIFY(subMenu1);
+ subMenu1->setCascade(cascade);
+ QCOMPARE(subMenu1->cascade(), cascade);
+ subMenu1->setOverlap(overlap);
+ QCOMPARE(subMenu1->overlap(), overlap);
+
+ QQuickMenu *subMenu2 = window->property("subMenu2").value<QQuickMenu *>();
+ QVERIFY(subMenu2);
+ subMenu2->setCascade(cascade);
+ QCOMPARE(subMenu2->cascade(), cascade);
+ subMenu2->setOverlap(overlap);
+ QCOMPARE(subMenu2->overlap(), overlap);
+
+ QQuickMenu *subSubMenu1 = window->property("subSubMenu1").value<QQuickMenu *>();
+ QVERIFY(subSubMenu1);
+ subSubMenu1->setCascade(cascade);
+ QCOMPARE(subSubMenu1->cascade(), cascade);
+ subSubMenu1->setOverlap(overlap);
+ QCOMPARE(subSubMenu1->overlap(), overlap);
+
+ // choose the main menu position so that there's room for the
+ // sub-menus to cascade to the left when mirrored
+ if (mirrored)
+ mainMenu->setX(window->width() - mainMenu->width());
+
+ mainMenu->open();
+ QVERIFY(mainMenu->isVisible());
+ QTRY_VERIFY(mainMenu->isOpened());
+ QVERIFY(!subMenu1->isVisible());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+
+ // open the sub-menu (never flips)
+ QQuickMenuItem *subMenu1Item = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(1));
+ QVERIFY(subMenu1Item);
+ QCOMPARE(subMenu1Item->subMenu(), subMenu1);
+ emit subMenu1Item->triggered();
+ QTRY_COMPARE(mainMenu->isVisible(), cascade);
+ QVERIFY(subMenu1->isVisible());
+ QTRY_VERIFY(subMenu1->isOpened());
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(!subSubMenu1->isVisible());
+
+ if (cascade) {
+ QCOMPARE(subMenu1->parentItem(), subMenu1Item);
+ // vertically aligned to the parent menu item
+ // We cast to float here because we want to use its larger tolerance for equality (because it has less precision than double).
+ FLOAT_EQ(subMenu1->popupItem()->y(), mainMenu->popupItem()->y() + subMenu1Item->y());
+ if (mirrored) {
+ // on the left of the parent menu
+ FLOAT_EQ(subMenu1->popupItem()->x(), mainMenu->popupItem()->x() - subMenu1->width() + overlap);
+ } else {
+ // on the right of the parent menu
+ FLOAT_EQ(subMenu1->popupItem()->x(), mainMenu->popupItem()->x() + mainMenu->width() - overlap);
+ }
+ } else {
+ QCOMPARE(subMenu1->parentItem(), mainMenu->parentItem());
+ // centered over the parent menu
+ FLOAT_EQ(subMenu1->popupItem()->x(), mainMenu->popupItem()->x() + (mainMenu->width() - subMenu1->width()) / 2);
+ FLOAT_EQ(subMenu1->popupItem()->y(), mainMenu->popupItem()->y() + (mainMenu->height() - subMenu1->height()) / 2);
+ }
+
+ // open the sub-sub-menu (can flip)
+ QQuickMenuItem *subSubMenu1Item = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(2));
+ QVERIFY(subSubMenu1Item);
+ QCOMPARE(subSubMenu1Item->subMenu(), subSubMenu1);
+ emit subSubMenu1Item->triggered();
+ QTRY_COMPARE(mainMenu->isVisible(), cascade);
+ QTRY_COMPARE(subMenu1->isVisible(), cascade);
+ QVERIFY(!subMenu2->isVisible());
+ QVERIFY(subSubMenu1->isVisible());
+ QTRY_VERIFY(subSubMenu1->isOpened());
+
+ if (cascade) {
+ QCOMPARE(subSubMenu1->parentItem(), subSubMenu1Item);
+ // vertically aligned to the parent menu item
+ FLOAT_EQ(subSubMenu1->popupItem()->y(), subMenu1->popupItem()->y() + subSubMenu1Item->y());
+ if (mirrored != flip) {
+ // on the left of the parent menu
+ FLOAT_EQ(subSubMenu1->popupItem()->x(), subMenu1->popupItem()->x() - subSubMenu1->width() + overlap);
+ } else {
+ // on the right of the parent menu
+ FLOAT_EQ(subSubMenu1->popupItem()->x(), subMenu1->popupItem()->x() + subMenu1->width() - overlap);
+ }
+ } else {
+ QCOMPARE(subSubMenu1->parentItem(), subMenu1->parentItem());
+ // centered over the parent menu
+ FLOAT_EQ(subSubMenu1->popupItem()->x(), subMenu1->popupItem()->x() + (subMenu1->width() - subSubMenu1->width()) / 2);
+ FLOAT_EQ(subSubMenu1->popupItem()->y(), subMenu1->popupItem()->y() + (subMenu1->height() - subSubMenu1->height()) / 2);
+ }
+}
+
+#undef FLOAT_EQ
+
+void tst_QQuickMenu::addRemoveSubMenus()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("subMenus.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *mainMenu = window->property("mainMenu").value<QQuickMenu *>();
+ QVERIFY(mainMenu);
+
+ QVERIFY(!mainMenu->menuAt(0));
+
+ QPointer<QQuickMenu> subMenu1 = window->property("subMenu1").value<QQuickMenu *>();
+ QVERIFY(!subMenu1.isNull());
+ QCOMPARE(mainMenu->menuAt(1), subMenu1.data());
+
+ QVERIFY(!mainMenu->menuAt(2));
+
+ QPointer<QQuickMenu> subMenu2 = window->property("subMenu2").value<QQuickMenu *>();
+ QVERIFY(!subMenu2.isNull());
+ QCOMPARE(mainMenu->menuAt(3), subMenu2.data());
+
+ QVERIFY(!mainMenu->menuAt(4));
+
+ QPointer<QQuickMenu> subSubMenu1 = window->property("subSubMenu1").value<QQuickMenu *>();
+ QVERIFY(!subSubMenu1.isNull());
+
+ // takeMenu(int) does not destroy the menu, but does destroy the respective item in the parent menu
+ QPointer<QQuickMenuItem> subSubMenu1Item = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(2));
+ QVERIFY(subSubMenu1Item);
+ QCOMPARE(subSubMenu1Item->subMenu(), subSubMenu1.data());
+ QCOMPARE(subMenu1->takeMenu(2), subSubMenu1.data());
+ QVERIFY(!subMenu1->itemAt(2));
+ QCoreApplication::sendPostedEvents(subSubMenu1, QEvent::DeferredDelete);
+ QVERIFY(!subSubMenu1.isNull());
+ QCoreApplication::sendPostedEvents(subSubMenu1Item, QEvent::DeferredDelete);
+ QVERIFY(subSubMenu1Item.isNull());
+
+ // takeMenu(int) does not destroy an item that doesn't present a menu
+ QPointer<QQuickMenuItem> subMenuItem1 = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(0));
+ QVERIFY(subMenuItem1);
+ QVERIFY(!subMenuItem1->subMenu());
+ QVERIFY(!subMenu1->takeMenu(0));
+ QCoreApplication::sendPostedEvents(subMenuItem1, QEvent::DeferredDelete);
+ QVERIFY(!subMenuItem1.isNull());
+
+ // addMenu(Menu) re-creates the respective item in the parent menu
+ subMenu1->addMenu(subSubMenu1);
+ subSubMenu1Item = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(2));
+ QVERIFY(!subSubMenu1Item.isNull());
+
+ // removeMenu(Menu) destroys both the menu and the respective item in the parent menu
+ subMenu1->removeMenu(subSubMenu1);
+ QVERIFY(!subMenu1->itemAt(2));
+ QCoreApplication::sendPostedEvents(subSubMenu1, QEvent::DeferredDelete);
+ QVERIFY(subSubMenu1.isNull());
+ QCoreApplication::sendPostedEvents(subSubMenu1Item, QEvent::DeferredDelete);
+ QVERIFY(subSubMenu1Item.isNull());
+}
+
+void tst_QQuickMenu::scrollable_data()
+{
+ QTest::addColumn<QString>("qmlFilePath");
+
+ QTest::addRow("Window") << QString::fromLatin1("windowScrollable.qml");
+ QTest::addRow("ApplicationWindow") << QString::fromLatin1("applicationWindowScrollable.qml");
+ QTest::addRow("WithPadding") << QString::fromLatin1("scrollableWithPadding.qml");
+}
+
+void tst_QQuickMenu::scrollable()
+{
+ QFETCH(QString, qmlFilePath);
+
+ QQuickControlsApplicationHelper helper(this, qmlFilePath);
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+#ifndef Q_OS_ANDROID
+ window->show();
+#else
+ window->showNormal();
+#endif
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ menu->open();
+ QVERIFY(menu->isVisible());
+
+ QQuickItem *contentItem = menu->contentItem();
+ QCOMPARE(contentItem->property("interactive").toBool(), true);
+}
+
+void tst_QQuickMenu::disableWhenTriggered_data()
+{
+ QTest::addColumn<int>("menuItemIndex");
+ QTest::addColumn<int>("subMenuItemIndex");
+
+ QTest::addRow("Action") << 0 << -1;
+ QTest::addRow("MenuItem with Action") << 1 << -1;
+ QTest::addRow("MenuItem with Action declared outside menu") << 2 << -1;
+ QTest::addRow("MenuItem with no Action") << 3 << -1;
+
+ QTest::addRow("Sub-Action") << 4 << 0;
+ QTest::addRow("Sub-MenuItem with Action declared inside") << 4 << 1;
+ QTest::addRow("Sub-MenuItem with Action declared outside menu") << 4 << 2;
+ QTest::addRow("Sub-MenuItem with no Action") << 4 << 3;
+}
+
+// Tests that the menu is dismissed when a menu item sets "enabled = false" in onTriggered().
+void tst_QQuickMenu::disableWhenTriggered()
+{
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QSKIP("Mouse hovering not functional on offscreen/minimal platforms");
+
+ QFETCH(int, menuItemIndex);
+ QFETCH(int, subMenuItemIndex);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("disableWhenTriggered.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->findChild<QQuickMenu*>("Menu");
+ QVERIFY(menu);
+
+ menu->open();
+ QVERIFY(menu->isVisible());
+ QTRY_VERIFY(menu->isOpened());
+
+ QPointer<QQuickMenuItem> menuItem = qobject_cast<QQuickMenuItem*>(menu->itemAt(menuItemIndex));
+ QVERIFY(menuItem);
+
+ if (subMenuItemIndex == -1) {
+ // Click a top-level menu item.
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ menuItem->mapToScene(QPointF(menuItem->width() / 2, menuItem->height() / 2)).toPoint());
+ QCOMPARE(menuItem->isEnabled(), false);
+ QTRY_VERIFY(!menu->isVisible());
+ } else {
+ // Click a sub-menu item.
+ QPointer<QQuickMenu> subMenu = menuItem->subMenu();
+ QVERIFY(subMenu);
+
+ QPointer<QQuickMenuItem> subMenuItem = qobject_cast<QQuickMenuItem*>(subMenu->itemAt(subMenuItemIndex));
+ QVERIFY(subMenuItem);
+
+ // First, open the sub-menu.
+#ifndef Q_OS_ANDROID
+ QTest::mouseMove(window, menuItem->mapToScene(QPoint(1, 1)).toPoint());
+#else
+ // On Android mouseHover does not open sub-menu, so just click on it
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ menuItem->mapToScene(QPointF(menuItem->width() / 2, menuItem->height() / 2)).toPoint());
+#endif
+
+ QTRY_VERIFY(subMenu->isVisible());
+#ifndef Q_OS_ANDROID
+ QVERIFY(menuItem->isHovered());
+ QTRY_VERIFY(subMenu->contentItem()->property("contentHeight").toReal() > 0.0);
+#endif
+
+ // Click the item.
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ subMenuItem->mapToScene(QPointF(subMenuItem->width() / 2, subMenuItem->height() / 2)).toPoint());
+ QCOMPARE(subMenuItem->isEnabled(), false);
+ QTRY_VERIFY(!menu->isVisible());
+ }
+}
+
+void tst_QQuickMenu::menuItemWidth_data()
+{
+ QTest::addColumn<bool>("mirrored");
+
+ QTest::newRow("non-mirrored") << false;
+ QTest::newRow("mirrored") << true;
+}
+
+void tst_QQuickMenu::menuItemWidth()
+{
+ QFETCH(bool, mirrored);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("menuItemWidths.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+ menu->open();
+ QTRY_VERIFY(menu->isOpened());
+ for (int i = 0; i < menu->count(); ++i)
+ QCOMPARE(menu->itemAt(i)->width(), menu->availableWidth());
+}
+
+void tst_QQuickMenu::menuItemWidthAfterMenuWidthChanged_data()
+{
+ QTest::addColumn<bool>("mirrored");
+
+ QTest::newRow("non-mirrored") << false;
+ QTest::newRow("mirrored") << true;
+}
+
+void tst_QQuickMenu::menuItemWidthAfterMenuWidthChanged()
+{
+ QFETCH(bool, mirrored);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("menuItemWidths.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+ menu->open();
+ QTRY_VERIFY(menu->isOpened());
+ for (int i = 0; i < menu->count(); ++i) {
+ // Check that the width of menu items is correct before we resize the menu.
+ const QQuickItem *item = menu->itemAt(i);
+ QVERIFY2(qFuzzyCompare(item->width(), menu->availableWidth()),
+ qPrintable(QString::fromLatin1("Expected width of %1 to be %2, but it's %3")
+ .arg(item->objectName()).arg(menu->availableWidth()).arg(item->width())));
+ }
+
+ menu->setWidth(menu->width() + 10);
+
+ // Check that the width of menu items is correct after we resize the menu.
+ for (int i = 0; i < menu->count(); ++i) {
+ // Check that the width of menu items is correct after we resize the menu.
+ const QQuickItem *item = menu->itemAt(i);
+ QVERIFY2(qFuzzyCompare(item->width(), menu->availableWidth()),
+ qPrintable(QString::fromLatin1("Expected width of %1 to be %2, but it's %3")
+ .arg(item->objectName()).arg(menu->availableWidth()).arg(item->width())));
+ }
+}
+
+void tst_QQuickMenu::menuItemWidthAfterImplicitWidthChanged_data()
+{
+ QTest::addColumn<bool>("mirrored");
+
+ QTest::newRow("non-mirrored") << false;
+ QTest::newRow("mirrored") << true;
+}
+
+void tst_QQuickMenu::menuItemWidthAfterImplicitWidthChanged()
+{
+ QFETCH(bool, mirrored);
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("menuItemWidths.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+ menu->open();
+ QTRY_VERIFY(menu->isOpened());
+ // Check that the width of the menu item is correct before we change its font size.
+ QQuickMenuItem *menuItem = qobject_cast<QQuickMenuItem*>(menu->itemAt(0));
+ QCOMPARE(menuItem->width(), menu->availableWidth());
+
+ // Add some text to increase the implicitWidth of the MenuItem.
+ const qreal oldImplicitWidth = menuItem->implicitWidth();
+ for (int i = 0; menuItem->implicitWidth() <= oldImplicitWidth; ++i) {
+ menuItem->setText(menuItem->text() + QLatin1String("---"));
+ if (i == 100)
+ QFAIL("Shouldn't need 100 iterations to increase MenuItem's implicitWidth; something is wrong here");
+ }
+
+ // Check that the width of the menu item is correct after we change its font size.
+ QCOMPARE(menuItem->width(), menu->availableWidth());
+}
+
+void tst_QQuickMenu::menuItemWidthAfterRetranslate()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("menuItemWidths.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
+ QVERIFY(menu);
+ menu->open();
+ QTRY_VERIFY(menu->isOpened());
+ for (int i = 0; i < menu->count(); ++i) {
+ // Check that the width of each menu item is correct before we retranslate.
+ const QQuickItem *item = menu->itemAt(i);
+ QVERIFY2(qFuzzyCompare(item->width(), menu->availableWidth()),
+ qPrintable(QString::fromLatin1("Expected width of %1 to be %2, but it's %3")
+ .arg(item->objectName()).arg(menu->availableWidth()).arg(item->width())));
+ }
+
+ // Call retranslate() and cause all bindings to be re-evaluated.
+ helper.engine.retranslate();
+
+ for (int i = 0; i < menu->count(); ++i) {
+ // Check that the width of each menu item is correct after we retranslate.
+ const QQuickItem *item = menu->itemAt(i);
+ QVERIFY2(qFuzzyCompare(item->width(), menu->availableWidth()),
+ qPrintable(QString::fromLatin1("Expected width of %1 to be %2, but it's %3")
+ .arg(item->objectName()).arg(menu->availableWidth()).arg(item->width())));
+ }
+}
+
+void tst_QQuickMenu::giveMenuItemFocusOnButtonPress()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QQuickControlsApplicationHelper helper(this, QLatin1String("giveMenuItemFocusOnButtonPress.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ // Press enter on the button to open the menu.
+ QQuickButton *menuButton = window->property("menuButton").value<QQuickButton*>();
+ QVERIFY(menuButton);
+ menuButton->forceActiveFocus();
+ QVERIFY(menuButton->hasActiveFocus());
+
+ QSignalSpy clickedSpy(window, SIGNAL(menuButtonClicked()));
+ QVERIFY(clickedSpy.isValid());
+
+ QTest::keyClick(window, Qt::Key_Return);
+ QCOMPARE(clickedSpy.count(), 1);
+
+ // The menu should still be open.
+ QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
+ QVERIFY(menu);
+ QTRY_VERIFY(menu->isOpened());
+}
+
+QTEST_QUICKCONTROLS_MAIN(tst_QQuickMenu)
+
+#include "tst_qquickmenu.moc"
diff --git a/tests/auto/quickcontrols2/qquickmenubar/BLACKLIST b/tests/auto/quickcontrols2/qquickmenubar/BLACKLIST
new file mode 100644
index 0000000000..44dea1552c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenubar/BLACKLIST
@@ -0,0 +1,7 @@
+# QTBUG-100254
+[mouse]
+android
+[keys]
+android
+[mnemonics]
+android
diff --git a/tests/auto/quickcontrols2/qquickmenubar/CMakeLists.txt b/tests/auto/quickcontrols2/qquickmenubar/CMakeLists.txt
new file mode 100644
index 0000000000..88735ad57f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenubar/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from qquickmenubar.pro.
+
+#####################################################################
+## tst_qquickmenubar Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickmenubar
+ SOURCES
+ tst_qquickmenubar.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:qquickmenubar.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickmenubar CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickmenubar CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickmenubar/data/checkHighlightWhenDismissed.qml b/tests/auto/quickcontrols2/qquickmenubar/data/checkHighlightWhenDismissed.qml
new file mode 100644
index 0000000000..14ee692eda
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenubar/data/checkHighlightWhenDismissed.qml
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 300
+ height: 300
+ visible: true
+ MenuBar {
+ id: mb
+ objectName: "menuBar"
+ width: parent.width
+ Menu {
+ title: "StaticMenu"
+ MenuItem {
+ text: "Cut"
+ }
+ MenuItem {
+ text: "Copy"
+ }
+ MenuItem {
+ text: "Paste"
+ }
+ }
+ }
+ Component {
+ id: cmp
+ Menu {
+ title: "DynamicMenu"
+ MenuItem {
+ text: "Cut"
+ }
+ MenuItem {
+ text: "Copy"
+ }
+ MenuItem {
+ text: "Paste"
+ }
+ }
+ }
+ Component.onCompleted: {
+ mb.addMenu(cmp.createObject(mb))
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenubar/data/delegateFromSeparateComponent.qml b/tests/auto/quickcontrols2/qquickmenubar/data/delegateFromSeparateComponent.qml
new file mode 100644
index 0000000000..760151901f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenubar/data/delegateFromSeparateComponent.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 800
+ height: 800
+
+ Component {
+ id: menuBarItemComponent
+
+ MenuBarItem {
+ contentItem: Text {
+ text: parent.text
+ color: "blue"
+ }
+ background: Rectangle {
+ color: "#00ff00"
+ }
+ }
+ }
+
+ menuBar: MenuBar {
+ delegate: menuBarItemComponent
+
+ Menu {
+ title: "Menu"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenubar/data/empty.qml b/tests/auto/quickcontrols2/qquickmenubar/data/empty.qml
new file mode 100644
index 0000000000..6cb3c92299
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenubar/data/empty.qml
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+MenuBar { }
diff --git a/tests/auto/quickcontrols2/qquickmenubar/data/menubar.qml b/tests/auto/quickcontrols2/qquickmenubar/data/menubar.qml
new file mode 100644
index 0000000000..1436e66d0b
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenubar/data/menubar.qml
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ readonly property Button oopsButton: oopsButton
+
+ width: 400
+ height: 400
+ visible: true
+
+ header: MenuBar {
+ MenuBarItem {
+ menu: Menu {
+ title: "&File"
+ MenuItem { text: "&Open..." }
+ MenuItem { text: "&Save" }
+ MenuItem { text: "Save &As..." }
+ MenuSeparator { }
+ MenuItem { text: "&Quit" }
+ }
+ }
+ MenuBarItem {
+ menu: Menu {
+ title: "&Edit"
+ MenuItem { text: "&Cut" }
+ MenuItem { text: "&Copy" }
+ MenuItem { text: "&Paste" }
+ }
+ }
+ MenuBarItem {
+ menu: Menu {
+ title: "&View"
+ Menu {
+ title: "&Alignment"
+ Menu {
+ title: "&Horizontal"
+ MenuItem { text: "&Left" }
+ MenuItem { text: "&Center" }
+ MenuItem { text: "&Right" }
+ }
+ Menu {
+ title: "&Vertical"
+ MenuItem { text: "&Top" }
+ MenuItem { text: "&Center" }
+ MenuItem { text: "&Bottom" }
+ }
+ }
+ }
+ }
+
+ MenuBarItem {
+ menu: Menu {
+ title: "&Help"
+ MenuItem { text: "&About" }
+ }
+ }
+ }
+
+ Button {
+ id: oopsButton
+ text: "&Oops"
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickmenubar/tst_qquickmenubar.cpp b/tests/auto/quickcontrols2/qquickmenubar/tst_qquickmenubar.cpp
new file mode 100644
index 0000000000..20d6ad019f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickmenubar/tst_qquickmenubar.cpp
@@ -0,0 +1,691 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/qpa/qplatformintegration.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtTest>
+#include <QtQml>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+#include <QtQuickTemplates2/private/qquickmenu_p.h>
+#include <QtQuickTemplates2/private/qquickmenubar_p.h>
+#include <QtQuickTemplates2/private/qquickmenubaritem_p.h>
+#include <QtQuickTemplates2/private/qquickmenuitem_p.h>
+#include <QtQuickControlsTestUtils/private/qtest_quickcontrols_p.h>
+
+using namespace QQuickVisualTestUtils;
+
+class tst_qquickmenubar : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_qquickmenubar();
+
+private slots:
+ void delegate();
+ void mouse();
+ void keys();
+ void mnemonics();
+ void addRemove();
+ void checkHighlightWhenMenuDismissed();
+
+private:
+ static bool hasWindowActivation();
+};
+
+tst_qquickmenubar::tst_qquickmenubar()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+bool tst_qquickmenubar::hasWindowActivation()
+{
+ return (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation));
+}
+
+void tst_qquickmenubar::delegate()
+{
+ QQmlApplicationEngine engine(testFileUrl("empty.qml"));
+ QScopedPointer<QQuickMenuBar> menuBar(qobject_cast<QQuickMenuBar *>(engine.rootObjects().value(0)));
+ QVERIFY(menuBar);
+
+ QQmlComponent *delegate = menuBar->delegate();
+ QVERIFY(delegate);
+
+ QScopedPointer<QQuickMenuBarItem> item(qobject_cast<QQuickMenuBarItem *>(delegate->create()));
+ QVERIFY(item);
+}
+
+void tst_qquickmenubar::mouse()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QSKIP("Mouse highlight not functional on offscreen/minimal platforms");
+
+ QQmlApplicationEngine engine(testFileUrl("menubar.qml"));
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(engine.rootObjects().value(0)));
+ QVERIFY(window);
+
+ centerOnScreen(window.data());
+ moveMouseAway(window.data());
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ QQuickMenuBar *menuBar = window->property("header").value<QQuickMenuBar *>();
+ QVERIFY(menuBar);
+
+ QQuickMenu *fileMenuBarMenu = menuBar->menuAt(0);
+ QQuickMenu *editMenuBarMenu = menuBar->menuAt(1);
+ QQuickMenu *viewMenuBarMenu = menuBar->menuAt(2);
+ QQuickMenu *helpMenuBarMenu = menuBar->menuAt(3);
+ QVERIFY(fileMenuBarMenu && editMenuBarMenu && viewMenuBarMenu && helpMenuBarMenu);
+
+ QQuickMenuBarItem *fileMenuBarItem = qobject_cast<QQuickMenuBarItem *>(fileMenuBarMenu->parentItem());
+ QQuickMenuBarItem *editMenuBarItem = qobject_cast<QQuickMenuBarItem *>(editMenuBarMenu->parentItem());
+ QQuickMenuBarItem *viewMenuBarItem = qobject_cast<QQuickMenuBarItem *>(viewMenuBarMenu->parentItem());
+ QQuickMenuBarItem *helpMenuBarItem = qobject_cast<QQuickMenuBarItem *>(helpMenuBarMenu->parentItem());
+ QVERIFY(fileMenuBarItem && editMenuBarItem && viewMenuBarItem && helpMenuBarItem);
+
+ // highlight a menubar item
+ QTest::mouseMove(window.data(), fileMenuBarItem->mapToScene(QPointF(fileMenuBarItem->width() / 2, fileMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(fileMenuBarItem->isHighlighted());
+ QVERIFY(!fileMenuBarMenu->isVisible());
+
+ // highlight another menubar item
+ QTest::mouseMove(window.data(), editMenuBarItem->mapToScene(QPointF(editMenuBarItem->width() / 2, editMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(!fileMenuBarItem->isHighlighted());
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(!fileMenuBarMenu->isVisible());
+ QVERIFY(!editMenuBarMenu->isVisible());
+
+ // trigger a menubar item to open a menu
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, editMenuBarItem->mapToScene(QPointF(editMenuBarItem->width() / 2, editMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(editMenuBarMenu->isVisible());
+ QTRY_VERIFY(editMenuBarMenu->isOpened());
+
+ // re-trigger a menubar item to hide the menu
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, editMenuBarItem->mapToScene(QPointF(editMenuBarItem->width() / 2, editMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(editMenuBarItem->hasActiveFocus());
+ QTRY_VERIFY(!editMenuBarMenu->isVisible());
+
+ // re-trigger a menubar item to show the menu again
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, editMenuBarItem->mapToScene(QPointF(editMenuBarItem->width() / 2, editMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(editMenuBarMenu->isVisible());
+ QTRY_VERIFY(editMenuBarMenu->isOpened());
+
+ // highlight another menubar item to open another menu
+ QTest::mouseMove(window.data(), helpMenuBarItem->mapToScene(QPointF(helpMenuBarItem->width() / 2, helpMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(!fileMenuBarItem->isHighlighted());
+ QVERIFY(!editMenuBarItem->isHighlighted());
+ QVERIFY(!viewMenuBarItem->isHighlighted());
+ QVERIFY(helpMenuBarItem->isHighlighted());
+ QVERIFY(!fileMenuBarMenu->isVisible());
+ QVERIFY(!viewMenuBarMenu->isVisible());
+ QVERIFY(helpMenuBarMenu->isVisible());
+ QTRY_VERIFY(!editMenuBarMenu->isVisible());
+ QTRY_VERIFY(helpMenuBarMenu->isOpened());
+
+ // trigger a menu item to close the menu
+ QQuickMenuItem *aboutMenuItem = qobject_cast<QQuickMenuItem *>(helpMenuBarMenu->itemAt(0));
+ QVERIFY(aboutMenuItem);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, aboutMenuItem->mapToScene(QPointF(aboutMenuItem->width() / 2, aboutMenuItem->height() / 2)).toPoint());
+ QVERIFY(!helpMenuBarItem->isHighlighted());
+ QTRY_VERIFY(!helpMenuBarMenu->isVisible());
+
+ // highlight a menubar item
+ QTest::mouseMove(window.data(), editMenuBarItem->mapToScene(QPointF(editMenuBarItem->width() / 2, editMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(!helpMenuBarItem->isHighlighted());
+ QVERIFY(!editMenuBarMenu->isVisible());
+ QVERIFY(!helpMenuBarMenu->isVisible());
+
+ // trigger a menubar item to open a menu
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, viewMenuBarItem->mapToScene(QPointF(viewMenuBarItem->width() / 2, viewMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(!editMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QTRY_VERIFY(viewMenuBarMenu->isOpened());
+
+ // trigger a menu item to open a sub-menu
+ QQuickMenuItem *alignmentSubMenuItem = qobject_cast<QQuickMenuItem *>(viewMenuBarMenu->itemAt(0));
+ QVERIFY(alignmentSubMenuItem);
+ QQuickMenu *alignmentSubMenu = alignmentSubMenuItem->subMenu();
+ QVERIFY(alignmentSubMenu);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, alignmentSubMenuItem->mapToScene(QPointF(alignmentSubMenuItem->width() / 2, alignmentSubMenuItem->height() / 2)).toPoint());
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QVERIFY(alignmentSubMenu->isVisible());
+ QTRY_VERIFY(alignmentSubMenu->isOpened());
+
+ // trigger a menu item to open a sub-sub-menu
+ QQuickMenuItem *verticalSubMenuItem = qobject_cast<QQuickMenuItem *>(alignmentSubMenu->itemAt(1));
+ QVERIFY(verticalSubMenuItem);
+ QQuickMenu *verticalSubMenu = verticalSubMenuItem->subMenu();
+ QVERIFY(verticalSubMenu);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, verticalSubMenuItem->mapToScene(QPointF(verticalSubMenuItem->width() / 2, verticalSubMenuItem->height() / 2)).toPoint());
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QVERIFY(alignmentSubMenu->isVisible());
+ QVERIFY(verticalSubMenu->isVisible());
+ QTRY_VERIFY(verticalSubMenu->isOpened());
+
+ // trigger a menu item to close the whole chain of menus
+ QQuickMenuItem *centerMenuItem = qobject_cast<QQuickMenuItem *>(verticalSubMenu->itemAt(1));
+ QVERIFY(centerMenuItem);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, centerMenuItem->mapToScene(QPointF(centerMenuItem->width() / 2, centerMenuItem->height() / 2)).toPoint());
+ QVERIFY(!viewMenuBarItem->isHighlighted());
+ QTRY_VERIFY(!viewMenuBarMenu->isVisible());
+ QTRY_VERIFY(!alignmentSubMenu->isVisible());
+ QTRY_VERIFY(!verticalSubMenu->isVisible());
+
+ // re-highlight the same menubar item
+ QTest::mouseMove(window.data(), viewMenuBarItem->mapToScene(QPointF(viewMenuBarItem->width() / 2, viewMenuBarItem->height() / 2)).toPoint());
+ QVERIFY(viewMenuBarItem->isHighlighted());
+
+ // re-open the chain of menus
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, viewMenuBarItem->mapToScene(QPointF(viewMenuBarItem->width() / 2, viewMenuBarItem->height() / 2)).toPoint());
+ QTRY_VERIFY(viewMenuBarMenu->isOpened());
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, alignmentSubMenuItem->mapToScene(QPointF(alignmentSubMenuItem->width() / 2, alignmentSubMenuItem->height() / 2)).toPoint());
+ QTRY_VERIFY(alignmentSubMenu->isOpened());
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, verticalSubMenuItem->mapToScene(QPointF(verticalSubMenuItem->width() / 2, verticalSubMenuItem->height() / 2)).toPoint());
+ QTRY_VERIFY(verticalSubMenu->isOpened());
+
+ // click outside to close the whole chain of menus
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - 1, window->height() - 1));
+ QVERIFY(!viewMenuBarItem->isHighlighted());
+ QTRY_VERIFY(!viewMenuBarMenu->isVisible());
+ QTRY_VERIFY(!alignmentSubMenu->isVisible());
+ QTRY_VERIFY(!verticalSubMenu->isVisible());
+}
+
+void tst_qquickmenubar::keys()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QQmlApplicationEngine engine(testFileUrl("menubar.qml"));
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(engine.rootObjects().value(0)));
+ QVERIFY(window);
+
+ centerOnScreen(window.data());
+ moveMouseAway(window.data());
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ QQuickMenuBar *menuBar = window->property("header").value<QQuickMenuBar *>();
+ QVERIFY(menuBar);
+
+ QQuickMenu *fileMenuBarMenu = menuBar->menuAt(0);
+ QQuickMenu *editMenuBarMenu = menuBar->menuAt(1);
+ QQuickMenu *viewMenuBarMenu = menuBar->menuAt(2);
+ QQuickMenu *helpMenuBarMenu = menuBar->menuAt(3);
+ QVERIFY(fileMenuBarMenu && editMenuBarMenu && viewMenuBarMenu && helpMenuBarMenu);
+
+ QQuickMenuBarItem *fileMenuBarItem = qobject_cast<QQuickMenuBarItem *>(fileMenuBarMenu->parentItem());
+ QQuickMenuBarItem *editMenuBarItem = qobject_cast<QQuickMenuBarItem *>(editMenuBarMenu->parentItem());
+ QQuickMenuBarItem *viewMenuBarItem = qobject_cast<QQuickMenuBarItem *>(viewMenuBarMenu->parentItem());
+ QQuickMenuBarItem *helpMenuBarItem = qobject_cast<QQuickMenuBarItem *>(helpMenuBarMenu->parentItem());
+ QVERIFY(fileMenuBarItem && editMenuBarItem && viewMenuBarItem && helpMenuBarItem);
+
+ // trigger a menubar item to open a menu
+ editMenuBarItem->forceActiveFocus();
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(editMenuBarMenu->isVisible());
+ QTRY_VERIFY(editMenuBarMenu->isOpened());
+ QVERIFY(editMenuBarMenu->hasActiveFocus());
+
+ // navigate down to the menu
+ QQuickMenuItem *cutMenuItem = qobject_cast<QQuickMenuItem *>(editMenuBarMenu->itemAt(0));
+ QVERIFY(cutMenuItem);
+ QVERIFY(!cutMenuItem->isHighlighted());
+ QVERIFY(!cutMenuItem->hasActiveFocus());
+ QTest::keyClick(window.data(), Qt::Key_Down);
+ QVERIFY(cutMenuItem->isHighlighted());
+ QVERIFY(cutMenuItem->hasActiveFocus());
+
+ // navigate up, back to the menubar
+ QTest::keyClick(window.data(), Qt::Key_Up);
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(editMenuBarItem->hasActiveFocus());
+ QTRY_VERIFY(!editMenuBarMenu->isVisible());
+ QVERIFY(!cutMenuItem->isHighlighted());
+ QVERIFY(!cutMenuItem->hasActiveFocus());
+
+ // navigate down to re-open the menu
+ QTest::keyClick(window.data(), Qt::Key_Down);
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(!editMenuBarItem->hasActiveFocus());
+ QVERIFY(editMenuBarMenu->isVisible());
+ QTRY_VERIFY(editMenuBarMenu->isOpened());
+ QVERIFY(editMenuBarMenu->hasActiveFocus());
+ QVERIFY(cutMenuItem->isHighlighted());
+ QVERIFY(cutMenuItem->hasActiveFocus());
+
+ // navigate left in popup mode (menu open)
+ QTest::keyClick(window.data(), Qt::Key_Left);
+ QVERIFY(fileMenuBarItem->isHighlighted());
+ QVERIFY(!editMenuBarItem->isHighlighted());
+ QVERIFY(fileMenuBarMenu->isVisible());
+ QTRY_VERIFY(fileMenuBarMenu->isOpened());
+ QTRY_VERIFY(!editMenuBarMenu->isVisible());
+
+ // navigate left in popup mode (wrap)
+ QTest::keyClick(window.data(), Qt::Key_Left);
+ QVERIFY(helpMenuBarItem->isHighlighted());
+ QVERIFY(!fileMenuBarItem->isHighlighted());
+ QVERIFY(helpMenuBarMenu->isVisible());
+ QTRY_VERIFY(helpMenuBarMenu->isOpened());
+ QTRY_VERIFY(!fileMenuBarMenu->isVisible());
+
+ // navigate up to close the menu
+ QTest::keyClick(window.data(), Qt::Key_Up);
+ QVERIFY(helpMenuBarItem->isHighlighted());
+ QTRY_VERIFY(!helpMenuBarMenu->isVisible());
+
+ // navigate right in non-popup mode (wrap)
+ QTest::keyClick(window.data(), Qt::Key_Right);
+ QVERIFY(fileMenuBarItem->isHighlighted());
+ QVERIFY(!helpMenuBarItem->isHighlighted());
+ QVERIFY(!fileMenuBarMenu->isVisible());
+ QVERIFY(!helpMenuBarMenu->isVisible());
+
+ // navigate right in non-popup mode (menu closed)
+ QTest::keyClick(window.data(), Qt::Key_Right);
+ QVERIFY(!fileMenuBarItem->isHighlighted());
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(!fileMenuBarMenu->isVisible());
+ QVERIFY(!editMenuBarMenu->isVisible());
+
+ // open a menu
+ viewMenuBarItem->forceActiveFocus();
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QVERIFY(viewMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QTRY_VERIFY(viewMenuBarMenu->isOpened());
+ QVERIFY(!viewMenuBarItem->hasActiveFocus());
+ QVERIFY(viewMenuBarMenu->hasActiveFocus());
+
+ // open a sub-menu
+ QQuickMenuItem *alignmentSubMenuItem = qobject_cast<QQuickMenuItem *>(viewMenuBarMenu->itemAt(0));
+ QVERIFY(alignmentSubMenuItem);
+ QQuickMenu *alignmentSubMenu = alignmentSubMenuItem->subMenu();
+ QVERIFY(alignmentSubMenu);
+ QTest::keyClick(window.data(), Qt::Key_Down);
+ QVERIFY(alignmentSubMenuItem->isHighlighted());
+ QVERIFY(!alignmentSubMenu->isVisible());
+ QTest::keyClick(window.data(), Qt::Key_Right);
+ QVERIFY(alignmentSubMenu->isVisible());
+ QTRY_VERIFY(alignmentSubMenu->isOpened());
+
+ // open a sub-sub-menu
+ QQuickMenuItem *horizontalSubMenuItem = qobject_cast<QQuickMenuItem *>(alignmentSubMenu->itemAt(0));
+ QVERIFY(horizontalSubMenuItem);
+ QVERIFY(horizontalSubMenuItem->isHighlighted());
+ QQuickMenu *horizontalSubMenu = horizontalSubMenuItem->subMenu();
+ QVERIFY(horizontalSubMenu);
+ QTest::keyClick(window.data(), Qt::Key_Right);
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QVERIFY(alignmentSubMenu->isVisible());
+ QVERIFY(horizontalSubMenu->isVisible());
+ QTRY_VERIFY(horizontalSubMenu->isOpened());
+
+ // navigate left to close a sub-menu
+ QTest::keyClick(window.data(), Qt::Key_Left);
+ QTRY_VERIFY(!horizontalSubMenu->isVisible());
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QVERIFY(alignmentSubMenu->isVisible());
+
+ // navigate right to re-open the sub-menu
+ QTest::keyClick(window.data(), Qt::Key_Right);
+ QVERIFY(horizontalSubMenuItem->isHighlighted());
+ QVERIFY(horizontalSubMenu->isVisible());
+ QTRY_VERIFY(horizontalSubMenu->isOpened());
+
+ // navigate right to the next menubar menu
+ QTest::keyClick(window.data(), Qt::Key_Right);
+ QVERIFY(!viewMenuBarItem->isHighlighted());
+ QVERIFY(helpMenuBarItem->isHighlighted());
+ QVERIFY(helpMenuBarMenu->isVisible());
+ QTRY_VERIFY(!viewMenuBarMenu->isVisible());
+ QTRY_VERIFY(!alignmentSubMenu->isVisible());
+ QTRY_VERIFY(!horizontalSubMenu->isVisible());
+ QTRY_VERIFY(helpMenuBarMenu->isOpened());
+
+ // navigate back
+ QTest::keyClick(window.data(), Qt::Key_Left);
+ QVERIFY(!helpMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QTRY_VERIFY(!helpMenuBarMenu->isVisible());
+ QTRY_VERIFY(viewMenuBarMenu->isOpened());
+
+ // re-open the chain of menus
+ QTest::keyClick(window.data(), Qt::Key_Down);
+ QVERIFY(alignmentSubMenuItem->isHighlighted());
+ QTest::keyClick(window.data(), Qt::Key_Right);
+ QTRY_VERIFY(alignmentSubMenu->isOpened());
+ QTest::keyClick(window.data(), Qt::Key_Right);
+ QTRY_VERIFY(horizontalSubMenu->isOpened());
+
+ // repeat escape to close the whole chain of menus one by one
+ QTest::keyClick(window.data(), Qt::Key_Escape);
+ QTRY_VERIFY(!horizontalSubMenu->isVisible());
+ QVERIFY(viewMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QVERIFY(alignmentSubMenu->isVisible());
+
+ QTest::keyClick(window.data(), Qt::Key_Escape);
+ QTRY_VERIFY(!alignmentSubMenu->isVisible());
+ QVERIFY(viewMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarMenu->isVisible());
+
+ QTest::keyClick(window.data(), Qt::Key_Escape);
+ QVERIFY(!viewMenuBarItem->isHighlighted());
+ QTRY_VERIFY(!viewMenuBarMenu->isVisible());
+}
+
+void tst_qquickmenubar::mnemonics()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+#ifdef Q_OS_MACOS
+ QSKIP("Mnemonics are not used on macOS");
+#endif
+
+ QQmlApplicationEngine engine(testFileUrl("menubar.qml"));
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(engine.rootObjects().value(0)));
+ QVERIFY(window);
+
+ centerOnScreen(window.data());
+ moveMouseAway(window.data());
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ MnemonicKeySimulator keySim(window.data());
+
+ QQuickMenuBar *menuBar = window->property("header").value<QQuickMenuBar *>();
+ QVERIFY(menuBar);
+
+ QQuickMenu *fileMenuBarMenu = menuBar->menuAt(0);
+ QQuickMenu *editMenuBarMenu = menuBar->menuAt(1);
+ QQuickMenu *viewMenuBarMenu = menuBar->menuAt(2);
+ QQuickMenu *helpMenuBarMenu = menuBar->menuAt(3);
+ QVERIFY(fileMenuBarMenu && editMenuBarMenu && viewMenuBarMenu && helpMenuBarMenu);
+
+ QQuickMenuBarItem *fileMenuBarItem = qobject_cast<QQuickMenuBarItem *>(fileMenuBarMenu->parentItem());
+ QQuickMenuBarItem *editMenuBarItem = qobject_cast<QQuickMenuBarItem *>(editMenuBarMenu->parentItem());
+ QQuickMenuBarItem *viewMenuBarItem = qobject_cast<QQuickMenuBarItem *>(viewMenuBarMenu->parentItem());
+ QQuickMenuBarItem *helpMenuBarItem = qobject_cast<QQuickMenuBarItem *>(helpMenuBarMenu->parentItem());
+ QVERIFY(fileMenuBarItem && editMenuBarItem && viewMenuBarItem && helpMenuBarItem);
+
+ QQuickButton *oopsButton = window->property("oopsButton").value<QQuickButton *>();
+ QVERIFY(oopsButton);
+ QSignalSpy oopsButtonSpy(oopsButton, &QQuickButton::clicked);
+ QVERIFY(oopsButtonSpy.isValid());
+
+ // trigger a menubar item to open a menu
+ keySim.press(Qt::Key_Alt);
+ keySim.click(Qt::Key_E); // "&Edit"
+ keySim.release(Qt::Key_Alt);
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(!editMenuBarItem->hasActiveFocus());
+ QVERIFY(editMenuBarMenu->isVisible());
+ QTRY_VERIFY(editMenuBarMenu->isOpened());
+ QVERIFY(editMenuBarMenu->hasActiveFocus());
+
+ // press Alt to hide the menu
+ keySim.click(Qt::Key_Alt);
+ QVERIFY(!editMenuBarItem->isHighlighted());
+ QVERIFY(!editMenuBarItem->hasActiveFocus());
+ QVERIFY(!editMenuBarMenu->hasActiveFocus());
+ QTRY_VERIFY(!editMenuBarMenu->isVisible());
+
+ // re-trigger a menubar item to show the menu again
+ keySim.press(Qt::Key_Alt);
+ keySim.click(Qt::Key_E); // "&Edit"
+ keySim.release(Qt::Key_Alt);
+ QVERIFY(editMenuBarItem->isHighlighted());
+ QVERIFY(editMenuBarMenu->isVisible());
+ QTRY_VERIFY(editMenuBarMenu->isOpened());
+ QVERIFY(editMenuBarMenu->hasActiveFocus());
+ QVERIFY(!editMenuBarItem->hasActiveFocus());
+
+ // trigger another menubar item to open another menu, leave Alt pressed
+ keySim.press(Qt::Key_Alt);
+ QTRY_VERIFY(!editMenuBarMenu->isVisible());
+ keySim.click(Qt::Key_H); // "&Help"
+ QVERIFY(!editMenuBarItem->isHighlighted());
+ QVERIFY(helpMenuBarItem->isHighlighted());
+ QVERIFY(!viewMenuBarMenu->isVisible());
+ QVERIFY(helpMenuBarMenu->isVisible());
+ QTRY_VERIFY(helpMenuBarMenu->isOpened());
+
+ // trigger a menu item to close the menu
+ keySim.click(Qt::Key_A); // "&About"
+ keySim.release(Qt::Key_Alt);
+ QVERIFY(!helpMenuBarItem->isHighlighted());
+ QTRY_VERIFY(!helpMenuBarMenu->isVisible());
+
+ // trigger a menubar item to open a menu, leave Alt pressed
+ keySim.press(Qt::Key_Alt);
+ keySim.click(Qt::Key_V); // "&View"
+ QVERIFY(!editMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarItem->isHighlighted());
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QTRY_VERIFY(viewMenuBarMenu->isOpened());
+
+ // trigger a menu item to open a sub-menu, leave Alt pressed
+ QQuickMenuItem *alignmentSubMenuItem = qobject_cast<QQuickMenuItem *>(viewMenuBarMenu->itemAt(0));
+ QVERIFY(alignmentSubMenuItem);
+ QQuickMenu *alignmentSubMenu = alignmentSubMenuItem->subMenu();
+ QVERIFY(alignmentSubMenu);
+ keySim.click(Qt::Key_A); // "&Alignment"
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QVERIFY(alignmentSubMenu->isVisible());
+ QTRY_VERIFY(alignmentSubMenu->isOpened());
+
+ // trigger a menu item to open a sub-sub-menu, leave Alt pressed
+ QQuickMenuItem *verticalSubMenuItem = qobject_cast<QQuickMenuItem *>(alignmentSubMenu->itemAt(1));
+ QVERIFY(verticalSubMenuItem);
+ QQuickMenu *verticalSubMenu = verticalSubMenuItem->subMenu();
+ QVERIFY(verticalSubMenu);
+ keySim.click(Qt::Key_V); // "&Vertical"
+ QVERIFY(viewMenuBarMenu->isVisible());
+ QVERIFY(alignmentSubMenu->isVisible());
+ QVERIFY(verticalSubMenu->isVisible());
+ QTRY_VERIFY(verticalSubMenu->isOpened());
+
+ // trigger a menu item to close the whole chain of menus
+ keySim.click(Qt::Key_C); // "&Center"
+ keySim.release(Qt::Key_Alt);
+ QVERIFY(!viewMenuBarItem->isHighlighted());
+ QTRY_VERIFY(!viewMenuBarMenu->isVisible());
+ QTRY_VERIFY(!alignmentSubMenu->isVisible());
+ QTRY_VERIFY(!verticalSubMenu->isVisible());
+
+ // trigger a menubar item to open a menu, leave Alt pressed
+ keySim.press(Qt::Key_Alt);
+ keySim.click(Qt::Key_F); // "&File"
+ QVERIFY(fileMenuBarItem->isHighlighted());
+ QVERIFY(fileMenuBarMenu->isVisible());
+ QTRY_VERIFY(fileMenuBarMenu->isOpened());
+ QVERIFY(fileMenuBarMenu->hasActiveFocus());
+
+ // trigger a menu item to close the menu, which shouldn't trigger a button
+ // action behind the menu (QTBUG-86276)
+ QCOMPARE(oopsButtonSpy.count(), 0);
+ keySim.click(Qt::Key_O); // "&Open..."
+ keySim.release(Qt::Key_Alt);
+ QVERIFY(!fileMenuBarItem->isHighlighted());
+ QVERIFY(!fileMenuBarMenu->isOpened());
+ QTRY_VERIFY(!fileMenuBarMenu->isVisible());
+ QCOMPARE(oopsButtonSpy.count(), 0);
+
+ // trigger a button action while menu is closed
+ keySim.press(Qt::Key_Alt);
+ keySim.click(Qt::Key_O); // "&Oops"
+ keySim.release(Qt::Key_Alt);
+ QCOMPARE(oopsButtonSpy.count(), 1);
+}
+
+void tst_qquickmenubar::addRemove()
+{
+ QQmlApplicationEngine engine(testFileUrl("empty.qml"));
+
+ QScopedPointer<QQuickMenuBar> menuBar(qobject_cast<QQuickMenuBar *>(engine.rootObjects().value(0)));
+ QVERIFY(menuBar);
+
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick.Controls; Menu { }", QUrl());
+
+ QPointer<QQuickMenu> menu1(qobject_cast<QQuickMenu *>(component.create()));
+ QVERIFY(!menu1.isNull());
+ menuBar->addMenu(menu1.data());
+ QCOMPARE(menuBar->count(), 1);
+ QCOMPARE(menuBar->menuAt(0), menu1.data());
+
+ QPointer<QQuickMenuBarItem> menuBarItem1(qobject_cast<QQuickMenuBarItem *>(menuBar->itemAt(0)));
+ QVERIFY(menuBarItem1);
+ QCOMPARE(menuBarItem1->menu(), menu1.data());
+ QCOMPARE(menuBar->itemAt(0), menuBarItem1.data());
+
+ QScopedPointer<QQuickMenu> menu2(qobject_cast<QQuickMenu *>(component.create()));
+ QVERIFY(!menu2.isNull());
+ menuBar->insertMenu(0, menu2.data());
+ QCOMPARE(menuBar->count(), 2);
+ QCOMPARE(menuBar->menuAt(0), menu2.data());
+ QCOMPARE(menuBar->menuAt(1), menu1.data());
+
+ QPointer<QQuickMenuBarItem> menuBarItem2(qobject_cast<QQuickMenuBarItem *>(menuBar->itemAt(0)));
+ QVERIFY(menuBarItem2);
+ QCOMPARE(menuBarItem2->menu(), menu2.data());
+ QCOMPARE(menuBar->itemAt(0), menuBarItem2.data());
+ QCOMPARE(menuBar->itemAt(1), menuBarItem1.data());
+
+ // takeMenu(int) does not destroy the menu, but does destroy the respective item in the menubar
+ QCOMPARE(menuBar->takeMenu(1), menu1.data());
+ QCOMPARE(menuBar->count(), 1);
+ QVERIFY(!menuBar->menuAt(1));
+ QVERIFY(!menuBar->itemAt(1));
+ QCoreApplication::sendPostedEvents(menu1.data(), QEvent::DeferredDelete);
+ QVERIFY(!menu1.isNull());
+ QCoreApplication::sendPostedEvents(menuBarItem1, QEvent::DeferredDelete);
+ QVERIFY(menuBarItem1.isNull());
+
+ // addMenu(Menu) re-creates the respective item in the menubar
+ menuBar->addMenu(menu1.data());
+ QCOMPARE(menuBar->count(), 2);
+ menuBarItem1 = qobject_cast<QQuickMenuBarItem *>(menuBar->itemAt(1));
+ QVERIFY(!menuBarItem1.isNull());
+
+ // removeMenu(Menu) destroys both the menu and the respective item in the menubar
+ menuBar->removeMenu(menu1.data());
+ QCOMPARE(menuBar->count(), 1);
+ QVERIFY(!menuBar->itemAt(1));
+ QCoreApplication::sendPostedEvents(menu1.data(), QEvent::DeferredDelete);
+ QVERIFY(menu1.isNull());
+ QCoreApplication::sendPostedEvents(menuBarItem1, QEvent::DeferredDelete);
+ QVERIFY(menuBarItem1.isNull());
+}
+
+void tst_qquickmenubar::checkHighlightWhenMenuDismissed()
+{
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QSKIP("Mouse highlight not functional on offscreen/minimal platforms");
+
+ QQmlApplicationEngine engine(testFileUrl("checkHighlightWhenDismissed.qml"));
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(engine.rootObjects().value(0)));
+ QVERIFY(window);
+
+ centerOnScreen(window.data());
+ moveMouseAway(window.data());
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QQuickMenuBar *menuBar = window->findChild<QQuickMenuBar *>("menuBar");
+ QVERIFY(menuBar);
+
+ QQuickMenu *staticMenu = menuBar->menuAt(0);
+ QQuickMenu *dynamicMenu = menuBar->menuAt(1);
+ QVERIFY(staticMenu && dynamicMenu);
+ QQuickMenuBarItem *staticMenuBarItem = qobject_cast<QQuickMenuBarItem *>(staticMenu->parentItem());
+ QQuickMenuBarItem *dynamicMenuBarItem = qobject_cast<QQuickMenuBarItem *>(dynamicMenu->parentItem());
+ QVERIFY(staticMenuBarItem && dynamicMenuBarItem);
+
+ // highlight the static MenuBarItem and open the menu
+ QTest::mouseMove(window.data(), staticMenuBarItem->mapToScene(
+ QPointF(staticMenuBarItem->width() / 2, staticMenuBarItem->height() / 2)).toPoint());
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier,
+ staticMenuBarItem->mapToScene(QPointF(staticMenuBarItem->width() / 2, staticMenuBarItem->height() / 2)).toPoint());
+ QCOMPARE(staticMenuBarItem->isHighlighted(), true);
+ QCOMPARE(staticMenu->isVisible(), true);
+ QTRY_COMPARE(staticMenu->isOpened(), true);
+
+ // click a menu item to dismiss the menu and unhighlight the static MenuBarItem
+ QQuickMenuItem *menuItem = qobject_cast<QQuickMenuItem *>(staticMenu->itemAt(0));
+ QVERIFY(menuItem);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier,
+ menuItem->mapToScene(QPointF(menuItem->width() / 2, menuItem->height() / 2)).toPoint());
+ QCOMPARE(staticMenuBarItem->isHighlighted(), false);
+
+ // highlight the dynamic MenuBarItem and open the menu
+ QTest::mouseMove(window.data(), dynamicMenuBarItem->mapToScene(
+ QPointF(dynamicMenuBarItem->width() / 2, dynamicMenuBarItem->height() / 2)).toPoint());
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier,
+ dynamicMenuBarItem->mapToScene(QPointF(dynamicMenuBarItem->width() / 2, dynamicMenuBarItem->height() / 2)).toPoint());
+ QCOMPARE(dynamicMenuBarItem->isHighlighted(), true);
+ QCOMPARE(dynamicMenu->isVisible(), true);
+ QTRY_COMPARE(dynamicMenu->isOpened(), true);
+
+ // click a menu item to dismiss the menu and unhighlight the dynamic MenuBarItem
+ menuItem = qobject_cast<QQuickMenuItem *>(dynamicMenu->itemAt(0));
+ QVERIFY(menuItem);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier,
+ menuItem->mapToScene(QPointF(menuItem->width() / 2, menuItem->height() / 2)).toPoint());
+ QCOMPARE(dynamicMenuBarItem->isHighlighted(), false);
+}
+
+QTEST_QUICKCONTROLS_MAIN(tst_qquickmenubar)
+
+#include "tst_qquickmenubar.moc"
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/CMakeLists.txt b/tests/auto/quickcontrols2/qquickninepatchimage/CMakeLists.txt
new file mode 100644
index 0000000000..56edab461d
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Generated from qquickninepatchimage.pro.
+
+#####################################################################
+## tst_qquickninepatchimage Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/*.qml)
+list(APPEND test_data ${test_data_glob})
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/*.png)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickninepatchimage
+ SOURCES
+ tst_qquickninepatchimage.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Qml
+ Qt::QmlPrivate
+ Qt::Quick
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickninepatchimage CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickninepatchimage CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/foo.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/foo.9.png
new file mode 100644
index 0000000000..bac09a4d1a
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/foo.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@2x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@2x.9.png
new file mode 100644
index 0000000000..43e4b47881
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@2x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@3x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@3x.9.png
new file mode 100644
index 0000000000..4d199c8424
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@3x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@4x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@4x.9.png
new file mode 100644
index 0000000000..018b8341a2
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/foo@4x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all.9.png
new file mode 100644
index 0000000000..a189942957
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@2x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@2x.9.png
new file mode 100644
index 0000000000..d00d719cc2
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@2x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@3x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@3x.9.png
new file mode 100644
index 0000000000..6130fd5020
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@3x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@4x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@4x.9.png
new file mode 100644
index 0000000000..2c2d1694d4
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-all@4x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright.9.png
new file mode 100644
index 0000000000..2b3e58cbf1
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@2x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@2x.9.png
new file mode 100644
index 0000000000..70aceb618f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@2x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@3x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@3x.9.png
new file mode 100644
index 0000000000..032400ceda
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@3x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@4x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@4x.9.png
new file mode 100644
index 0000000000..d5cf85aa10
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-bottomright@4x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft.9.png
new file mode 100644
index 0000000000..05a2ff703c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@2x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@2x.9.png
new file mode 100644
index 0000000000..a88f87a5ce
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@2x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@3x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@3x.9.png
new file mode 100644
index 0000000000..16349d2287
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@3x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@4x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@4x.9.png
new file mode 100644
index 0000000000..160fab6164
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/inset-topleft@4x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/ninepatchimage.qml b/tests/auto/quickcontrols2/qquickninepatchimage/data/ninepatchimage.qml
new file mode 100644
index 0000000000..410a61f9fe
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/ninepatchimage.qml
@@ -0,0 +1,7 @@
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+NinePatchImage {
+}
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/padding.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/padding.9.png
new file mode 100644
index 0000000000..8a65afadec
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/padding.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@2x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@2x.9.png
new file mode 100644
index 0000000000..101fc0cbbe
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@2x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@3x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@3x.9.png
new file mode 100644
index 0000000000..e07a93a231
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@3x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@4x.9.png b/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@4x.9.png
new file mode 100644
index 0000000000..a3506444b1
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/data/padding@4x.9.png
Binary files differ
diff --git a/tests/auto/quickcontrols2/qquickninepatchimage/tst_qquickninepatchimage.cpp b/tests/auto/quickcontrols2/qquickninepatchimage/tst_qquickninepatchimage.cpp
new file mode 100644
index 0000000000..0578248379
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickninepatchimage/tst_qquickninepatchimage.cpp
@@ -0,0 +1,260 @@
+/****************************************************************************
+**
+** 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 <qtest.h>
+#include <QtTest/qsignalspy.h>
+#include <QtCore/qmath.h>
+#include <QtCore/qsize.h>
+#include <QtGui/private/qhighdpiscaling_p.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQuick/qquickitem.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuick/qquickitemgrabresult.h>
+#include <QtQuick/private/qquickimage_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+
+using namespace QQuickVisualTestUtils;
+
+class tst_qquickninepatchimage : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_qquickninepatchimage();
+
+private slots:
+ void ninePatch_data();
+ void ninePatch();
+ void padding_data();
+ void padding();
+ void inset_data();
+ void inset();
+ void implicitSize_data();
+ void implicitSize();
+};
+
+static QImage grabItemToImage(QQuickItem *item)
+{
+ QSharedPointer<QQuickItemGrabResult> result = item->grabToImage();
+ QSignalSpy spy(result.data(), SIGNAL(ready()));
+ spy.wait();
+ return result->image();
+}
+
+tst_qquickninepatchimage::tst_qquickninepatchimage()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_qquickninepatchimage::ninePatch_data()
+{
+ QTest::addColumn<int>("dpr");
+ QTest::addColumn<QSize>("size");
+
+ // original size, downsized, stretched
+ const QList<QSize> sizes = QList<QSize>()
+ << QSize(40, 40) // original
+ << QSize(10, 40) // downsized (h)
+ << QSize(40, 10) // downsized (v)
+ << QSize(10, 10) // downsized (h & v)
+ << QSize(80, 40) // stretched (h)
+ << QSize(40, 80) // stretched (v)
+ << QSize(80, 80) // stretched (h & v)
+ << QSize(8, 8); // minimal (borders only)
+
+ for (const QSize &sz : sizes) {
+ for (int dpr = 1; dpr <= 4; ++dpr)
+ QTest::newRow(qPrintable(QString::fromLatin1("DPR=%1, %2x%3").arg(dpr).arg(sz.width()).arg(sz.height()))) << dpr << sz;
+ }
+}
+
+void tst_qquickninepatchimage::ninePatch()
+{
+ QFETCH(int, dpr);
+ QFETCH(QSize, size);
+
+ QHighDpiScaling::setGlobalFactor(dpr);
+
+ QQuickView view(testFileUrl("ninepatchimage.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject());
+ QVERIFY(ninePatchImage);
+ ninePatchImage->setSource(testFileUrl("foo.9.png"));
+ ninePatchImage->setSize(size);
+
+ const QImage ninePatchImageGrab = grabItemToImage(ninePatchImage).scaled(size * dpr);
+
+ // Generate an image to compare against the actual 9-patch image.
+ QImage generatedImage(size * dpr, ninePatchImageGrab.format());
+ generatedImage.fill(Qt::red);
+
+ QImage blueRect(4 * dpr, 4 * dpr, ninePatchImageGrab.format());
+ blueRect.fill(Qt::blue);
+
+ QPainter painter(&generatedImage);
+ // Top-left
+ painter.drawImage(0, 0, blueRect);
+ // Top-right
+ painter.drawImage(generatedImage.width() - blueRect.width(), 0, blueRect);
+ // Bottom-right
+ painter.drawImage(generatedImage.width() - blueRect.width(), generatedImage.height() - blueRect.height(), blueRect);
+ // Bottom-left
+ painter.drawImage(0, generatedImage.height() - blueRect.height(), blueRect);
+
+ if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")))
+ QEXPECT_FAIL("", "Grabbing does not work on offscreen/minimal platforms", Abort);
+
+ QCOMPARE(ninePatchImageGrab, generatedImage);
+}
+
+void tst_qquickninepatchimage::padding_data()
+{
+ QTest::addColumn<int>("dpr");
+
+ for (int dpr = 1; dpr <= 4; ++dpr)
+ QTest::newRow(qPrintable(QString::fromLatin1("DPR=%1").arg(dpr))) << dpr;
+}
+
+void tst_qquickninepatchimage::padding()
+{
+ QFETCH(int, dpr);
+
+ QHighDpiScaling::setGlobalFactor(dpr);
+
+ QQuickView view(testFileUrl("ninepatchimage.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject());
+ QVERIFY(ninePatchImage);
+ ninePatchImage->setSource(testFileUrl("padding.9.png"));
+
+ QCOMPARE(ninePatchImage->property("topPadding").toReal(), 8);
+ QCOMPARE(ninePatchImage->property("leftPadding").toReal(), 18);
+ QCOMPARE(ninePatchImage->property("rightPadding").toReal(), 20);
+ QCOMPARE(ninePatchImage->property("bottomPadding").toReal(), 10);
+}
+
+void tst_qquickninepatchimage::inset_data()
+{
+ QTest::addColumn<int>("dpr");
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QMarginsF>("insets");
+
+ const QStringList files = QStringList() << "inset-all.9.png" << "inset-topleft.9.png" << "inset-bottomright.9.png";
+ const QList<QMarginsF> insets = QList<QMarginsF>() << QMarginsF(2, 1, 3, 4) << QMarginsF(2, 1, 0, 0) << QMarginsF(0, 0, 3, 4);
+
+ for (int i = 0; i < files.count(); ++i) {
+ QString file = files.at(i);
+ for (int dpr = 1; dpr <= 4; ++dpr)
+ QTest::newRow(qPrintable(QString::fromLatin1("%1 DPR=%2").arg(file).arg(dpr))) << dpr << file << insets.at(i);
+ }
+}
+
+Q_DECLARE_METATYPE(QMarginsF)
+
+void tst_qquickninepatchimage::inset()
+{
+ QFETCH(int, dpr);
+ QFETCH(QString, file);
+ QFETCH(QMarginsF, insets);
+
+ QHighDpiScaling::setGlobalFactor(dpr);
+
+ QQuickView view(testFileUrl("ninepatchimage.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject());
+ QVERIFY(ninePatchImage);
+ ninePatchImage->setSource(testFileUrl(file));
+
+ QCOMPARE(ninePatchImage->property("topInset").toReal(), insets.top());
+ QCOMPARE(ninePatchImage->property("leftInset").toReal(), insets.left());
+ QCOMPARE(ninePatchImage->property("rightInset").toReal(), insets.right());
+ QCOMPARE(ninePatchImage->property("bottomInset").toReal(), insets.bottom());
+}
+
+void tst_qquickninepatchimage::implicitSize_data()
+{
+ QTest::addColumn<int>("dpr");
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QSizeF>("implicitSize");
+
+ const struct TestFile {
+ QString name;
+ QSizeF sizeHint;
+ } testFiles [] = {
+ { "foo.9.png", QSizeF(40, 40) },
+ { "padding.9.png", QSizeF(40, 40) },
+ { "inset-all.9.png", QSizeF(45, 45) },
+ { "inset-topleft.9.png", QSizeF(42, 41) },
+ { "inset-bottomright.9.png", QSizeF(43, 44) }
+ };
+
+ for (const TestFile &file : testFiles) {
+ for (int dpr = 1; dpr <= 4; ++dpr)
+ QTest::newRow(qPrintable(QString::fromLatin1("%1 DPR=%2").arg(file.name).arg(dpr))) << dpr << file.name << file.sizeHint;
+ }
+}
+
+void tst_qquickninepatchimage::implicitSize()
+{
+ QFETCH(int, dpr);
+ QFETCH(QString, file);
+ QFETCH(QSizeF, implicitSize);
+
+ QHighDpiScaling::setGlobalFactor(dpr);
+
+ QQuickView view(testFileUrl("ninepatchimage.qml"));
+ QCOMPARE(view.status(), QQuickView::Ready);
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject());
+ QVERIFY(ninePatchImage);
+ ninePatchImage->setSource(testFileUrl(file));
+
+ QCOMPARE(ninePatchImage->implicitWidth(), implicitSize.width());
+ QCOMPARE(ninePatchImage->implicitHeight(), implicitSize.height());
+}
+
+QTEST_MAIN(tst_qquickninepatchimage)
+
+#include "tst_qquickninepatchimage.moc"
diff --git a/tests/auto/quickcontrols2/qquickpopup/BLACKLIST b/tests/auto/quickcontrols2/qquickpopup/BLACKLIST
new file mode 100644
index 0000000000..4aa2bfeb6e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/BLACKLIST
@@ -0,0 +1,17 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+
+[overlay]
+macos # QTBUG-89938
+
+[zOrder]
+macos # QTBUG-89938
+
+[closePolicy]
+macos # QTBUG-89938
+
+# QTBUG-94251
+[closePolicy]
+opensuse-leap
+
+[cursorShape]
+opensuse-leap
diff --git a/tests/auto/quickcontrols2/qquickpopup/CMakeLists.txt b/tests/auto/quickcontrols2/qquickpopup/CMakeLists.txt
new file mode 100644
index 0000000000..715cf5868c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from qquickpopup.pro.
+
+#####################################################################
+## tst_qquickpopup Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickpopup
+ SOURCES
+ tst_qquickpopup.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:qquickpopup.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickpopup CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickpopup CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/activeFocusAfterExit.qml b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusAfterExit.qml
new file mode 100644
index 0000000000..0a716ccd74
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusAfterExit.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias popup1: popup1
+ property alias popup2: popup2
+ property alias popup3: popup3
+
+ Popup {
+ id: popup1
+ focus: true
+ z: 1
+ }
+
+ Popup {
+ id: popup2
+ focus: false
+ z: 2
+ }
+
+ Popup {
+ id: popup3
+ focus: true
+ z: 3
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose1.qml b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose1.qml
new file mode 100644
index 0000000000..9a76ebea97
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose1.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias focusedPopup: focusedPopup
+ property alias nonFocusedPopup: nonFocusedPopup
+
+ Popup {
+ id: focusedPopup
+ focus: true
+ }
+
+ Popup {
+ id: nonFocusedPopup
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose2.qml b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose2.qml
new file mode 100644
index 0000000000..6d004b1721
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose2.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias popup1: popup1
+ property alias popup2: popup2
+ property alias closePopup2Button: closePopup2Button
+
+ Popup {
+ id: popup1
+ focus: true
+ }
+
+ Popup {
+ id: popup2
+ focus: true
+
+ Button {
+ id: closePopup2Button
+ onClicked: {
+ popup1.contentItem.forceActiveFocus();
+ popup2.close();
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose3.qml b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose3.qml
new file mode 100644
index 0000000000..8a68246853
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClose3.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias popup1: popup1
+ property alias popup2: popup2
+
+ Button {
+ focus: true
+ }
+
+ Popup {
+ id: popup1
+ focus: true
+ enter: Transition { PauseAnimation { duration: 200 } }
+ exit: Transition { PauseAnimation { duration: 200 } }
+ }
+
+ Popup {
+ id: popup2
+ focus: true
+ enter: Transition { PauseAnimation { duration: 100 } }
+ exit: Transition { PauseAnimation { duration: 100 } }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClosingSeveralPopups.qml b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClosingSeveralPopups.qml
new file mode 100644
index 0000000000..adf23637ab
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnClosingSeveralPopups.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias button: button
+ property alias popup1: popup1
+ property alias popup2: popup2
+
+ Button {
+ id: button
+ focus: true
+ }
+
+ Popup {
+ id: popup1
+ focus: true
+ enter: Transition { NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200 } }
+ exit: Transition { NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200 } }
+ }
+
+ Popup {
+ id: popup2
+ focus: true
+ enter: Transition { NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 100 } }
+ exit: Transition { NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 100 } }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnDelayedEnter.qml b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnDelayedEnter.qml
new file mode 100644
index 0000000000..1ceea99c09
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/activeFocusOnDelayedEnter.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.12
+import QtQuick.Controls 2.12
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias popup1: popup1
+ property alias popup2: popup2
+
+ Popup {
+ id: popup1
+ focus: true
+ enter: Transition {
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 100 }
+ }
+ }
+
+ Popup {
+ id: popup2
+ focus: true
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow-hover.qml b/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow-hover.qml
new file mode 100644
index 0000000000..fc93d16d91
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow-hover.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property alias parentButton: parentButton
+ property alias childButton: childButton
+
+ Button {
+ id: parentButton
+ text: "Parent"
+ anchors.fill: parent
+
+ Popup {
+ id: popup
+ x: 1
+ y: 1
+ leftPadding: 1
+ rightPadding: 1
+ topPadding: 1
+ bottomPadding: 1
+
+
+ Button {
+ anchors.centerIn: parent
+ id: childButton
+ text: "Child"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow-wheel.qml b/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow-wheel.qml
new file mode 100644
index 0000000000..163cf77996
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow-wheel.qml
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property alias nestedPopup: nestedPopup
+ property alias popupSlider: popupSlider
+ property alias contentSlider: contentSlider
+
+ Slider {
+ id: contentSlider
+ anchors.fill: parent
+ wheelEnabled: true
+ }
+
+ Popup {
+ id: popup
+ x: 50; y: 50
+ implicitWidth: parent.width - 100
+ implicitHeight: parent.height - 100
+ clip: true
+ contentItem: Slider {
+ id: popupSlider
+ wheelEnabled: true
+ }
+
+ Popup {
+ id: nestedPopup
+ x: 0; y: 0
+ clip: true
+ implicitWidth: 50
+ implicitHeight: 50
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow.qml b/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow.qml
new file mode 100644
index 0000000000..399f1c67c1
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/applicationwindow.qml
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property alias popup2: popup2
+ property alias popup3: popup3
+ property alias button: button
+ property alias slider: slider
+
+ Button {
+ id: button
+ text: "Open"
+ anchors.centerIn: parent
+ anchors.verticalCenterOffset: -height
+
+ Popup {
+ id: popup
+ y: parent.height
+
+ Text {
+ color: "white"
+ text: "Hello, world!"
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: popup.close()
+ }
+ }
+ }
+
+ Popup {
+ id: popup3
+ y: parent.height
+
+ Slider {
+ id: slider
+ }
+ }
+ }
+
+ Popup {
+ id: popup2
+ y: popup.y
+ z: 1
+ contentItem: Text {
+ text: "Popup2"
+ font.pixelSize: 36
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/centerInOverlayWithinStackViewItem.qml b/tests/auto/quickcontrols2/qquickpopup/data/centerInOverlayWithinStackViewItem.qml
new file mode 100644
index 0000000000..aa25863aed
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/centerInOverlayWithinStackViewItem.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property Popup popup: stackView.currentItem.popup
+
+ StackView {
+ id: stackView
+ objectName: "stackView"
+ anchors.fill: parent
+
+ initialItem: Rectangle {
+ objectName: "rectangle"
+
+ property alias popup: popup
+
+ Popup {
+ id: popup
+ objectName: "popup"
+ width: 100
+ height: 100
+ visible: true
+ anchors.centerIn: Overlay.overlay
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/closeOnEscapeWithNestedPopups.qml b/tests/auto/quickcontrols2/qquickpopup/data/closeOnEscapeWithNestedPopups.qml
new file mode 100644
index 0000000000..71ec4e2b10
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/closeOnEscapeWithNestedPopups.qml
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ header: ToolBar {
+ ToolButton {
+ objectName: "optionsToolButton"
+ text: "Options"
+ onClicked: optionsMenu.open()
+
+ Menu {
+ id: optionsMenu
+ objectName: "optionsMenu"
+ x: parent.width - width
+ transformOrigin: Menu.TopRight
+
+ MenuItem {
+ objectName: "settingsMenuItem"
+ text: "Settings"
+ onTriggered: settingsDialog.open()
+ }
+ }
+ }
+ }
+
+ Shortcut {
+ sequence: "Esc"
+ enabled: stackView.depth > 1
+ onActivated: stackView.pop()
+ }
+
+ Component {
+ id: itemComponent
+
+ Item {}
+ }
+
+ StackView {
+ id: stackView
+ objectName: "stackView"
+ anchors.fill: parent
+ initialItem: Item {
+ objectName: "initialStackViewItem"
+ }
+
+ Component.onCompleted: push(itemComponent)
+ }
+
+ Dialog {
+ id: settingsDialog
+ objectName: "settingsDialog"
+ modal: true
+
+ contentItem: ComboBox {
+ objectName: "comboBox"
+ model: 10
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/closeOnEscapeWithVisiblePopup.qml b/tests/auto/quickcontrols2/qquickpopup/data/closeOnEscapeWithVisiblePopup.qml
new file mode 100644
index 0000000000..b65e4ec0c0
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/closeOnEscapeWithVisiblePopup.qml
@@ -0,0 +1,16 @@
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+ Popup {
+ objectName: "popup"
+ visible: true
+ width: 200
+ height: 200
+ anchors.centerIn: parent
+ closePolicy: Popup.CloseOnEscape
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/countChanged.qml b/tests/auto/quickcontrols2/qquickpopup/data/countChanged.qml
new file mode 100644
index 0000000000..fd59433251
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/countChanged.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 640
+ height: 480
+ property bool isModel1: true
+ property alias comboBox: comboBox
+ property int count: comboBox.count
+ ListModel {
+ id: model1
+ ListElement {
+ display: "one"
+ }
+ }
+ ListModel {
+ id: model2
+ ListElement {
+ display: "one"
+ }
+ ListElement {
+ display: "two"
+ }
+ }
+ ComboBox {
+ id: comboBox
+ model: isModel1 ? model1 : model2
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/cursor.qml b/tests/auto/quickcontrols2/qquickpopup/data/cursor.qml
new file mode 100644
index 0000000000..e2a6e38e31
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/cursor.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property alias textField: textField
+
+ TextField {
+ id: textField
+ }
+ Popup {
+ id: popup
+ x: textField.x + textField.width / 2
+ y: textField.y + textField.height / 2 - height / 2
+ width: 100
+ height: 100
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/destroyDuringExitTransition.qml b/tests/auto/quickcontrols2/qquickpopup/data/destroyDuringExitTransition.qml
new file mode 100644
index 0000000000..67fca2e78e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/destroyDuringExitTransition.qml
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+ title: "destroyDuringExitTransition"
+
+ property Dialog dialog1
+ property Dialog dialog2
+
+ Component {
+ id: dlg
+
+ Dialog {
+ dim: true
+ modal: true
+ closePolicy: Popup.CloseOnEscape
+ visible: true
+
+ property alias button: button
+
+ Column {
+ Text {
+ text: "button is " + (button.down ? "down" : "up")
+ }
+
+ Button {
+ id: button
+ text: "Try to press this button"
+ }
+ }
+ }
+ }
+
+ Component {
+ id: brokenDlg
+ Dialog {
+ dim: true
+ modal: true
+ closePolicy: Popup.CloseOnEscape
+ visible: true
+
+ Text {
+ text: "Press Esc key to reject this dialog"
+ }
+
+ exit: Transition {
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 100 }
+ }
+ }
+ }
+
+
+ Component.onCompleted: {
+ dialog1 = dlg.createObject(window)
+ dialog2 = brokenDlg.createObject(window)
+
+ dialog2.onRejected.connect(function(){
+ dialog2.destroy()
+ })
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/dialog.qml b/tests/auto/quickcontrols2/qquickpopup/data/dialog.qml
new file mode 100644
index 0000000000..75c0e1c689
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/dialog.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Item {
+ width: 400
+ height: 400
+ objectName: "Rectangle"
+
+ property alias dialog: dialog
+
+ Dialog {
+ id: dialog
+ objectName: "Dialog"
+ width: 200
+ height: 200
+ anchors.centerIn: parent
+ visible: true
+
+ Component.onCompleted: {
+ background.objectName = "DialogBackground"
+ contentItem.objectName = "DialogContentItem"
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/dimmerContainmentMask.qml b/tests/auto/quickcontrols2/qquickpopup/data/dimmerContainmentMask.qml
new file mode 100644
index 0000000000..c18c4c4054
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/dimmerContainmentMask.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+ title: "dimmerContainmentMask"
+
+ property alias modalPopup: modalPopup
+ property int clickCount: 0
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: ++clickCount;
+ }
+
+ Popup {
+ id: modalPopup
+ modal: true
+ x: 100
+ y: 100
+ width: 200
+ height: 200
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/disabledPalette.qml b/tests/auto/quickcontrols2/qquickpopup/data/disabledPalette.qml
new file mode 100644
index 0000000000..f1608aae11
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/disabledPalette.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias popup: popup
+
+ function disableOverlay() {
+ popup.Overlay.overlay.enabled = false
+ }
+
+ Popup {
+ id: popup
+ width: 200
+ height: 200
+ background: Rectangle {
+ color: popup.palette.base
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/grabber.qml b/tests/auto/quickcontrols2/qquickpopup/data/grabber.qml
new file mode 100644
index 0000000000..507cc3b587
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/grabber.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias menu: menu
+ property alias popup: popup
+ property alias combo: combo.popup
+
+ Menu {
+ id: menu
+ MenuItem {
+ onTriggered: popup.open()
+ }
+ }
+
+ Popup {
+ id: popup
+ modal: true
+ width: 200
+ height: 200
+
+ ComboBox {
+ id: combo
+ model: 3
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/invisibleToolTipOpen.qml b/tests/auto/quickcontrols2/qquickpopup/data/invisibleToolTipOpen.qml
new file mode 100644
index 0000000000..aaed154b9c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/invisibleToolTipOpen.qml
@@ -0,0 +1,28 @@
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+ property alias mouseArea: mouseArea
+ property alias loader: loader
+ MouseArea {
+ id: mouseArea
+ property bool isToolTipVisible: false
+ width: 200
+ height: 200
+ hoverEnabled: true
+ ToolTip.text: "static tooltip"
+ ToolTip.visible: containsMouse
+ ToolTip.onVisibleChanged: isToolTipVisible = ToolTip.visible
+ }
+ Loader {
+ id: loader
+ active: false
+ sourceComponent: Rectangle {
+ ToolTip.text: "dynamic tooltip"
+ ToolTip.visible: false
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/mirroredCombobox.qml b/tests/auto/quickcontrols2/qquickpopup/data/mirroredCombobox.qml
new file mode 100644
index 0000000000..ed48179bce
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/mirroredCombobox.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+
+ contentItem.rotation: 180
+
+ ComboBox {
+ objectName: "first"
+ x: 100
+ y: 300 // is missing space, needs to unroll in the "mirrored" direction
+ model: ["First", "Second", "Third", "Fourth", "Fifth"]
+ }
+
+ ComboBox {
+ objectName: "second"
+ x: 200
+ y: 100 // has enough space to unroll
+ model: ["A", "B", "C"]
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/modelessOnModalOnModeless.qml b/tests/auto/quickcontrols2/qquickpopup/data/modelessOnModalOnModeless.qml
new file mode 100644
index 0000000000..b5909b7feb
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/modelessOnModalOnModeless.qml
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias modelessPopup: modelessPopup
+ property alias button: button
+ property alias modalPopup: modalPopup
+ property alias tooltip: tooltip
+
+ Popup {
+ id: modelessPopup
+ modal: false
+ closePolicy: Popup.NoAutoClose
+ width: 200
+ height: 200
+ anchors.centerIn: parent
+
+ Button {
+ id: button
+ checkable: true
+ x: 0
+ y: 0
+ text: "Click me"
+ }
+
+ Popup {
+ id: modalPopup
+ modal: true
+ closePolicy: Popup.NoAutoClose
+ width: 100
+ height: 100
+ anchors.centerIn: parent
+
+ Popup {
+ id: tooltip
+ modal: false
+ closePolicy: Popup.NoAutoClose
+ width: 50
+ height: 50
+ anchors.centerIn: parent
+ }
+ }
+ }
+
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/nested.qml b/tests/auto/quickcontrols2/qquickpopup/data/nested.qml
new file mode 100644
index 0000000000..03269cd194
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/nested.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias modalPopup: modalPopup
+ property alias modelessPopup: modelessPopup
+
+ Popup {
+ id: modalPopup
+ modal: true
+ width: 200
+ height: 200
+ }
+
+ Popup {
+ id: modelessPopup
+ modal: false
+ width: 100
+ height: 100
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/orientation.qml b/tests/auto/quickcontrols2/qquickpopup/data/orientation.qml
new file mode 100644
index 0000000000..9730a9e14c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/orientation.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 600
+ height: 300
+
+ property alias popup: popup
+
+ Rectangle {
+ width: 60
+ height: 30
+ anchors.centerIn: parent
+ border.width: 1
+
+ Popup {
+ id: popup
+ x: parent.width
+ y: parent.height
+ width: 30
+ height: 60
+ visible: true
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/releaseAfterExitTransition.qml b/tests/auto/quickcontrols2/qquickpopup/data/releaseAfterExitTransition.qml
new file mode 100644
index 0000000000..cfd9a9473d
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/releaseAfterExitTransition.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+ title: "releaseAfterExitTransition"
+
+ property alias popup: popup
+ property alias modalPopup: modalPopup
+
+ Popup {
+ id: popup
+ y: parent.height - height
+ width: 50
+ height: 50
+ }
+
+ Popup {
+ id: modalPopup
+ modal: true
+ y: parent.height - height
+ width: 50
+ height: 50
+ exit: Transition { PauseAnimation { duration: 100 } }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/rotatedCombobox.qml b/tests/auto/quickcontrols2/qquickpopup/data/rotatedCombobox.qml
new file mode 100644
index 0000000000..df217be4b7
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/rotatedCombobox.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+
+ contentItem.rotation: 90
+
+ ComboBox {
+ objectName: "first"
+ x: 100
+ y: 320 // is missing space, needs to unroll in the "mirrored" direction
+ model: ["First", "Second", "Third", "Fourth", "Fifth"]
+ }
+
+ ComboBox {
+ objectName: "second"
+ x: 200
+ y: 100 // has enough space to unroll
+ model: ["A", "B", "C"]
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/shrinkPopupThatWasLargerThanWindowHeight.qml b/tests/auto/quickcontrols2/qquickpopup/data/shrinkPopupThatWasLargerThanWindowHeight.qml
new file mode 100644
index 0000000000..09765802ac
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/shrinkPopupThatWasLargerThanWindowHeight.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: root
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property int model: 40
+
+ Popup {
+ id: popup
+ width: 100
+
+ contentItem: ListView {
+ implicitHeight: contentHeight
+ model: root.model
+ delegate: Text { text: modelData }
+ clip: true
+
+ ScrollIndicator.vertical: ScrollIndicator {}
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/shrinkPopupThatWasLargerThanWindowWidth.qml b/tests/auto/quickcontrols2/qquickpopup/data/shrinkPopupThatWasLargerThanWindowWidth.qml
new file mode 100644
index 0000000000..80639aed40
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/shrinkPopupThatWasLargerThanWindowWidth.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: root
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property int model: 40
+
+ Popup {
+ id: popup
+ height: 100
+
+ contentItem: ListView {
+ implicitWidth: contentWidth
+ model: root.model
+ delegate: Text { text: modelData }
+ clip: true
+ orientation: Qt.Horizontal
+
+ ScrollIndicator.horizontal: ScrollIndicator {}
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/tabFence.qml b/tests/auto/quickcontrols2/qquickpopup/data/tabFence.qml
new file mode 100644
index 0000000000..ce5b54177c
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/tabFence.qml
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Window
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+ objectName: "Rectangle"
+
+ property alias dialog: dialog
+ property alias outsideButton1: outsideButton1
+ property alias outsideButton2: outsideButton2
+ property alias dialogButton1: dialogButton1
+ property alias dialogButton2: dialogButton2
+
+ ColumnLayout {
+ Button {
+ id: outsideButton1
+ text: "Button1"
+ }
+ Button {
+ id: outsideButton2
+ text: "Button2"
+ }
+ }
+
+ Dialog {
+ id: dialog
+ objectName: "Dialog"
+ width: 200
+ height: 200
+ anchors.centerIn: parent
+ visible: true
+
+ ColumnLayout {
+ Button {
+ id: dialogButton1
+ text: "Button3"
+ }
+ Button {
+ id: dialogButton2
+ text: "Button4"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/toolTipCrashOnClose.qml b/tests/auto/quickcontrols2/qquickpopup/data/toolTipCrashOnClose.qml
new file mode 100644
index 0000000000..33452182fe
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/toolTipCrashOnClose.qml
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import QtGraphicalEffects
+
+Window {
+ width: 640
+ height: 480
+
+ readonly property bool toolTipOpened: mouseArea.ToolTip.toolTip.opened
+
+ Component.onCompleted: contentItem.objectName = "windowContentItem"
+
+ // For the setOverlayParentToNull test.
+ function nullifyOverlayParent() {
+ Overlay.overlay.parent = null
+ }
+
+ Item {
+ objectName: "outerItem"
+ anchors.fill: parent
+
+ Item {
+ objectName: "innerItem"
+ anchors.fill: parent
+
+ ColorOverlay {
+ objectName: "colorOverlay"
+ source: parent
+ anchors.fill: parent
+ }
+
+ MouseArea {
+ id: mouseArea
+ objectName: "mouseArea"
+ anchors.fill: parent
+ hoverEnabled: true
+
+ ToolTip.visible: containsMouse
+ ToolTip.text: "ToolTip text"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/window-hover.qml b/tests/auto/quickcontrols2/qquickpopup/data/window-hover.qml
new file mode 100644
index 0000000000..5064fda7bc
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/window-hover.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property alias parentButton: parentButton
+ property alias childButton: childButton
+
+ Button {
+ id: parentButton
+ text: "Parent"
+ anchors.fill: parent
+
+ Popup {
+ id: popup
+ x: 1
+ y: 1
+ topPadding: 1
+ bottomPadding: 1
+ leftPadding: 1
+ rightPadding: 1
+
+ Button {
+ anchors.centerIn: parent
+ id: childButton
+ text: "Child"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/window-wheel.qml b/tests/auto/quickcontrols2/qquickpopup/data/window-wheel.qml
new file mode 100644
index 0000000000..8eb5260cf3
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/window-wheel.qml
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ id: window
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property alias nestedPopup: nestedPopup
+ property alias popupSlider: popupSlider
+ property alias contentSlider: contentSlider
+
+ Slider {
+ id: contentSlider
+ anchors.fill: parent
+ wheelEnabled: true
+ }
+
+ Popup {
+ id: popup
+ x: 50; y: 50
+ implicitWidth: parent.width - 100
+ implicitHeight: parent.height - 100
+ clip: true
+ contentItem: Slider {
+ id: popupSlider
+ wheelEnabled: true
+ }
+
+ Popup {
+ id: nestedPopup
+ x: 0; y: 0
+ clip: true
+ implicitWidth: 50
+ implicitHeight: 50
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/data/window.qml b/tests/auto/quickcontrols2/qquickpopup/data/window.qml
new file mode 100644
index 0000000000..d46d8ccbf1
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/data/window.qml
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Window {
+ width: 400
+ height: 400
+
+ property alias popup: popup
+ property alias popup2: popup2
+ property alias popup3: popup3
+ property alias button: button
+ property alias slider: slider
+
+ Button {
+ id: button
+ text: "Open"
+ anchors.centerIn: parent
+ anchors.verticalCenterOffset: -height
+
+ Popup {
+ id: popup
+ y: parent.height
+
+ Text {
+ color: "white"
+ text: "Hello, world!"
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: popup.close()
+ }
+ }
+ }
+
+ Popup {
+ id: popup3
+ y: parent.height
+
+ Slider {
+ id: slider
+ }
+ }
+ }
+
+ Popup {
+ id: popup2
+ y: popup.y
+ z: 1
+ contentItem: Text {
+ text: "Popup2"
+ font.pixelSize: 36
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickpopup/tst_qquickpopup.cpp b/tests/auto/quickcontrols2/qquickpopup/tst_qquickpopup.cpp
new file mode 100644
index 0000000000..d2cfda9375
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickpopup/tst_qquickpopup.cpp
@@ -0,0 +1,2034 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtTest/qsignalspy.h>
+
+#include <QtCore/qoperatingsystemversion.h>
+#include <QtGui/qpa/qwindowsysteminterface.h>
+#include <QtGui/qpa/qplatformintegration.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuick/private/qquickpalette_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickcombobox_p.h>
+#include <QtQuickTemplates2/private/qquickdialog_p.h>
+#include <QtQuickTemplates2/private/qquickoverlay_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p.h>
+#include <QtQuickTemplates2/private/qquickpopupitem_p_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+#include <QtQuickTemplates2/private/qquickslider_p.h>
+#include <QtQuickTemplates2/private/qquickstackview_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p_p.h>
+#include <QtQuickTemplates2/private/qquicktooltip_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickControlsTestUtils/private/qtest_quickcontrols_p.h>
+
+using namespace QQuickVisualTestUtils;
+using namespace QQuickControlsTestUtils;
+
+class tst_QQuickPopup : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickPopup();
+
+private slots:
+ void initTestCase() override;
+ void visible_data();
+ void visible();
+ void state();
+ void overlay_data();
+ void overlay();
+ void zOrder_data();
+ void zOrder();
+ void windowChange();
+ void closePolicy_data();
+ void closePolicy();
+ void closePolicy_grabberInside_data();
+ void closePolicy_grabberInside();
+ void activeFocusOnClose1();
+ void activeFocusOnClose2();
+ void activeFocusOnClose3();
+ void activeFocusOnClosingSeveralPopups();
+ void activeFocusAfterExit();
+ void activeFocusOnDelayedEnter();
+ void hover_data();
+ void hover();
+ void wheel_data();
+ void wheel();
+ void parentDestroyed();
+ void nested();
+ void modelessOnModalOnModeless();
+ void grabber();
+ void cursorShape();
+ void componentComplete();
+ void closeOnEscapeWithNestedPopups();
+ void closeOnEscapeWithVisiblePopup();
+ void enabled();
+ void orientation_data();
+ void orientation();
+ void qquickview();
+ void disabledPalette();
+ void disabledParentPalette();
+ void countChanged();
+ void toolTipCrashOnClose();
+ void setOverlayParentToNull();
+ void tabFence();
+ void invisibleToolTipOpen();
+ void centerInOverlayWithinStackViewItem();
+ void destroyDuringExitTransition();
+ void releaseAfterExitTransition();
+ void dimmerContainmentMask();
+ void shrinkPopupThatWasLargerThanWindow_data();
+ void shrinkPopupThatWasLargerThanWindow();
+ void mirroredCombobox();
+ void rotatedCombobox();
+
+private:
+ static bool hasWindowActivation();
+};
+
+tst_QQuickPopup::tst_QQuickPopup()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_QQuickPopup::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+ qputenv("QML_NO_TOUCH_COMPRESSION", "1");
+}
+
+void tst_QQuickPopup::visible_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::newRow("Window") << "window.qml";
+ QTest::newRow("ApplicationWindow") << "applicationwindow.qml";
+}
+
+bool tst_QQuickPopup::hasWindowActivation()
+{
+ return (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation));
+}
+
+void tst_QQuickPopup::visible()
+{
+ QFETCH(QString, source);
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+ QQuickItem *popupItem = popup->popupItem();
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+
+ QQuickOverlay *overlay = QQuickOverlay::overlay(window);
+ QVERIFY(overlay);
+ QVERIFY(overlay->childItems().contains(popupItem));
+
+ popup->close();
+ QTRY_VERIFY(!popup->isVisible());
+ QVERIFY(!overlay->childItems().contains(popupItem));
+
+ popup->setVisible(true);
+ QVERIFY(popup->isVisible());
+ QVERIFY(overlay->childItems().contains(popupItem));
+
+ popup->setVisible(false);
+ QTRY_VERIFY(!popup->isVisible());
+ QVERIFY(!overlay->childItems().contains(popupItem));
+}
+
+void tst_QQuickPopup::state()
+{
+ QQuickControlsApplicationHelper helper(this, "applicationwindow.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+
+ QCOMPARE(popup->isVisible(), false);
+
+ QSignalSpy visibleChangedSpy(popup, SIGNAL(visibleChanged()));
+ QSignalSpy aboutToShowSpy(popup, SIGNAL(aboutToShow()));
+ QSignalSpy aboutToHideSpy(popup, SIGNAL(aboutToHide()));
+ QSignalSpy openedSpy(popup, SIGNAL(opened()));
+ QSignalSpy closedSpy(popup, SIGNAL(closed()));
+
+ QVERIFY(visibleChangedSpy.isValid());
+ QVERIFY(aboutToShowSpy.isValid());
+ QVERIFY(aboutToHideSpy.isValid());
+ QVERIFY(openedSpy.isValid());
+ QVERIFY(closedSpy.isValid());
+
+ popup->open();
+ QCOMPARE(visibleChangedSpy.count(), 1);
+ QCOMPARE(aboutToShowSpy.count(), 1);
+ QCOMPARE(aboutToHideSpy.count(), 0);
+ QTRY_COMPARE(openedSpy.count(), 1);
+ QCOMPARE(closedSpy.count(), 0);
+
+ popup->close();
+ QTRY_COMPARE(visibleChangedSpy.count(), 2);
+ QCOMPARE(aboutToShowSpy.count(), 1);
+ QCOMPARE(aboutToHideSpy.count(), 1);
+ QCOMPARE(openedSpy.count(), 1);
+ QTRY_COMPARE(closedSpy.count(), 1);
+}
+
+void tst_QQuickPopup::overlay_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("modal");
+ QTest::addColumn<bool>("dim");
+
+ QTest::newRow("Window") << "window.qml" << false << false;
+ QTest::newRow("Window,dim") << "window.qml" << false << true;
+ QTest::newRow("Window,modal") << "window.qml" << true << false;
+ QTest::newRow("Window,modal,dim") << "window.qml" << true << true;
+
+ QTest::newRow("ApplicationWindow") << "applicationwindow.qml" << false << false;
+ QTest::newRow("ApplicationWindow,dim") << "applicationwindow.qml" << false << true;
+ QTest::newRow("ApplicationWindow,modal") << "applicationwindow.qml" << true << false;
+ QTest::newRow("ApplicationWindow,modal,dim") << "applicationwindow.qml" << true << true;
+}
+
+void tst_QQuickPopup::overlay()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, modal);
+ QFETCH(bool, dim);
+
+ QScopedPointer<QPointingDevice> device(QTest::createTouchDevice());
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickOverlay *overlay = QQuickOverlay::overlay(window);
+ QVERIFY(overlay);
+
+ QSignalSpy overlayPressedSignal(overlay, SIGNAL(pressed()));
+ QSignalSpy overlayReleasedSignal(overlay, SIGNAL(released()));
+ QVERIFY(overlayPressedSignal.isValid());
+ QVERIFY(overlayReleasedSignal.isValid());
+
+ QVERIFY(!overlay->isVisible()); // no popups open
+
+ QTest::mouseClick(window, Qt::LeftButton);
+ QCOMPARE(overlayPressedSignal.count(), 0);
+ QCOMPARE(overlayReleasedSignal.count(), 0);
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+
+ QQuickOverlayAttached *overlayAttached = qobject_cast<QQuickOverlayAttached *>(qmlAttachedPropertiesObject<QQuickOverlay>(popup));
+ QVERIFY(overlayAttached);
+ QCOMPARE(overlayAttached->overlay(), overlay);
+
+ QSignalSpy overlayAttachedPressedSignal(overlayAttached, SIGNAL(pressed()));
+ QSignalSpy overlayAttachedReleasedSignal(overlayAttached, SIGNAL(released()));
+ QVERIFY(overlayAttachedPressedSignal.isValid());
+ QVERIFY(overlayAttachedReleasedSignal.isValid());
+
+ QQuickButton *button = window->property("button").value<QQuickButton*>();
+ QVERIFY(button);
+
+ int overlayPressCount = 0;
+ int overlayReleaseCount = 0;
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QVERIFY(overlay->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(overlayPressedSignal.count(), ++overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), overlayReleaseCount);
+ QCOMPARE(overlayAttachedPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayAttachedReleasedSignal.count(), overlayReleaseCount);
+
+ QTRY_VERIFY(!popup->isVisible());
+ QVERIFY(!overlay->isVisible());
+
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(overlayPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), overlayReleaseCount); // no modal-popups open
+ QCOMPARE(overlayAttachedPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayAttachedReleasedSignal.count(), overlayReleaseCount);
+
+ popup->setDim(dim);
+ popup->setModal(modal);
+ popup->setClosePolicy(QQuickPopup::CloseOnReleaseOutside);
+
+ // mouse
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QVERIFY(overlay->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(overlayPressedSignal.count(), ++overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), overlayReleaseCount);
+ QCOMPARE(overlayAttachedPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayAttachedReleasedSignal.count(), overlayReleaseCount);
+
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(overlayPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), ++overlayReleaseCount);
+ QCOMPARE(overlayAttachedPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayAttachedReleasedSignal.count(), overlayReleaseCount);
+
+ QTRY_VERIFY(!popup->isVisible());
+ QVERIFY(!overlay->isVisible());
+
+ // touch
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QVERIFY(overlay->isVisible());
+
+
+ QTest::touchEvent(window, device.data()).press(0, QPoint(1, 1));
+ QCOMPARE(overlayPressedSignal.count(), ++overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), overlayReleaseCount);
+ QCOMPARE(overlayAttachedPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayAttachedReleasedSignal.count(), overlayReleaseCount);
+
+ QTest::touchEvent(window, device.data()).release(0, QPoint(1, 1));
+ QCOMPARE(overlayPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), ++overlayReleaseCount);
+ QCOMPARE(overlayAttachedPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayAttachedReleasedSignal.count(), overlayReleaseCount);
+
+ QTRY_VERIFY(!popup->isVisible());
+ QVERIFY(!overlay->isVisible());
+
+ // multi-touch
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QVERIFY(overlay->isVisible());
+ QVERIFY(!button->isPressed());
+
+ QTest::touchEvent(window, device.data()).press(0, button->mapToScene(QPointF(1, 1)).toPoint());
+ QVERIFY(popup->isVisible());
+ QVERIFY(overlay->isVisible());
+ QCOMPARE(button->isPressed(), !modal);
+ QCOMPARE(overlayPressedSignal.count(), ++overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), overlayReleaseCount);
+
+ QTest::touchEvent(window, device.data()).stationary(0).press(1, button->mapToScene(QPointF(button->width() / 2, button->height() / 2)).toPoint());
+ QVERIFY(popup->isVisible());
+ QVERIFY(overlay->isVisible());
+ QCOMPARE(button->isPressed(), !modal);
+ QCOMPARE(overlayPressedSignal.count(), ++overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), overlayReleaseCount);
+
+ QTest::touchEvent(window, device.data()).release(0, button->mapToScene(QPointF(1, 1)).toPoint()).stationary(1);
+ QTRY_VERIFY(!popup->isVisible());
+ QVERIFY(!overlay->isVisible());
+ QVERIFY(!button->isPressed());
+ QCOMPARE(overlayPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), ++overlayReleaseCount);
+
+ QTest::touchEvent(window, device.data()).release(1, button->mapToScene(QPointF(button->width() / 2, button->height() / 2)).toPoint());
+ QVERIFY(!popup->isVisible());
+ QVERIFY(!overlay->isVisible());
+ QVERIFY(!button->isPressed());
+ QCOMPARE(overlayPressedSignal.count(), overlayPressCount);
+ QCOMPARE(overlayReleasedSignal.count(), overlayReleaseCount);
+}
+
+void tst_QQuickPopup::zOrder_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::newRow("Window") << "window.qml";
+ QTest::newRow("ApplicationWindow") << "applicationwindow.qml";
+}
+
+void tst_QQuickPopup::zOrder()
+{
+ QFETCH(QString, source);
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+ popup->setModal(true);
+
+ QQuickPopup *popup2 = window->property("popup2").value<QQuickPopup*>();
+ QVERIFY(popup2);
+ popup2->setModal(true);
+
+ // show popups in reverse order. popup2 has higher z-order so it appears
+ // on top and must be closed first, even if the other popup was opened last
+ popup2->open();
+ popup->open();
+ QVERIFY(popup2->isVisible());
+ QVERIFY(popup->isVisible());
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QTRY_VERIFY(!popup2->isVisible());
+ QVERIFY(popup->isVisible());
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QVERIFY(!popup2->isVisible());
+ QTRY_VERIFY(!popup->isVisible());
+}
+
+void tst_QQuickPopup::windowChange()
+{
+ QQuickPopup popup;
+ QSignalSpy spy(&popup, SIGNAL(windowChanged(QQuickWindow*)));
+ QVERIFY(spy.isValid());
+
+ QQuickItem item;
+ popup.setParentItem(&item);
+ QVERIFY(!popup.window());
+ QCOMPARE(spy.count(), 0);
+
+ QQuickWindow window;
+ item.setParentItem(window.contentItem());
+ QCOMPARE(popup.window(), &window);
+ QCOMPARE(spy.count(), 1);
+
+ item.setParentItem(nullptr);
+ QVERIFY(!popup.window());
+ QCOMPARE(spy.count(), 2);
+
+ popup.setParentItem(window.contentItem());
+ QCOMPARE(popup.window(), &window);
+ QCOMPARE(spy.count(), 3);
+
+ popup.resetParentItem();
+ QVERIFY(!popup.window());
+ QCOMPARE(spy.count(), 4);
+
+ popup.setParent(&window);
+ popup.resetParentItem();
+ QCOMPARE(popup.window(), &window);
+ QCOMPARE(spy.count(), 5);
+
+ popup.setParent(this);
+ popup.resetParentItem();
+ QVERIFY(!popup.window());
+ QCOMPARE(spy.count(), 6);
+
+ item.setParentItem(window.contentItem());
+ popup.setParent(&item);
+ popup.resetParentItem();
+ QCOMPARE(popup.window(), &window);
+ QCOMPARE(spy.count(), 7);
+
+ popup.setParent(nullptr);
+}
+
+Q_DECLARE_METATYPE(QQuickPopup::ClosePolicy)
+
+void tst_QQuickPopup::closePolicy_data()
+{
+ qRegisterMetaType<QQuickPopup::ClosePolicy>();
+
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<QQuickPopup::ClosePolicy>("closePolicy");
+
+ QTest::newRow("Window:NoAutoClose") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::NoAutoClose);
+ QTest::newRow("Window:CloseOnPressOutside") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnPressOutside);
+ QTest::newRow("Window:CloseOnPressOutsideParent") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnPressOutsideParent);
+ QTest::newRow("Window:CloseOnPressOutside|Parent") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnPressOutside | QQuickPopup::CloseOnPressOutsideParent);
+ QTest::newRow("Window:CloseOnReleaseOutside") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnReleaseOutside);
+ QTest::newRow("Window:CloseOnReleaseOutside|Parent") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnReleaseOutside | QQuickPopup::CloseOnReleaseOutsideParent);
+ QTest::newRow("Window:CloseOnEscape") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnEscape);
+
+ QTest::newRow("ApplicationWindow:NoAutoClose") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::NoAutoClose);
+ QTest::newRow("ApplicationWindow:CloseOnPressOutside") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnPressOutside);
+ QTest::newRow("ApplicationWindow:CloseOnPressOutsideParent") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnPressOutsideParent);
+ QTest::newRow("ApplicationWindow:CloseOnPressOutside|Parent") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnPressOutside | QQuickPopup::CloseOnPressOutsideParent);
+ QTest::newRow("ApplicationWindow:CloseOnReleaseOutside") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnReleaseOutside);
+ QTest::newRow("ApplicationWindow:CloseOnReleaseOutside|Parent") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnReleaseOutside | QQuickPopup::CloseOnReleaseOutsideParent);
+ QTest::newRow("ApplicationWindow:CloseOnEscape") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnEscape);
+}
+
+void tst_QQuickPopup::closePolicy()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QFETCH(QString, source);
+ QFETCH(QQuickPopup::ClosePolicy, closePolicy);
+
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+
+ QQuickButton *button = window->property("button").value<QQuickButton*>();
+ QVERIFY(button);
+
+ popup->setModal(true);
+ popup->setFocus(true);
+ popup->setClosePolicy(closePolicy);
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ // wait for dimmer
+ QTest::qWait(50);
+
+ // press outside popup and its parent
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ if (closePolicy.testFlag(QQuickPopup::CloseOnPressOutside) || closePolicy.testFlag(QQuickPopup::CloseOnPressOutsideParent))
+ QTRY_VERIFY(!popup->isVisible());
+ else
+ QVERIFY(popup->isOpened());
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ // release outside popup and its parent
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ if (closePolicy.testFlag(QQuickPopup::CloseOnReleaseOutside) || closePolicy.testFlag(QQuickPopup::CloseOnReleaseOutsideParent))
+ QTRY_VERIFY(!popup->isVisible());
+ else
+ QVERIFY(popup->isOpened());
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ // press outside popup but inside its parent
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(button->x() + 1, button->y() + 1));
+ if (closePolicy.testFlag(QQuickPopup::CloseOnPressOutside) && !closePolicy.testFlag(QQuickPopup::CloseOnPressOutsideParent))
+ QTRY_VERIFY(!popup->isVisible());
+ else
+ QVERIFY(popup->isOpened());
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ // release outside popup but inside its parent
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(button->x() + 1, button->y() + 1));
+ if (closePolicy.testFlag(QQuickPopup::CloseOnReleaseOutside) && !closePolicy.testFlag(QQuickPopup::CloseOnReleaseOutsideParent))
+ QTRY_VERIFY(!popup->isVisible());
+ else
+ QVERIFY(popup->isOpened());
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ // press inside and release outside
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(button->x() + popup->x() + 1,
+ button->y() + popup->y() + 1));
+ QVERIFY(popup->isOpened());
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QVERIFY(popup->isOpened());
+
+ // escape
+ QTest::keyClick(window, Qt::Key_Escape);
+ if (closePolicy.testFlag(QQuickPopup::CloseOnEscape))
+ QTRY_VERIFY(!popup->isVisible());
+ else
+ QVERIFY(popup->isVisible());
+}
+
+void tst_QQuickPopup::closePolicy_grabberInside_data()
+{
+ qRegisterMetaType<QQuickPopup::ClosePolicy>();
+
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<QQuickPopup::ClosePolicy>("closePolicy");
+
+ QTest::newRow("Window:CloseOnReleaseOutside") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnReleaseOutside);
+ QTest::newRow("Window:CloseOnReleaseOutside|Parent") << "window.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnReleaseOutside | QQuickPopup::CloseOnReleaseOutsideParent);
+
+ QTest::newRow("ApplicationWindow:CloseOnReleaseOutside") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnReleaseOutside);
+ QTest::newRow("ApplicationWindow:CloseOnReleaseOutside|Parent") << "applicationwindow.qml"<< static_cast<QQuickPopup::ClosePolicy>(QQuickPopup::CloseOnReleaseOutside | QQuickPopup::CloseOnReleaseOutsideParent);
+}
+
+void tst_QQuickPopup::closePolicy_grabberInside()
+{
+ QFETCH(QString, source);
+ QFETCH(QQuickPopup::ClosePolicy, closePolicy);
+
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = window->property("popup3").value<QQuickPopup*>();
+ QVERIFY(popup);
+
+ QQuickSlider *slider = window->property("slider").value<QQuickSlider*>();
+ QVERIFY(slider);
+
+ popup->setModal(true);
+ popup->setClosePolicy(closePolicy);
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ // press on a mouse grabber inside and release outside
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier,
+ slider->handle()->mapToItem(window->contentItem(),slider->handle()->boundingRect().center()).toPoint());
+
+ QVERIFY(popup->isOpened());
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QVERIFY(popup->isOpened());
+}
+
+void tst_QQuickPopup::activeFocusOnClose1()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ // Test that a popup that never sets focus: true (e.g. ToolTip) doesn't affect
+ // the active focus item when it closes.
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("activeFocusOnClose1.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *focusedPopup = helper.appWindow->property("focusedPopup").value<QQuickPopup*>();
+ QVERIFY(focusedPopup);
+
+ QQuickPopup *nonFocusedPopup = helper.appWindow->property("nonFocusedPopup").value<QQuickPopup*>();
+ QVERIFY(nonFocusedPopup);
+
+ focusedPopup->open();
+ QVERIFY(focusedPopup->isVisible());
+ QTRY_VERIFY(focusedPopup->isOpened());
+ QVERIFY(focusedPopup->hasActiveFocus());
+
+ nonFocusedPopup->open();
+ QVERIFY(nonFocusedPopup->isVisible());
+ QTRY_VERIFY(nonFocusedPopup->isOpened());
+ QVERIFY(focusedPopup->hasActiveFocus());
+
+ nonFocusedPopup->close();
+ QTRY_VERIFY(!nonFocusedPopup->isVisible());
+ QVERIFY(focusedPopup->hasActiveFocus());
+
+ // QTBUG-66113: force active focus on a popup that did not request focus
+ nonFocusedPopup->open();
+ nonFocusedPopup->forceActiveFocus();
+ QVERIFY(nonFocusedPopup->isVisible());
+ QTRY_VERIFY(nonFocusedPopup->isOpened());
+ QVERIFY(nonFocusedPopup->hasActiveFocus());
+
+ nonFocusedPopup->close();
+ QTRY_VERIFY(!nonFocusedPopup->isVisible());
+ QVERIFY(focusedPopup->hasActiveFocus());
+}
+
+void tst_QQuickPopup::activeFocusOnClose2()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ // Test that a popup that sets focus: true but relinquishes focus (e.g. by
+ // calling forceActiveFocus() on another item) before it closes doesn't
+ // affect the active focus item when it closes.
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("activeFocusOnClose2.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup1 = helper.appWindow->property("popup1").value<QQuickPopup*>();
+ QVERIFY(popup1);
+
+ QQuickPopup *popup2 = helper.appWindow->property("popup2").value<QQuickPopup*>();
+ QVERIFY(popup2);
+
+ QQuickButton *closePopup2Button = helper.appWindow->property("closePopup2Button").value<QQuickButton*>();
+ QVERIFY(closePopup2Button);
+
+ popup1->open();
+ QVERIFY(popup1->isVisible());
+ QTRY_VERIFY(popup1->isOpened());
+ QVERIFY(popup1->hasActiveFocus());
+
+ popup2->open();
+ QVERIFY(popup2->isVisible());
+ QTRY_VERIFY(popup2->isOpened());
+ QVERIFY(popup2->hasActiveFocus());
+
+ // Causes popup1.contentItem.forceActiveFocus() to be called, then closes popup2.
+ QTRY_VERIFY(closePopup2Button->width() > 0);
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier,
+ closePopup2Button->mapToScene(QPointF(closePopup2Button->width() / 2, closePopup2Button->height() / 2)).toPoint());
+ QTRY_VERIFY(!popup2->isVisible());
+ QVERIFY(popup1->hasActiveFocus());
+}
+
+void tst_QQuickPopup::activeFocusOnClose3()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ // Test that a closing popup that had focus doesn't steal focus from
+ // another popup that the focus was transferred to.
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("activeFocusOnClose3.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup1 = helper.appWindow->property("popup1").value<QQuickPopup*>();
+ QVERIFY(popup1);
+
+ QQuickPopup *popup2 = helper.appWindow->property("popup2").value<QQuickPopup*>();
+ QVERIFY(popup2);
+
+ popup1->open();
+ QVERIFY(popup1->isVisible());
+ QTRY_VERIFY(popup1->hasActiveFocus());
+
+ popup2->open();
+ popup1->close();
+
+ QSignalSpy closedSpy(popup1, SIGNAL(closed()));
+ QVERIFY(closedSpy.isValid());
+ QVERIFY(closedSpy.wait());
+
+ QVERIFY(!popup1->isVisible());
+ QVERIFY(popup2->isVisible());
+ QTRY_VERIFY(popup2->hasActiveFocus());
+}
+
+void tst_QQuickPopup::activeFocusOnClosingSeveralPopups()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ // Test that active focus isn't lost when multiple popup closing simultaneously
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("activeFocusOnClosingSeveralPopups.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickItem *button = window->property("button").value<QQuickItem *>();
+ QVERIFY(button);
+
+ QQuickPopup *popup1 = window->property("popup1").value<QQuickPopup *>();
+ QVERIFY(popup1);
+
+ QQuickPopup *popup2 = window->property("popup2").value<QQuickPopup *>();
+ QVERIFY(popup2);
+
+ QCOMPARE(button->hasActiveFocus(), true);
+ popup1->open();
+ QTRY_VERIFY(popup1->isOpened());
+ QVERIFY(popup1->hasActiveFocus());
+ popup2->open();
+ QTRY_VERIFY(popup2->isOpened());
+ QVERIFY(popup2->hasActiveFocus());
+ QTRY_COMPARE(button->hasActiveFocus(), false);
+ // close the unfocused popup first
+ popup1->close();
+ popup2->close();
+ QTRY_VERIFY(!popup1->isVisible());
+ QTRY_VERIFY(!popup2->isVisible());
+ QTRY_COMPARE(button->hasActiveFocus(), true);
+
+ popup1->open();
+ QTRY_VERIFY(popup1->isOpened());
+ QVERIFY(popup1->hasActiveFocus());
+ popup2->open();
+ QTRY_VERIFY(popup2->isOpened());
+ QVERIFY(popup2->hasActiveFocus());
+ QTRY_COMPARE(button->hasActiveFocus(), false);
+ // close the focused popup first
+ popup2->close();
+ popup1->close();
+ QTRY_VERIFY(!popup1->isVisible());
+ QTRY_VERIFY(!popup2->isVisible());
+ QTRY_COMPARE(button->hasActiveFocus(), true);
+}
+
+void tst_QQuickPopup::activeFocusAfterExit()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ // Test that after closing a popup the highest one in z-order receives it instead.
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("activeFocusAfterExit.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup1 = window->property("popup1").value<QQuickPopup*>();
+ QVERIFY(popup1);
+
+ QQuickPopup *popup2 = window->property("popup2").value<QQuickPopup*>();
+ QVERIFY(popup2);
+ QSignalSpy closedSpy2(popup2, SIGNAL(closed()));
+ QVERIFY(closedSpy2.isValid());
+
+ QQuickPopup *popup3 = window->property("popup3").value<QQuickPopup*>();
+ QVERIFY(popup3);
+ QSignalSpy closedSpy3(popup3, SIGNAL(closed()));
+ QVERIFY(closedSpy3.isValid());
+
+ popup1->open();
+ QVERIFY(popup1->isVisible());
+ QTRY_VERIFY(popup1->hasActiveFocus());
+
+ popup2->open();
+ QVERIFY(popup2->isVisible());
+ QTRY_VERIFY(!popup2->hasActiveFocus());
+
+ popup3->open();
+ QVERIFY(popup3->isVisible());
+ QTRY_VERIFY(popup3->hasActiveFocus());
+
+ popup3->close();
+ closedSpy3.wait();
+ QVERIFY(!popup3->isVisible());
+ QTRY_VERIFY(!popup3->hasActiveFocus());
+ QTRY_VERIFY(!popup2->hasActiveFocus());
+ QTRY_VERIFY(popup1->hasActiveFocus());
+
+ popup2->close();
+ closedSpy2.wait();
+ QVERIFY(!popup2->isVisible());
+ QTRY_VERIFY(!popup2->hasActiveFocus());
+ QTRY_VERIFY(popup1->hasActiveFocus());
+}
+
+void tst_QQuickPopup::activeFocusOnDelayedEnter()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ // Test that after opening two popups, first of which has an animation, does not cause
+ // the first one to receive focus after the animation stops.
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("activeFocusOnDelayedEnter.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup1 = window->property("popup1").value<QQuickPopup*>();
+ QVERIFY(popup1);
+ QSignalSpy openedSpy(popup1, SIGNAL(opened()));
+
+ QQuickPopup *popup2 = window->property("popup2").value<QQuickPopup*>();
+ QVERIFY(popup2);
+
+ popup1->open();
+ popup2->open();
+ openedSpy.wait();
+ QTRY_VERIFY(popup2->hasActiveFocus());
+}
+
+void tst_QQuickPopup::hover_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("modal");
+
+ QTest::newRow("Window:modal") << "window-hover.qml" << true;
+ QTest::newRow("Window:modeless") << "window-hover.qml" << false;
+ QTest::newRow("ApplicationWindow:modal") << "applicationwindow-hover.qml" << true;
+ QTest::newRow("ApplicationWindow:modeless") << "applicationwindow-hover.qml" << false;
+}
+
+void tst_QQuickPopup::hover()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, modal);
+
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+ popup->setModal(modal);
+
+ QQuickButton *parentButton = window->property("parentButton").value<QQuickButton*>();
+ QVERIFY(parentButton);
+ parentButton->setHoverEnabled(true);
+
+ QQuickButton *childButton = window->property("childButton").value<QQuickButton*>();
+ QVERIFY(childButton);
+ childButton->setHoverEnabled(true);
+
+ QSignalSpy openedSpy(popup, SIGNAL(opened()));
+ QVERIFY(openedSpy.isValid());
+ popup->open();
+ QVERIFY(openedSpy.count() == 1 || openedSpy.wait());
+ QTRY_VERIFY(popup->width() > 10); // somehow this can take a short time with macOS style
+
+ // hover the parent button outside the popup
+ QTest::mouseMove(window, QPoint(window->width() - 1, window->height() - 1));
+ QCOMPARE(parentButton->isHovered(), !modal);
+ QVERIFY(!childButton->isHovered());
+
+ // hover the popup background
+ QTest::mouseMove(window, QPoint(1, 1));
+ QVERIFY(!parentButton->isHovered());
+ QVERIFY(!childButton->isHovered());
+
+ // hover the child button in a popup
+ QTest::mouseMove(window, QPoint(popup->x() + popup->width() / 2, popup->y() + popup->height() / 2));
+ QVERIFY(!parentButton->isHovered());
+ QVERIFY(childButton->isHovered());
+
+ QSignalSpy closedSpy(popup, SIGNAL(closed()));
+ QVERIFY(closedSpy.isValid());
+ popup->close();
+ QVERIFY(closedSpy.count() == 1 || closedSpy.wait());
+
+ // hover the parent button after closing the popup
+ QTest::mouseMove(window, QPoint(window->width() / 2, window->height() / 2));
+ QVERIFY(parentButton->isHovered());
+}
+
+void tst_QQuickPopup::wheel_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("modal");
+
+ QTest::newRow("Window:modal") << "window-wheel.qml" << true;
+ QTest::newRow("Window:modeless") << "window-wheel.qml" << false;
+ QTest::newRow("ApplicationWindow:modal") << "applicationwindow-wheel.qml" << true;
+ QTest::newRow("ApplicationWindow:modeless") << "applicationwindow-wheel.qml" << false;
+}
+
+static bool sendWheelEvent(QQuickItem *item, const QPoint &localPos, int degrees)
+{
+ QQuickWindow *window = item->window();
+ QWheelEvent wheelEvent(localPos, item->window()->mapToGlobal(localPos), QPoint(0, 0),
+ QPoint(0, 8 * degrees), Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
+ false);
+ QSpontaneKeyEvent::setSpontaneous(&wheelEvent);
+ return qGuiApp->notify(window, &wheelEvent);
+}
+
+void tst_QQuickPopup::wheel()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, modal);
+
+ QQuickControlsApplicationHelper helper(this, source);
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickSlider *contentSlider = window->property("contentSlider").value<QQuickSlider*>();
+ QVERIFY(contentSlider);
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup && popup->contentItem());
+ popup->setModal(modal);
+
+ QQuickPopup *nestedPopup = window->property("nestedPopup").value<QQuickPopup*>();
+ QVERIFY(nestedPopup && nestedPopup->contentItem());
+ nestedPopup->setModal(modal);
+
+ QQuickSlider *popupSlider = window->property("popupSlider").value<QQuickSlider*>();
+ QVERIFY(popupSlider);
+
+ {
+ // wheel over the content
+ qreal oldContentValue = contentSlider->value();
+ qreal oldPopupValue = popupSlider->value();
+
+ QVERIFY(sendWheelEvent(contentSlider, QPoint(contentSlider->width() / 2, contentSlider->height() / 2), 15));
+
+ QVERIFY(!qFuzzyCompare(contentSlider->value(), oldContentValue)); // must have moved
+ QVERIFY(qFuzzyCompare(popupSlider->value(), oldPopupValue)); // must not have moved
+ }
+
+ QSignalSpy openedSpy(popup, SIGNAL(opened()));
+ QVERIFY(openedSpy.isValid());
+ popup->open();
+ QVERIFY(openedSpy.count() == 1 || openedSpy.wait());
+
+ {
+ // wheel over the popup content
+ qreal oldContentValue = contentSlider->value();
+ qreal oldPopupValue = popupSlider->value();
+
+ QVERIFY(sendWheelEvent(popupSlider, QPoint(popupSlider->width() / 2, popupSlider->height() / 2), 15));
+
+ QVERIFY(qFuzzyCompare(contentSlider->value(), oldContentValue)); // must not have moved
+ QVERIFY(!qFuzzyCompare(popupSlider->value(), oldPopupValue)); // must have moved
+ }
+
+ QSignalSpy nestedOpenedSpy(nestedPopup, SIGNAL(opened()));
+ QVERIFY(nestedOpenedSpy.isValid());
+ nestedPopup->open();
+ QVERIFY(nestedOpenedSpy.size() == 1 || nestedOpenedSpy.wait());
+
+ {
+ // wheel over the popup content
+ qreal oldContentValue = contentSlider->value();
+ qreal oldPopupValue = popupSlider->value();
+
+ QVERIFY(sendWheelEvent(popupSlider, QPoint(popupSlider->width() / 2, popupSlider->height() / 2), 15));
+
+ QVERIFY(qFuzzyCompare(contentSlider->value(), oldContentValue)); // must not have moved
+ QCOMPARE(qFuzzyCompare(popupSlider->value(), oldPopupValue), modal); // must not have moved unless modeless
+ }
+
+ {
+ // wheel over the overlay
+ qreal oldContentValue = contentSlider->value();
+ qreal oldPopupValue = popupSlider->value();
+
+ QVERIFY(sendWheelEvent(QQuickOverlay::overlay(window), QPoint(0, 0), 15));
+
+ if (modal) {
+ // the content below a modal overlay must not move
+ QVERIFY(qFuzzyCompare(contentSlider->value(), oldContentValue));
+ } else {
+ // the content below a modeless overlay must move
+ QVERIFY(!qFuzzyCompare(contentSlider->value(), oldContentValue));
+ }
+ QVERIFY(qFuzzyCompare(popupSlider->value(), oldPopupValue)); // must not have moved
+ }
+}
+
+void tst_QQuickPopup::parentDestroyed()
+{
+ QQuickPopup popup;
+ popup.setParentItem(new QQuickItem);
+ delete popup.parentItem();
+ QVERIFY(!popup.parentItem());
+}
+
+void tst_QQuickPopup::nested()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("nested.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *modalPopup = window->property("modalPopup").value<QQuickPopup *>();
+ QVERIFY(modalPopup);
+
+ QQuickPopup *modelessPopup = window->property("modelessPopup").value<QQuickPopup *>();
+ QVERIFY(modelessPopup);
+
+ modalPopup->open();
+ QCOMPARE(modalPopup->isVisible(), true);
+
+ modelessPopup->open();
+ QCOMPARE(modelessPopup->isVisible(), true);
+
+ // click outside the modeless popup on the top, but inside the modal popup below
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(150, 150));
+
+ QTRY_COMPARE(modelessPopup->isVisible(), false);
+ QCOMPARE(modalPopup->isVisible(), true);
+}
+
+void tst_QQuickPopup::modelessOnModalOnModeless()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("modelessOnModalOnModeless.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *modelessPopup = window->property("modelessPopup").value<QQuickPopup *>();
+ QVERIFY(modelessPopup);
+
+ QQuickButton *button = window->property("button").value<QQuickButton *>();
+ QVERIFY(button);
+ QQuickPopup *modalPopup = window->property("modalPopup").value<QQuickPopup *>();
+ QVERIFY(modalPopup);
+ QQuickPopup *tooltip = window->property("tooltip").value<QQuickPopup *>();
+ QVERIFY(modalPopup);
+
+ modelessPopup->open();
+ QCOMPARE(modelessPopup->isVisible(), true);
+ QTRY_COMPARE(modelessPopup->isOpened(), true);
+
+ const auto buttonPoint = button->mapToScene(button->boundingRect().center()).toPoint();
+ // click into the button, should not be blocked
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, buttonPoint);
+ QVERIFY(button->isChecked());
+
+ modalPopup->open();
+ QCOMPARE(modalPopup->isVisible(), true);
+ QTRY_COMPARE(modalPopup->isOpened(), true);
+ // click into the button, should be blocked
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, buttonPoint);
+ QVERIFY(button->isChecked());
+
+ tooltip->setVisible(true);
+ QCOMPARE(tooltip->isVisible(), true);
+ QTRY_COMPARE(tooltip->isOpened(), true);
+ // click into the button, should be blocked
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, buttonPoint);
+ QVERIFY(button->isChecked());
+}
+
+// QTBUG-56697
+void tst_QQuickPopup::grabber()
+{
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("grabber.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *menu = window->property("menu").value<QQuickPopup *>();
+ QVERIFY(menu);
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup *>();
+ QVERIFY(popup);
+
+ QQuickPopup *combo = window->property("combo").value<QQuickPopup *>();
+ QVERIFY(combo);
+
+ menu->open();
+ QTRY_COMPARE(menu->isOpened(), true);
+ QCOMPARE(popup->isVisible(), false);
+ QCOMPARE(combo->isVisible(), false);
+
+ // click a menu item to open the popup
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(menu->x() + menu->width() / 2, menu->y() + menu->height() / 2));
+ QTRY_COMPARE(menu->isVisible(), false);
+ QTRY_COMPARE(popup->isOpened(), true);
+ QCOMPARE(combo->isVisible(), false);
+
+ combo->open();
+ QCOMPARE(menu->isVisible(), false);
+ QCOMPARE(popup->isVisible(), true);
+ QTRY_COMPARE(combo->isOpened(), true);
+
+ // click outside to close both the combo popup and the parent popup
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - 1, window->height() - 1));
+ QCOMPARE(menu->isVisible(), false);
+ QTRY_COMPARE(popup->isVisible(), false);
+ QTRY_COMPARE(combo->isVisible(), false);
+
+ menu->open();
+ QTRY_COMPARE(menu->isOpened(), true);
+ QCOMPARE(popup->isVisible(), false);
+ QCOMPARE(combo->isVisible(), false);
+
+ // click outside the menu to close it (QTBUG-56697)
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - 1, window->height() - 1));
+ QTRY_COMPARE(menu->isVisible(), false);
+ QCOMPARE(popup->isVisible(), false);
+ QCOMPARE(combo->isVisible(), false);
+}
+
+void tst_QQuickPopup::cursorShape()
+{
+ // Ensure that the mouse cursor has the correct shape when over a popup
+ // which is itself over an item with a different shape.
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("cursor.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = helper.appWindow->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+
+ popup->open();
+ QVERIFY(popup->isVisible());
+ QTRY_VERIFY(popup->isOpened());
+
+ QQuickItem *textField = helper.appWindow->property("textField").value<QQuickItem*>();
+ QVERIFY(textField);
+
+ // Move the mouse over the text field.
+ const QPoint textFieldPos(popup->x() - 1, textField->height() / 2);
+ QVERIFY(textField->contains(textField->mapFromScene(textFieldPos)));
+ QTest::mouseMove(window, textFieldPos);
+ QCOMPARE(window->cursor().shape(), textField->cursor().shape());
+
+ // Move the mouse over the popup where it overlaps with the text field.
+ const QPoint textFieldOverlapPos(popup->x() + 1, textField->height() / 2);
+ QTest::mouseMove(window, textFieldOverlapPos);
+ QCOMPARE(window->cursor().shape(), popup->popupItem()->cursor().shape());
+
+ popup->close();
+ QTRY_VERIFY(!popup->isVisible());
+}
+
+class FriendlyPopup : public QQuickPopup
+{
+ friend class tst_QQuickPopup;
+};
+
+void tst_QQuickPopup::componentComplete()
+{
+ FriendlyPopup cppPopup;
+ QVERIFY(cppPopup.isComponentComplete());
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick.Controls; Popup { }", QUrl());
+
+ FriendlyPopup *qmlPopup = static_cast<FriendlyPopup *>(component.beginCreate(engine.rootContext()));
+ QVERIFY(qmlPopup);
+ QVERIFY(!qmlPopup->isComponentComplete());
+
+ component.completeCreate();
+ QVERIFY(qmlPopup->isComponentComplete());
+}
+
+void tst_QQuickPopup::closeOnEscapeWithNestedPopups()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ // Tests the scenario in the Gallery example, where there are nested popups that should
+ // close in the correct order when the Escape key is pressed.
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("closeOnEscapeWithNestedPopups.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ // The stack view should have two items, and it should pop the second when escape is pressed
+ // and it has focus.
+ QQuickStackView *stackView = window->findChild<QQuickStackView*>("stackView");
+ QVERIFY(stackView);
+ QCOMPARE(stackView->depth(), 2);
+
+ QQuickItem *optionsToolButton = window->findChild<QQuickItem*>("optionsToolButton");
+ QVERIFY(optionsToolButton);
+
+ // Click on the options tool button. The settings menu should pop up.
+ const QPoint optionsToolButtonCenter = optionsToolButton->mapToScene(
+ QPointF(optionsToolButton->width() / 2, optionsToolButton->height() / 2)).toPoint();
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, optionsToolButtonCenter);
+
+ QQuickPopup *optionsMenu = window->findChild<QQuickPopup*>("optionsMenu");
+ QVERIFY(optionsMenu);
+ QTRY_VERIFY(optionsMenu->isVisible());
+
+ QQuickItem *settingsMenuItem = window->findChild<QQuickItem*>("settingsMenuItem");
+ QVERIFY(settingsMenuItem);
+
+ // Click on the settings menu item. The settings dialog should pop up.
+ const QPoint settingsMenuItemCenter = settingsMenuItem->mapToScene(
+ QPointF(settingsMenuItem->width() / 2, settingsMenuItem->height() / 2)).toPoint();
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, settingsMenuItemCenter);
+
+ QQuickPopup *settingsDialog = window->contentItem()->findChild<QQuickPopup*>("settingsDialog");
+ QVERIFY(settingsDialog);
+ QTRY_VERIFY(!optionsMenu->isVisible());
+ QTRY_VERIFY(settingsDialog->isVisible());
+
+ QQuickComboBox *comboBox = window->contentItem()->findChild<QQuickComboBox*>("comboBox");
+ QVERIFY(comboBox);
+
+ // Click on the combo box button. The combo box popup should pop up.
+ const QPoint comboBoxCenter = comboBox->mapToScene(
+ QPointF(comboBox->width() / 2, comboBox->height() / 2)).toPoint();
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, comboBoxCenter);
+ QTRY_VERIFY(comboBox->popup()->isVisible());
+
+ // Close the combo box popup with the escape key. The settings dialog should still be visible.
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_VERIFY(!comboBox->popup()->isVisible());
+ QVERIFY(settingsDialog->isVisible());
+
+ // Close the settings dialog with the escape key.
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_VERIFY(!settingsDialog->isVisible());
+
+ // The stack view should still have two items.
+ QCOMPARE(stackView->depth(), 2);
+
+ // Remove one by pressing the Escape key (the Shortcut should be activated).
+ QTest::keyClick(window, Qt::Key_Escape);
+ QCOMPARE(stackView->depth(), 1);
+}
+
+void tst_QQuickPopup::closeOnEscapeWithVisiblePopup()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QQuickControlsApplicationHelper helper(this, QStringLiteral("closeOnEscapeWithVisiblePopup.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup = window->findChild<QQuickPopup *>("popup");
+ QVERIFY(popup);
+ QTRY_VERIFY(popup->isOpened());
+
+ QTRY_VERIFY(window->activeFocusItem());
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_VERIFY(!popup->isVisible());
+}
+
+void tst_QQuickPopup::enabled()
+{
+ QQuickPopup popup;
+ QVERIFY(popup.isEnabled());
+ QVERIFY(popup.popupItem()->isEnabled());
+
+ QSignalSpy enabledSpy(&popup, &QQuickPopup::enabledChanged);
+ QVERIFY(enabledSpy.isValid());
+
+ popup.setEnabled(false);
+ QVERIFY(!popup.isEnabled());
+ QVERIFY(!popup.popupItem()->isEnabled());
+ QCOMPARE(enabledSpy.count(), 1);
+
+ popup.popupItem()->setEnabled(true);
+ QVERIFY(popup.isEnabled());
+ QVERIFY(popup.popupItem()->isEnabled());
+ QCOMPARE(enabledSpy.count(), 2);
+}
+
+void tst_QQuickPopup::orientation_data()
+{
+ QTest::addColumn<Qt::ScreenOrientation>("orientation");
+ QTest::addColumn<QPointF>("position");
+
+ // On Android the screen size will usually be smaller than the 600x300
+ // size of a Window in orientation.qml
+ // Because of that we need to calculate proper positions at runtime.
+#ifndef Q_OS_ANDROID
+ QQuickControlsApplicationHelper helper(this, "orientation.qml");
+ const QSize availableSize = helper.window->size();
+#else
+ const QSize availableSize = QGuiApplication::primaryScreen()->availableSize();
+#endif
+ const int width = availableSize.width();
+ const int height = availableSize.height();
+
+ // The width & height might be odd numbers, so we calculate center in a way
+ // similar to anchors.centerIn.
+ // Also note that when we emulate the screen orientation change (by calling
+ // window->reportContentOrientationChange() in the test), these values need
+ // to be adjusted, because the "logical" (0, 0) of the screen changes.
+ const int widthCenter = (width % 2) ? (width + 1) / 2 : width / 2;
+ const int heightCenter = (height % 2) ? (height + 1) / 2 : height / 2;
+
+ // Rectangle is (60x30); popup is (30x60).
+ // Rectangle is using "anchors.centerIn: parent", and popup is positioned at
+ // (rectangle.width, rectangle.height)
+ QTest::newRow("Portrait") << Qt::PortraitOrientation
+ << QPointF(widthCenter - 30 + 60, heightCenter - 15 + 30);
+ // in landscape orientation the top left corner of physical screen
+ // (not rotated) becomes (0, 0), so we need to adjust our widthCenter
+ QTest::newRow("Landscape") << Qt::LandscapeOrientation
+ << QPointF(heightCenter - 15 + 30, (width - widthCenter) + 30 - 60);
+ // In inverted portrait orientation the bottom right corner of physical
+ // screen (not rotated) becomes (0, 0), so we need to adjust both
+ // widthCenter and heightCenter
+ QTest::newRow("InvertedPortrait") << Qt::InvertedPortraitOrientation
+ << QPointF((width - widthCenter) + 30 - 60, (height - heightCenter) + 15 - 30);
+ // In inverted landscape orientation the bottom right corner of physical
+ // screen (not rotated) becomes (0, 0), so we need to adjust heightCenter
+ QTest::newRow("InvertedLandscape") << Qt::InvertedLandscapeOrientation
+ << QPointF((height - heightCenter) + 15 - 30, widthCenter - 30 + 60);
+}
+
+void tst_QQuickPopup::orientation()
+{
+ QFETCH(Qt::ScreenOrientation, orientation);
+ QFETCH(QPointF, position);
+
+ QQuickControlsApplicationHelper helper(this, "orientation.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->reportContentOrientationChange(orientation);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+ popup->open();
+
+ QCOMPARE(popup->popupItem()->position(), position);
+}
+
+void tst_QQuickPopup::qquickview()
+{
+ QQuickView view;
+ view.setObjectName("QQuickView");
+ view.resize(400, 400);
+ view.setSource(testFileUrl("dialog.qml"));
+ QVERIFY(view.status() != QQuickView::Error);
+ view.contentItem()->setObjectName("QQuickViewContentItem");
+ view.show();
+
+ QQuickDialog *dialog = view.rootObject()->property("dialog").value<QQuickDialog*>();
+ QVERIFY(dialog);
+ QTRY_COMPARE(dialog->property("opened").toBool(), true);
+
+ dialog->close();
+ QTRY_COMPARE(dialog->property("visible").toBool(), false);
+
+ // QTBUG-72746: shouldn't crash on application exit after closing a Dialog when using QQuickView.
+}
+
+// TODO: also test it out without setting enabled directly on menu, but on a parent
+
+// QTBUG-73447
+void tst_QQuickPopup::disabledPalette()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QQuickControlsApplicationHelper helper(this, "disabledPalette.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+
+ QSignalSpy popupEnabledSpy(popup, &QQuickPopup::enabledChanged);
+ QVERIFY(popupEnabledSpy.isValid());
+ QSignalSpy popupPaletteSpy(popup, &QQuickPopup::paletteChanged);
+ QVERIFY(popupPaletteSpy.isValid());
+
+ QSignalSpy popupItemEnabledSpy(popup->popupItem(), &QQuickItem::enabledChanged);
+ QVERIFY(popupItemEnabledSpy.isValid());
+ QSignalSpy popupItemPaletteSpy(popup->popupItem(), &QQuickItem::paletteChanged);
+ QVERIFY(popupItemPaletteSpy.isValid());
+
+ auto palette = QQuickPopupPrivate::get(popup)->palette();
+ palette->setBase(Qt::green);
+ palette->disabled()->setBase(Qt::red);
+ QCOMPARE(popupPaletteSpy.count(), 2);
+ QCOMPARE(popupItemPaletteSpy.count(), 2);
+ QCOMPARE(popup->background()->property("color").value<QColor>(), Qt::green);
+
+ popup->setEnabled(false);
+ QCOMPARE(popupEnabledSpy.count(), 1);
+ QCOMPARE(popupItemEnabledSpy.count(), 1);
+ QCOMPARE(popupPaletteSpy.count(), 3);
+ QCOMPARE(popupItemPaletteSpy.count(), 3);
+ QCOMPARE(popup->background()->property("color").value<QColor>(), Qt::red);
+}
+
+void tst_QQuickPopup::disabledParentPalette()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QQuickControlsApplicationHelper helper(this, "disabledPalette.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+
+ QSignalSpy popupEnabledSpy(popup, SIGNAL(enabledChanged()));
+ QVERIFY(popupEnabledSpy.isValid());
+ QSignalSpy popupPaletteSpy(popup, SIGNAL(paletteChanged()));
+ QVERIFY(popupPaletteSpy.isValid());
+
+ QSignalSpy popupItemEnabledSpy(popup->popupItem(), SIGNAL(enabledChanged()));
+ QVERIFY(popupItemEnabledSpy.isValid());
+ QSignalSpy popupItemPaletteSpy(popup->popupItem(), SIGNAL(paletteChanged()));
+ QVERIFY(popupItemPaletteSpy.isValid());
+
+ auto palette = QQuickPopupPrivate::get(popup)->palette();
+ palette->setBase(Qt::green);
+ palette->disabled()->setBase(Qt::red);
+ QCOMPARE(popupPaletteSpy.count(), 2);
+ QCOMPARE(popupItemPaletteSpy.count(), 2);
+ QCOMPARE(popup->background()->property("color").value<QColor>(), Qt::green);
+
+ // Disable the overlay (which is QQuickPopupItem's parent) to ensure that
+ // the palette is changed when the popup is indirectly disabled.
+ popup->open();
+ QTRY_VERIFY(popup->isOpened());
+ QVERIFY(QMetaObject::invokeMethod(window, "disableOverlay"));
+ QVERIFY(!popup->isEnabled());
+ QVERIFY(!popup->popupItem()->isEnabled());
+ QCOMPARE(popup->background()->property("color").value<QColor>(), Qt::red);
+ QCOMPARE(popupEnabledSpy.count(), 1);
+ QCOMPARE(popupItemEnabledSpy.count(), 1);
+ QCOMPARE(popupPaletteSpy.count(), 3);
+ QCOMPARE(popupItemPaletteSpy.count(), 3);
+
+ popup->close();
+ QTRY_VERIFY(!popup->isVisible());
+}
+
+void tst_QQuickPopup::countChanged()
+{
+ QQuickControlsApplicationHelper helper(this, "countChanged.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickComboBox *comboBox = window->property("comboBox").value<QQuickComboBox*>();
+ QVERIFY(comboBox);
+ QCOMPARE(window->property("count").toInt(), 1);
+
+ QVERIFY(window->setProperty("isModel1", false));
+ QTRY_COMPARE(window->property("count").toInt(), 2);
+}
+
+// QTBUG-73243
+void tst_QQuickPopup::toolTipCrashOnClose()
+{
+ if (!canImportModule("import QtGraphicalEffects; DropShadow {}"))
+ QSKIP("Test requires QtGraphicalEffects");
+
+ QQuickControlsApplicationHelper helper(this, "toolTipCrashOnClose.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QTest::mouseMove(window, QPoint(window->width() / 2, window->height() / 2));
+ QTRY_VERIFY(window->property("toolTipOpened").toBool());
+
+ QVERIFY(window->close());
+ // Shouldn't crash.
+}
+
+void tst_QQuickPopup::setOverlayParentToNull()
+{
+ if (!canImportModule("import QtGraphicalEffects; DropShadow {}"))
+ QSKIP("Test requires QtGraphicalEffects");
+
+ QQuickControlsApplicationHelper helper(this, "toolTipCrashOnClose.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QVERIFY(QMetaObject::invokeMethod(window, "nullifyOverlayParent"));
+
+ QTest::mouseMove(window, QPoint(window->width() / 2, window->height() / 2));
+ QTRY_VERIFY(window->property("toolTipOpened").toBool());
+
+ QVERIFY(window->close());
+ // While nullifying the overlay parent doesn't make much sense, it shouldn't crash.
+}
+
+void tst_QQuickPopup::tabFence()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ if (QGuiApplication::styleHints()->tabFocusBehavior() != Qt::TabFocusAllControls)
+ QSKIP("This platform only allows tab focus for text controls");
+
+ QQuickControlsApplicationHelper helper(this, "tabFence.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QQuickPopup *popup = window->property("dialog").value<QQuickPopup*>();
+ QVERIFY(popup);
+ popup->open();
+ popup->setModal(true);
+
+ QQuickButton *outsideButton1 = window->property("outsideButton1").value<QQuickButton*>();
+ QVERIFY(outsideButton1);
+ QQuickButton *outsideButton2 = window->property("outsideButton2").value<QQuickButton*>();
+ QVERIFY(outsideButton2);
+ QQuickButton *dialogButton1 = window->property("dialogButton1").value<QQuickButton*>();
+ QVERIFY(dialogButton1);
+ QQuickButton *dialogButton2 = window->property("dialogButton2").value<QQuickButton*>();
+ QVERIFY(dialogButton2);
+
+ // When modal, focus loops between the two external buttons
+ outsideButton1->forceActiveFocus();
+ QVERIFY(outsideButton1->hasActiveFocus());
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(outsideButton2->hasActiveFocus());
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(outsideButton1->hasActiveFocus());
+
+ // Same thing for dialog's buttons
+ dialogButton1->forceActiveFocus();
+ QVERIFY(dialogButton1->hasActiveFocus());
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(dialogButton2->hasActiveFocus());
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(dialogButton1->hasActiveFocus());
+
+ popup->setModal(false);
+
+ // When not modal, focus goes in and out of the dialog
+ outsideButton1->forceActiveFocus();
+ QVERIFY(outsideButton1->hasActiveFocus());
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(outsideButton2->hasActiveFocus());
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(dialogButton1->hasActiveFocus());
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(dialogButton2->hasActiveFocus());
+ QTest::keyClick(window, Qt::Key_Tab);
+ QVERIFY(outsideButton1->hasActiveFocus());
+}
+
+void tst_QQuickPopup::invisibleToolTipOpen()
+{
+ QQuickControlsApplicationHelper helper(this, "invisibleToolTipOpen.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ centerOnScreen(window);
+ moveMouseAway(window);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickItem *mouseArea = qvariant_cast<QQuickItem *>(window->property("mouseArea"));
+ QVERIFY(mouseArea);
+ QObject *loader = qvariant_cast<QObject *>(window->property("loader"));
+ QVERIFY(loader);
+
+ // Send an extra move event, otherwise the test fails on subsequent runs for different styles for some reason...
+ // As an added bonus, this is also slightly more realistic. :D
+ QTest::mouseMove(window, QPoint(mouseArea->width() / 2 - 1, mouseArea->height() / 2 - 1));
+ QTest::mouseMove(window, QPoint(mouseArea->width() / 2, mouseArea->height() / 2));
+ QTRY_VERIFY(mouseArea->property("isToolTipVisible").toBool());
+
+ QSignalSpy componentLoadedSpy(loader, SIGNAL(loaded()));
+ QVERIFY(componentLoadedSpy.isValid());
+
+ loader->setProperty("active", true);
+ QTRY_COMPARE(componentLoadedSpy.count(), 1);
+
+ QTRY_VERIFY(mouseArea->property("isToolTipVisible").toBool());
+}
+
+void tst_QQuickPopup::centerInOverlayWithinStackViewItem()
+{
+ QQuickControlsApplicationHelper helper(this, "centerInOverlayWithinStackViewItem.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+ QTRY_COMPARE(popup->isVisible(), true);
+
+ // Shouldn't crash on exit.
+}
+
+void tst_QQuickPopup::destroyDuringExitTransition()
+{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
+ QQuickControlsApplicationHelper helper(this, "destroyDuringExitTransition.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QPointer<QQuickPopup> dialog2 = window->property("dialog2").value<QQuickPopup*>();
+ QVERIFY(dialog2);
+ QTRY_COMPARE(dialog2->isVisible(), true);
+
+ // Close the second dialog, destroying it before its exit transition can finish.
+ QTest::keyClick(window, Qt::Key_Escape);
+ QTRY_VERIFY(!dialog2);
+
+ // Events should go through to the dialog underneath.
+ QQuickPopup *dialog1 = window->property("dialog1").value<QQuickPopup*>();
+ QVERIFY(dialog1);
+ QQuickButton *button = dialog1->property("button").value<QQuickButton*>();
+ QVERIFY(button);
+ const auto buttonClickPos = button->mapToScene(QPointF(button->width() / 2, button->height() / 2)).toPoint();
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, buttonClickPos);
+ QVERIFY(button->isDown());
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, buttonClickPos);
+ QVERIFY(!button->isDown());
+}
+
+void tst_QQuickPopup::releaseAfterExitTransition()
+{
+ QQuickApplicationHelper helper(this, "releaseAfterExitTransition.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickOverlay *overlay = QQuickOverlay::overlay(window);
+ QQuickPopup *modalPopup = window->property("modalPopup").value<QQuickPopup *>();
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup *>();
+
+ modalPopup->open();
+ QTRY_VERIFY(modalPopup->isOpened());
+
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ // wait until the transition is finished and the overlay hides itself
+ QTRY_VERIFY(!overlay->isVisible());
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+
+ popup->open();
+ QTRY_VERIFY(popup->isOpened());
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QTRY_VERIFY(!popup->isOpened());
+}
+
+class ContainmentMask : public QObject
+{
+ Q_OBJECT
+public:
+ mutable bool called = false;
+ Q_INVOKABLE bool contains(const QPointF &point) const
+ {
+ called = true;
+ // let clicks at {1, 1} through the dimmer
+ return point != QPoint(1, 1);
+ }
+};
+
+/*
+ Test case for behavior we rely on in the virtual keyboard:
+ To prevent the virtual keyboard from being blocked by modal popups,
+ it sets a containment mask on the dimmer item, and lets clicks through
+ that hit the virtual keyboard.
+*/
+void tst_QQuickPopup::dimmerContainmentMask()
+{
+ ContainmentMask containmentMask;
+ int expectedClickCount = 0;
+
+ QQuickApplicationHelper helper(this, "dimmerContainmentMask.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QCOMPARE(window->property("clickCount").toInt(), expectedClickCount);
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickOverlay *overlay = QQuickOverlay::overlay(window);
+ QQuickPopup *modalPopup = window->property("modalPopup").value<QQuickPopup *>();
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(window->property("clickCount"), ++expectedClickCount);
+
+ modalPopup->open();
+ QTRY_VERIFY(modalPopup->isOpened());
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(window->property("clickCount"), expectedClickCount); // blocked by modal
+ QTRY_VERIFY(!modalPopup->isOpened()); // auto-close
+
+ modalPopup->open();
+ QTRY_VERIFY(modalPopup->isOpened());
+
+ QPointer<QQuickItem> dimmer = overlay->property("_q_dimmerItem").value<QQuickItem *>();
+ QVERIFY(dimmer);
+ dimmer->setContainmentMask(&containmentMask);
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QVERIFY(containmentMask.called);
+ QCOMPARE(window->property("clickCount"), ++expectedClickCount); // let through by containment mask
+ QVERIFY(modalPopup->isOpened()); // no auto-close
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(2, 2));
+ QCOMPARE(window->property("clickCount"), expectedClickCount); // blocked by modal
+ QTRY_VERIFY(!modalPopup->isOpened()); // auto-close
+ QTRY_VERIFY(!dimmer);
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
+ QCOMPARE(window->property("clickCount"), ++expectedClickCount); // no mask left behind
+ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(2, 2));
+ QCOMPARE(window->property("clickCount"), ++expectedClickCount); // no mask left behind
+}
+
+void tst_QQuickPopup::shrinkPopupThatWasLargerThanWindow_data()
+{
+ QTest::addColumn<QString>("fileName");
+
+ QTest::newRow("vertical") << "shrinkPopupThatWasLargerThanWindowHeight.qml";
+ QTest::newRow("horizontal") << "shrinkPopupThatWasLargerThanWindowWidth.qml";
+}
+
+void tst_QQuickPopup::shrinkPopupThatWasLargerThanWindow()
+{
+ QFETCH(QString, fileName);
+
+ QQuickApplicationHelper helper(this, fileName);
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickPopup *popup = window->property("popup").value<QQuickPopup*>();
+ QVERIFY(popup);
+
+ popup->open();
+ QTRY_VERIFY(popup->isOpened());
+
+ // Shrink the popup by reducing the model count.
+ QVERIFY(window->setProperty("model", 1));
+
+ QVERIFY2(popup->implicitWidth() < window->width(), qPrintable(QString::fromLatin1(
+ "Expected popup's implicitWidth (%1) to be less than the window's width (%2)")
+ .arg(popup->implicitWidth()).arg(window->width())));
+ QVERIFY2(popup->width() < window->width(), qPrintable(QString::fromLatin1(
+ "Expected popup's width (%1) to be less than the window's width (%2)")
+ .arg(popup->width()).arg(window->width())));
+
+ QVERIFY2(popup->implicitHeight() < window->height(), qPrintable(QString::fromLatin1(
+ "Expected popup's implicitHeight (%1) to be less than the window's height (%2)")
+ .arg(popup->implicitHeight()).arg(window->height())));
+ QVERIFY2(popup->height() < window->height(), qPrintable(QString::fromLatin1(
+ "Expected popup's height (%1) to be less than the window's height (%2)")
+ .arg(popup->height()).arg(window->height())));
+}
+
+void tst_QQuickPopup::mirroredCombobox()
+{
+#ifdef Q_OS_ANDROID
+ // Android screens might be pretty small, such that additional
+ // repositioning (apart from the mirroring) will happen to the
+ // popups and mess up the expected positions below.
+ QSKIP("Skipping test for Android.");
+#endif
+ QStringList nativeStyles;
+ nativeStyles.append("macOS");
+ nativeStyles.append("iOS");
+ nativeStyles.append("Windows");
+ if (nativeStyles.contains(QQuickStyle::name()))
+ QSKIP("Skipping test for native styles: they might rearrange their combobox the way they "
+ "want.");
+
+ QQuickControlsApplicationHelper helper(this, "mirroredCombobox.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ {
+ QQuickComboBox *comboBox = window->findChild<QQuickComboBox *>("first");
+ QVERIFY(comboBox);
+ QQuickPopup *popup = comboBox->popup();
+ QVERIFY(popup);
+ popup->open();
+ QTRY_COMPARE(popup->isVisible(), true);
+ const QPointF popupPos(popup->contentItem()->mapToItem(comboBox->parentItem(),
+ popup->contentItem()->position()));
+ const QSizeF popupSize(popup->contentItem()->size());
+
+ // ignore popup.{top,bottom}Padding() as not included in popup->contentItem()->size()
+ // some styles prefer to draw the popup "over" (in z-axis direction) the combobox to hide
+ // the combobox
+ const bool styleDrawsPopupOverCombobox =
+ comboBox->position().y() - popupSize.height() + comboBox->size().height()
+ == popupPos.y();
+ // some styles prefer to draw the popup below (in y-axis direction) the combobox
+ const bool styleDrawsPopupBelowCombobox =
+ comboBox->position().y() - popupSize.height() + comboBox->topPadding()
+ == popupPos.y();
+
+ QVERIFY(styleDrawsPopupOverCombobox || styleDrawsPopupBelowCombobox);
+
+ popup->close();
+ }
+
+ {
+ QQuickComboBox *comboBox = window->findChild<QQuickComboBox *>("second");
+ QVERIFY(comboBox);
+ QQuickPopup *popup = comboBox->popup();
+ QVERIFY(popup);
+ popup->open();
+ QTRY_COMPARE(popup->isVisible(), true);
+ const QPointF popupPos(popup->contentItem()->mapToItem(comboBox->parentItem(),
+ popup->contentItem()->position()));
+
+ // some styles prefer to draw the popup "over" (in z-axis direction) the combobox to hide
+ // the combobox
+ const bool styleDrawsPopupOverCombobox = comboBox->position().y() + comboBox->topPadding()
+ + popup->topPadding() + popup->bottomPadding()
+ == popupPos.y();
+ // some styles prefer to draw the popup above (in y-axis direction) the combobox
+ const bool styleDrawsPopupAboveCombobox =
+ comboBox->position().y() + comboBox->height() - comboBox->topPadding()
+ == popupPos.y();
+
+ QVERIFY(styleDrawsPopupOverCombobox || styleDrawsPopupAboveCombobox);
+
+ popup->close();
+ }
+}
+
+void tst_QQuickPopup::rotatedCombobox()
+{
+#ifdef Q_OS_ANDROID
+ // Android screens might be pretty small, such that additional
+ // repositioning (apart from the rotating) will happen to the
+ // popups and mess up the expected positions below.
+ QSKIP("Skipping test for Android.");
+#endif
+ QStringList nativeStyles;
+ nativeStyles.append("macOS");
+ nativeStyles.append("iOS");
+ nativeStyles.append("Windows");
+ if (nativeStyles.contains(QQuickStyle::name()))
+ QSKIP("Skipping test for native styles: they might rearrange their combobox the way they "
+ "want.");
+
+ QQuickControlsApplicationHelper helper(this, "rotatedCombobox.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ {
+ QQuickComboBox *comboBox = window->findChild<QQuickComboBox *>("first");
+ QVERIFY(comboBox);
+ QQuickPopup *popup = comboBox->popup();
+ QVERIFY(popup);
+ popup->open();
+ QTRY_COMPARE(popup->isVisible(), true);
+ const QPointF popupPos(popup->contentItem()->mapToItem(comboBox->parentItem(),
+ popup->contentItem()->position()));
+ const QSizeF popupSize(popup->contentItem()->size());
+
+ // ignore popup.{left,right}Padding() as not included in popup->contentItem()->size()
+ // some styles prefer to draw the popup "over" (in z-axis direction) the combobox to hide
+ // the combobox
+ const bool styleDrawsPopupOverCombobox =
+ comboBox->position().x() - popupSize.width() + comboBox->width() == popupPos.x();
+ // some styles prefer to draw the popup right (in x-axis direction) of the combobox
+ const bool styleDrawsPopupBelowCombobox =
+ comboBox->position().x() - popupSize.width() - comboBox->leftPadding()
+ == popupPos.x();
+
+ QVERIFY(styleDrawsPopupOverCombobox || styleDrawsPopupBelowCombobox);
+ }
+
+ {
+ QQuickComboBox *comboBox = window->findChild<QQuickComboBox *>("second");
+ QVERIFY(comboBox);
+ QQuickPopup *popup = comboBox->popup();
+ QVERIFY(popup);
+ popup->open();
+ QTRY_COMPARE(popup->isVisible(), true);
+ const QPointF popupPos(popup->contentItem()->mapToItem(comboBox->parentItem(),
+ popup->contentItem()->position()));
+
+ // some styles prefer to draw the popup "over" (in z-axis direction) the combobox to hide
+ // the combobox
+ const bool styleDrawsPopupOverCombobox = comboBox->position().x() + comboBox->leftPadding()
+ + popup->leftPadding() + popup->rightPadding()
+ == popupPos.x();
+ // some styles prefer to draw the popup left (in y-axis direction) of the combobox
+ const bool styleDrawsPopupAboveCombobox =
+ comboBox->position().x() + comboBox->width() - comboBox->leftPadding()
+ == popupPos.x();
+
+ QVERIFY(styleDrawsPopupOverCombobox || styleDrawsPopupAboveCombobox);
+
+ popup->close();
+ }
+}
+
+QTEST_QUICKCONTROLS_MAIN(tst_QQuickPopup)
+
+#include "tst_qquickpopup.moc"
diff --git a/tests/auto/quickcontrols2/qquickstyle/CMakeLists.txt b/tests/auto/quickcontrols2/qquickstyle/CMakeLists.txt
new file mode 100644
index 0000000000..c39a9a04e6
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/CMakeLists.txt
@@ -0,0 +1,62 @@
+# Generated from qquickstyle.pro.
+
+#####################################################################
+## tst_qquickstyle Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickstyle
+ SOURCES
+ tst_qquickstyle.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qmake_custom_resource_files
+ "data/Custom/Label.qml"
+ "data/Custom/qmldir"
+)
+
+qt_internal_add_resource(tst_qquickstyle "qmake_custom"
+ PREFIX
+ "/"
+ FILES
+ ${qmake_custom_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:qquickstyle.pro:<TRUE>:
+# OTHER_FILES = "data/CmdLineArgStyle/Control.qml" "data/CmdLineArgStyle/qmldir" "data/EnvVarStyle/Control.qml" "data/EnvVarStyle/qmldir" "data/EnvVarFallbackStyle/Control.qml" "data/EnvVarFallbackStyle/qmldir"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickstyle CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickstyle CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/CmdLineArgStyle/Control.qml b/tests/auto/quickcontrols2/qquickstyle/data/CmdLineArgStyle/Control.qml
new file mode 100644
index 0000000000..744dcd8f08
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/CmdLineArgStyle/Control.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates as T
+T.Label {}
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/CmdLineArgStyle/qmldir b/tests/auto/quickcontrols2/qquickstyle/data/CmdLineArgStyle/qmldir
new file mode 100644
index 0000000000..c2cc85c263
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/CmdLineArgStyle/qmldir
@@ -0,0 +1,2 @@
+module CmdLineArgStyle
+Control 1.0 Control.qml
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/Custom/Label.qml b/tests/auto/quickcontrols2/qquickstyle/data/Custom/Label.qml
new file mode 100644
index 0000000000..744dcd8f08
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/Custom/Label.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates as T
+T.Label {}
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/Custom/qmldir b/tests/auto/quickcontrols2/qquickstyle/data/Custom/qmldir
new file mode 100644
index 0000000000..08de6fa804
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/Custom/qmldir
@@ -0,0 +1,2 @@
+module Custom
+Label 1.0 Label.qml
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/EnvVarFallbackStyle/Control.qml b/tests/auto/quickcontrols2/qquickstyle/data/EnvVarFallbackStyle/Control.qml
new file mode 100644
index 0000000000..744dcd8f08
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/EnvVarFallbackStyle/Control.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates as T
+T.Label {}
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/EnvVarFallbackStyle/qmldir b/tests/auto/quickcontrols2/qquickstyle/data/EnvVarFallbackStyle/qmldir
new file mode 100644
index 0000000000..bebd8e07c6
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/EnvVarFallbackStyle/qmldir
@@ -0,0 +1,2 @@
+module EnvVarFallbackStyle
+Control 1.0 Control.qml
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/EnvVarStyle/Control.qml b/tests/auto/quickcontrols2/qquickstyle/data/EnvVarStyle/Control.qml
new file mode 100644
index 0000000000..744dcd8f08
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/EnvVarStyle/Control.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates as T
+T.Label {}
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/EnvVarStyle/qmldir b/tests/auto/quickcontrols2/qquickstyle/data/EnvVarStyle/qmldir
new file mode 100644
index 0000000000..42223a1930
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/EnvVarStyle/qmldir
@@ -0,0 +1,2 @@
+module EnvVarStyle
+Control 1.0 Control.qml
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/basic.conf b/tests/auto/quickcontrols2/qquickstyle/data/basic.conf
new file mode 100644
index 0000000000..17ef59ee02
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/basic.conf
@@ -0,0 +1,6 @@
+[Controls]
+Style=Basic
+
+[Basic]
+Font\PixelSize=3
+Palette\WindowText=#ff0000
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/custom.conf b/tests/auto/quickcontrols2/qquickstyle/data/custom.conf
new file mode 100644
index 0000000000..ac79338ce5
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/custom.conf
@@ -0,0 +1,6 @@
+[Controls]
+Style=Custom
+
+[Custom]
+Font\PixelSize=3
+Palette\WindowText=#ff0000
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/dependencies.qml b/tests/auto/quickcontrols2/qquickstyle/data/dependencies.qml
new file mode 100644
index 0000000000..280cfd2962
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/dependencies.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Control { }
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/designer/ButtonSpecifics.qml b/tests/auto/quickcontrols2/qquickstyle/data/designer/ButtonSpecifics.qml
new file mode 100644
index 0000000000..21226ed2a7
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/designer/ButtonSpecifics.qml
@@ -0,0 +1,3 @@
+import HelperWidgets
+
+ButtonSection { }
diff --git a/tests/auto/cmake/qtquickcompiler/empty.qrc b/tests/auto/quickcontrols2/qquickstyle/data/dummy.dSYM/empty
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/cmake/qtquickcompiler/empty.qrc
+++ b/tests/auto/quickcontrols2/qquickstyle/data/dummy.dSYM/empty
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/dummyStyles/DummyStyle/Button.qml b/tests/auto/quickcontrols2/qquickstyle/data/dummyStyles/DummyStyle/Button.qml
new file mode 100644
index 0000000000..dcacc01140
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/dummyStyles/DummyStyle/Button.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates as T
+T.Button { }
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/fusion.conf b/tests/auto/quickcontrols2/qquickstyle/data/fusion.conf
new file mode 100644
index 0000000000..1f343e656f
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/fusion.conf
@@ -0,0 +1,6 @@
+[Controls]
+Style=Fusion
+
+[Fusion]
+Font\PixelSize=3
+Palette\WindowText=#ff0000
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/imagine.conf b/tests/auto/quickcontrols2/qquickstyle/data/imagine.conf
new file mode 100644
index 0000000000..919bbcf09e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/imagine.conf
@@ -0,0 +1,6 @@
+[Controls]
+Style=Imagine
+
+[Imagine]
+Font\PixelSize=3
+Palette\WindowText=#ff0000
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/material.conf b/tests/auto/quickcontrols2/qquickstyle/data/material.conf
new file mode 100644
index 0000000000..27c7931a92
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/material.conf
@@ -0,0 +1,6 @@
+[Controls]
+Style=Material
+
+[Material]
+Font\PixelSize=3
+Palette\WindowText=#ff0000
diff --git a/tests/auto/quickcontrols2/qquickstyle/data/universal.conf b/tests/auto/quickcontrols2/qquickstyle/data/universal.conf
new file mode 100644
index 0000000000..a5ac3ca3f0
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/data/universal.conf
@@ -0,0 +1,6 @@
+[Controls]
+Style=Universal
+
+[Universal]
+Font\PixelSize=3
+Palette\WindowText=#ff0000
diff --git a/tests/auto/quickcontrols2/qquickstyle/tst_qquickstyle.cpp b/tests/auto/quickcontrols2/qquickstyle/tst_qquickstyle.cpp
new file mode 100644
index 0000000000..aeb37945ac
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickstyle/tst_qquickstyle.cpp
@@ -0,0 +1,181 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+#include <QtQuickTemplates2/private/qquicklabel_p.h>
+#include <QtQuickTemplates2/private/qquicklabel_p_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+#include <QtGui/private/qguiapplication_p.h>
+
+class tst_QQuickStyle : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickStyle();
+
+private slots:
+ void cleanup();
+ void lookup();
+ void configurationFile_data();
+ void configurationFile();
+ void commandLineArgument();
+ void environmentVariables();
+
+private:
+ Q_REQUIRED_RESULT bool loadControls();
+ void unloadControls();
+};
+
+tst_QQuickStyle::tst_QQuickStyle()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_QQuickStyle::cleanup()
+{
+ unloadControls();
+
+ QGuiApplicationPrivate::styleOverride.clear();
+ qunsetenv("QT_QUICK_CONTROLS_STYLE");
+ qunsetenv("QT_QUICK_CONTROLS_FALLBACK_STYLE");
+ qunsetenv("QT_QUICK_CONTROLS_CONF");
+}
+
+bool tst_QQuickStyle::loadControls()
+{
+ QQmlEngine engine;
+ engine.addImportPath(dataDirectory());
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick; import QtQuick.Controls; Control { }", QUrl());
+
+ QScopedPointer<QObject> object(component.create());
+ if (object.isNull()) {
+ qWarning() << component.errorString();
+ return false;
+ }
+ return true;
+}
+
+void tst_QQuickStyle::unloadControls()
+{
+ qmlClearTypeRegistrations();
+}
+
+void tst_QQuickStyle::lookup()
+{
+ QQuickStyle::setStyle("Material");
+ QCOMPARE(QQuickStyle::name(), QString("Material"));
+
+ QVERIFY(loadControls());
+
+ // The font size for editors in the (default) Normal variant is 16.
+ // If this is wrong, the style plugin may not have been loaded.
+ QCOMPARE(QQuickTheme::instance()->font(QQuickTheme::TextArea).pixelSize(), 16);
+
+ QCOMPARE(QQuickStyle::name(), QString("Material"));
+}
+
+void tst_QQuickStyle::configurationFile_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QString>("expectedStyle");
+
+ QTest::newRow("Basic") << "basic.conf" << "Basic";
+ QTest::newRow("Fusion") << "fusion.conf" << "Fusion";
+ QTest::newRow("Imagine") << "imagine.conf" << "Imagine";
+ QTest::newRow("Material") << "material.conf" << "Material";
+ QTest::newRow("Universal") << "universal.conf" << "Universal";
+ QTest::newRow("Custom") << "custom.conf" << "Custom";
+}
+
+void tst_QQuickStyle::configurationFile()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QString, expectedStyle);
+
+ qputenv("QT_QUICK_CONTROLS_CONF", testFile(fileName).toLocal8Bit());
+
+ // Load a control. The import causes the configuration file to be read.
+ QQmlEngine engine;
+ engine.addImportPath(":/data");
+ QQmlComponent labelComponent(&engine);
+ labelComponent.setData("import QtQuick; import QtQuick.Controls; Label {}", QUrl());
+
+ QScopedPointer<QObject> object(labelComponent.create());
+ QVERIFY2(!object.isNull(), qPrintable(labelComponent.errorString()));
+
+ QCOMPARE(QQuickStyle::name(), expectedStyle);
+ QVERIFY(!QQuickStylePrivate::isUsingDefaultStyle());
+
+ // Test that fonts and palettes specified in configuration files are respected.
+ QQuickLabel *label = qobject_cast<QQuickLabel *>(object.data());
+ QVERIFY(label);
+ // Make it small so that there's less possibility for the default/system
+ // pixel size to match it and give us false positives.
+ QCOMPARE(label->font().pixelSize(), 3);
+#ifdef QT_BUILD_INTERNAL
+ QCOMPARE(QQuickLabelPrivate::get(label)->palette()->windowText(), Qt::red);
+#endif
+}
+
+void tst_QQuickStyle::commandLineArgument()
+{
+ QGuiApplicationPrivate::styleOverride = "CmdLineArgStyle";
+
+ QVERIFY(loadControls());
+
+ QCOMPARE(QQuickStyle::name(), QString("CmdLineArgStyle"));
+}
+
+void tst_QQuickStyle::environmentVariables()
+{
+ qputenv("QT_QUICK_CONTROLS_STYLE", "EnvVarStyle");
+ qputenv("QT_QUICK_CONTROLS_FALLBACK_STYLE", "EnvVarFallbackStyle");
+ QTest::ignoreMessage(QtWarningMsg, "QT_QUICK_CONTROLS_FALLBACK_STYLE: the specified fallback style" \
+ " \"EnvVarFallbackStyle\" is not one of the built-in Qt Quick Controls 2 styles");
+ QCOMPARE(QQuickStyle::name(), QString("EnvVarStyle"));
+ QCOMPARE(QQuickStylePrivate::fallbackStyle(), QString());
+}
+
+QTEST_MAIN(tst_QQuickStyle)
+
+#include "tst_qquickstyle.moc"
diff --git a/tests/auto/quickcontrols2/qquickuniversalstyle/CMakeLists.txt b/tests/auto/quickcontrols2/qquickuniversalstyle/CMakeLists.txt
new file mode 100644
index 0000000000..43d4c10d12
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickuniversalstyle/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Generated from qquickuniversalstyle.pro.
+
+#####################################################################
+## tst_qquickuniversalstyle Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/tst_*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickuniversalstyle
+ GUI
+ QMLTEST
+ SOURCES
+ tst_qquickuniversalstyle.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qmake_immediate_resource_files
+ "qtquickcontrols2.conf"
+)
+
+qt_internal_add_resource(tst_qquickuniversalstyle "qmake_immediate"
+ PREFIX
+ "/"
+ FILES
+ ${qmake_immediate_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:qquickuniversalstyle.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/data/*.qml"
+# TEMPLATE = "app"
diff --git a/tests/auto/quickcontrols2/qquickuniversalstyle/data/tst_universal.qml b/tests/auto/quickcontrols2/qquickuniversalstyle/data/tst_universal.qml
new file mode 100644
index 0000000000..356df7311e
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickuniversalstyle/data/tst_universal.qml
@@ -0,0 +1,441 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Window
+import QtTest
+import QtQuick.Controls
+import QtQuick.Controls.Universal
+
+TestCase {
+ id: testCase
+ width: 200
+ height: 200
+ visible: true
+ when: windowShown
+ name: "Universal"
+
+ Component {
+ id: button
+ Button { }
+ }
+
+ Component {
+ id: styledButton
+ Button {
+ Universal.theme: Universal.Dark
+ Universal.accent: Universal.Violet
+ Universal.foreground: Universal.Brown
+ Universal.background: Universal.Yellow
+ }
+ }
+
+ Component {
+ id: window
+ Window { }
+ }
+
+ Component {
+ id: styledWindow
+ Window {
+ Universal.theme: Universal.Dark
+ Universal.accent: Universal.Green
+ }
+ }
+
+ Component {
+ id: loader
+ Loader {
+ active: false
+ sourceComponent: Button { }
+ }
+ }
+
+ Component {
+ id: swipeView
+ SwipeView {
+ Universal.theme: Universal.Dark
+ Button { }
+ }
+ }
+
+ Component {
+ id: menu
+ ApplicationWindow {
+ Universal.accent: Universal.Red
+ property alias menu: popup
+ Menu {
+ id: popup
+ Universal.theme: Universal.Dark
+ MenuItem { }
+ }
+ }
+ }
+
+ Component {
+ id: comboBox
+ ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+ Universal.accent: Universal.Red
+ property alias combo: box
+ ComboBox {
+ id: box
+ Universal.theme: Universal.Dark
+ model: 1
+ }
+ }
+ }
+
+ Component {
+ id: windowPane
+ ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+ property alias pane: pane
+ Pane { id: pane }
+ }
+ }
+
+ function test_defaults() {
+ var control = button.createObject(testCase)
+ verify(control)
+ verify(control.Universal)
+ compare(control.Universal.accent, "#3e65ff") // Universal.Cobalt
+ compare(control.Universal.foreground, "#000000") // SystemBaseHighColor
+ compare(control.Universal.background, "#ffffff") // SystemAltHighColor
+ compare(control.Universal.theme, Universal.Light)
+ control.destroy()
+ }
+
+ function test_set() {
+ var control = button.createObject(testCase)
+ verify(control)
+ control.Universal.accent = Universal.Steel
+ control.Universal.foreground = Universal.Red
+ control.Universal.background = Universal.Green
+ control.Universal.theme = Universal.Dark
+ compare(control.Universal.accent, "#647687") // Universal.Steel
+ compare(control.Universal.foreground, "#e51400") // Universal.Red
+ compare(control.Universal.background, "#60a917") // Universal.Green
+ compare(control.Universal.theme, Universal.Dark)
+ control.destroy()
+ }
+
+ function test_reset() {
+ var control = styledButton.createObject(testCase)
+ verify(control)
+ compare(control.Universal.accent, "#aa00ff") // Universal.Violet
+ compare(control.Universal.foreground, "#825a2c") // Universal.Brown
+ compare(control.Universal.background, "#e3c800") // Universal.Yellow
+ compare(control.Universal.theme, Universal.Dark)
+ control.Universal.accent = undefined
+ control.Universal.foreground = undefined
+ control.Universal.background = undefined
+ control.Universal.theme = undefined
+ compare(control.Universal.accent, testCase.Universal.accent)
+ compare(control.Universal.foreground, testCase.Universal.foreground)
+ compare(control.Universal.background, testCase.Universal.background)
+ compare(control.Universal.theme, testCase.Universal.theme)
+ control.destroy()
+ }
+
+ function test_inheritance_data() {
+ return [
+ { tag: "accent", value1: "#a20025" /*Universal.Crimson*/, value2: "#6a00ff" /*Universal.Indigo*/ },
+ { tag: "foreground", value1: "#a20025" /*Universal.Crimson*/, value2: "#6a00ff" /*Universal.Indigo*/ },
+ { tag: "background", value1: "#a20025" /*Universal.Crimson*/, value2: "#6a00ff" /*Universal.Indigo*/ },
+ { tag: "theme", value1: Universal.Dark, value2: Universal.Light },
+ ]
+ }
+
+ function test_inheritance(data) {
+ var prop = data.tag
+ var parent = button.createObject(testCase)
+ parent.Universal[prop] = data.value1
+ compare(parent.Universal[prop], data.value1)
+
+ var child1 = button.createObject(parent)
+ compare(child1.Universal[prop], data.value1)
+
+ parent.Universal[prop] = data.value2
+ compare(parent.Universal[prop], data.value2)
+ compare(child1.Universal[prop], data.value2)
+
+ var child2 = button.createObject(parent)
+ compare(child2.Universal[prop], data.value2)
+
+ child2.Universal[prop] = data.value1
+ compare(child2.Universal[prop], data.value1)
+ compare(child1.Universal[prop], data.value2)
+ compare(parent.Universal[prop], data.value2)
+
+ parent.Universal[prop] = undefined
+ verify(parent.Universal[prop] !== data.value1)
+ verify(parent.Universal[prop] !== undefined)
+ compare(child1.Universal[prop], parent.Universal[prop])
+ verify(child2.Universal[prop] !== parent.Universal[prop])
+
+ var grandChild1 = button.createObject(child1)
+ var grandChild2 = button.createObject(child2)
+ compare(grandChild1.Universal[prop], child1.Universal[prop])
+ compare(grandChild2.Universal[prop], child2.Universal[prop])
+
+ var themelessGrandGrandChild = button.createObject(grandChild1)
+ var grandGrandGrandChild1 = button.createObject(themelessGrandGrandChild)
+ compare(grandGrandGrandChild1.Universal[prop], parent.Universal[prop])
+
+ child1.Universal[prop] = data.value2
+ compare(child1.Universal[prop], data.value2)
+ compare(grandChild1.Universal[prop], data.value2)
+ compare(grandGrandGrandChild1.Universal[prop], data.value2)
+
+ parent.destroy()
+ }
+
+ function test_window() {
+ var parent = window.createObject()
+
+ var control = button.createObject(parent.contentItem)
+ compare(control.Universal.accent, parent.Universal.accent)
+ compare(control.Universal.theme, parent.Universal.theme)
+
+ var styledChild = styledWindow.createObject(window)
+ verify(styledChild.Universal.accent !== parent.Universal.accent)
+ verify(styledChild.Universal.theme !== parent.Universal.theme)
+
+ var unstyledChild = window.createObject(window)
+ compare(unstyledChild.Universal.accent, parent.Universal.accent)
+ compare(unstyledChild.Universal.theme, parent.Universal.theme)
+
+ parent.Universal.accent = Universal.Cyan
+ compare(control.Universal.accent, "#1ba1e2") // Universal.Cyan
+ verify(styledChild.Universal.accent !== Universal.Cyan)
+ // ### TODO: compare(unstyledChild.Universal.accent, Universal.Cyan)
+
+ parent.destroy()
+ }
+
+ function test_loader() {
+ var control = loader.createObject(testCase)
+ control.Universal.accent = Universal.Lime
+ control.active = true
+ compare(control.item.Universal.accent, "#a4c400") // Universal.Lime
+ control.Universal.accent = Universal.Pink
+ compare(control.item.Universal.accent, "#f472d0") // Universal.Pink
+ control.active = false
+ control.Universal.accent = Universal.Brown
+ control.active = true
+ compare(control.item.Universal.accent, "#825a2c") // Universal.Brown
+ control.destroy()
+ }
+
+ function test_swipeView() {
+ var control = swipeView.createObject(testCase)
+ verify(control)
+ var child = control.itemAt(0)
+ verify(child)
+ compare(control.Universal.theme, Universal.Dark)
+ compare(child.Universal.theme, Universal.Dark)
+ control.destroy()
+ }
+
+ function test_menu() {
+ var container = menu.createObject(testCase)
+ verify(container)
+ verify(container.menu)
+ container.menu.open()
+ verify(container.menu.visible)
+ var child = container.menu.itemAt(0)
+ verify(child)
+ compare(container.Universal.theme, Universal.Light)
+ compare(container.menu.Universal.theme, Universal.Dark)
+ compare(child.Universal.theme, Universal.Dark)
+ compare(container.Universal.accent, "#e51400") // Red
+ compare(container.menu.Universal.accent, "#e51400") // Red
+ compare(child.Universal.accent, "#e51400") // Red
+ container.destroy()
+ }
+
+ function test_comboBox() {
+ var window = comboBox.createObject(testCase)
+ verify(window)
+ verify(window.combo)
+ waitForRendering(window.combo)
+ window.combo.forceActiveFocus()
+ verify(window.combo.activeFocus)
+ keyClick(Qt.Key_Space)
+ verify(window.combo.popup.visible)
+ var listView = window.combo.popup.contentItem
+ verify(listView)
+ var child = listView.contentItem.children[0]
+ verify(child)
+ compare(window.Universal.theme, Universal.Light)
+ compare(window.combo.Universal.theme, Universal.Dark)
+ compare(child.Universal.theme, Universal.Dark)
+ compare(window.Universal.accent, "#e51400") // Red
+ compare(window.combo.Universal.accent, "#e51400") // Red
+ compare(child.Universal.accent, "#e51400") // Red
+ window.destroy()
+ }
+
+ function test_windowChange() {
+ var ldr = loader.createObject()
+ verify(ldr)
+
+ var wnd = window.createObject()
+ verify(wnd)
+
+ wnd.Universal.theme = Universal.Dark
+ compare(wnd.Universal.theme, Universal.Dark)
+
+ ldr.active = true
+ verify(ldr.item)
+ compare(ldr.item.Universal.theme, Universal.Light)
+
+ ldr.parent = wnd.contentItem
+ compare(ldr.item.Universal.theme, Universal.Dark)
+
+ wnd.destroy()
+ }
+
+ function test_colors_data() {
+ return [
+ { tag: "accent" }, { tag: "background" }, { tag: "foreground" }
+ ]
+ }
+
+ function test_colors(data) {
+ var control = button.createObject(testCase)
+ verify(control)
+
+ var prop = data.tag
+
+ // Universal.Color - enum
+ control.Universal[prop] = Universal.Red
+ compare(control.Universal[prop], "#e51400")
+
+ // Universal.Color - string
+ control.Universal[prop] = "Emerald"
+ compare(control.Universal[prop], "#008a00")
+
+ // SVG named color
+ control.Universal[prop] = "tomato"
+ compare(control.Universal[prop], "#ff6347")
+
+ // #rrggbb
+ control.Universal[prop] = "#123456"
+ compare(control.Universal[prop], "#123456")
+
+ // #aarrggbb
+ control.Universal[prop] = "#12345678"
+ compare(control.Universal[prop], "#12345678")
+
+ // Qt.rgba() - no alpha
+ control.Universal[prop] = Qt.rgba(0.5, 0.5, 0.5)
+ compare(control.Universal[prop], "#808080")
+
+ // Qt.rgba() - with alpha
+ control.Universal[prop] = Qt.rgba(0.5, 0.5, 0.5, 0.5)
+ compare(control.Universal[prop], "#80808080")
+
+ // unknown
+ ignoreWarning(Qt.resolvedUrl("tst_universal.qml") + ":67:9: QML Button: unknown Universal." + prop + " value: 123")
+ control.Universal[prop] = 123
+ ignoreWarning(Qt.resolvedUrl("tst_universal.qml") + ":67:9: QML Button: unknown Universal." + prop + " value: foo")
+ control.Universal[prop] = "foo"
+ ignoreWarning(Qt.resolvedUrl("tst_universal.qml") + ":67:9: QML Button: unknown Universal." + prop + " value: #1")
+ control.Universal[prop] = "#1"
+
+ control.destroy()
+ }
+
+ function test_font_data() {
+ return [
+ {tag: "Control:pixelSize", type: "Control", attribute: "pixelSize", value: 15, window: 20, pane: 10},
+
+ {tag: "GroupBox:pixelSize", type: "GroupBox", attribute: "pixelSize", value: 15, window: 20, pane: 10},
+ {tag: "GroupBox:weight", type: "GroupBox", attribute: "weight", value: Font.DemiBold, window: Font.Light, pane: Font.Medium},
+
+ {tag: "TabButton:pixelSize", type: "TabButton", attribute: "pixelSize", value: 24, window: 20, pane: 10},
+ {tag: "TabButton:weight", type: "TabButton", attribute: "weight", value: Font.Light, window: Font.Black, pane: Font.Bold}
+ ]
+ }
+
+ function test_font(data) {
+ var window = windowPane.createObject(testCase)
+ verify(window)
+ verify(window.pane)
+
+ var control = Qt.createQmlObject("import QtQuick.Controls; " + data.type + " { }", window.pane)
+ verify(control)
+
+ compare(control.font[data.attribute], data.value)
+
+ window.font[data.attribute] = data.window
+ compare(window.font[data.attribute], data.window)
+ compare(window.pane.font[data.attribute], data.window)
+ compare(control.font[data.attribute], data.window)
+
+ window.pane.font[data.attribute] = data.pane
+ compare(window.font[data.attribute], data.window)
+ compare(window.pane.font[data.attribute], data.pane)
+ compare(control.font[data.attribute], data.pane)
+
+ window.pane.font = undefined
+ compare(window.font[data.attribute], data.window)
+ compare(window.pane.font[data.attribute], data.window)
+ compare(control.font[data.attribute], data.window)
+
+ window.destroy()
+ }
+}
diff --git a/tests/auto/quickcontrols2/qquickuniversalstyle/qtquickcontrols2.conf b/tests/auto/quickcontrols2/qquickuniversalstyle/qtquickcontrols2.conf
new file mode 100644
index 0000000000..8c6dd807e3
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickuniversalstyle/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Universal
diff --git a/tests/auto/quickcontrols2/qquickuniversalstyle/tst_qquickuniversalstyle.cpp b/tests/auto/quickcontrols2/qquickuniversalstyle/tst_qquickuniversalstyle.cpp
new file mode 100644
index 0000000000..c5b6b566cf
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickuniversalstyle/tst_qquickuniversalstyle.cpp
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+QUICK_TEST_MAIN(tst_qquickuniversalstyle)
diff --git a/tests/auto/quickcontrols2/qquickuniversalstyleconf/CMakeLists.txt b/tests/auto/quickcontrols2/qquickuniversalstyleconf/CMakeLists.txt
new file mode 100644
index 0000000000..55c7d78299
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickuniversalstyleconf/CMakeLists.txt
@@ -0,0 +1,61 @@
+# Generated from qquickuniversalstyleconf.pro.
+
+#####################################################################
+## tst_qquickuniversalstyleconf Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickuniversalstyleconf
+ SOURCES
+ tst_qquickuniversalstyleconf.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qquickuniversalstyleconf_resource_files
+ "qtquickcontrols2.conf"
+)
+
+qt_internal_add_resource(tst_qquickuniversalstyleconf "qquickuniversalstyleconf"
+ PREFIX
+ "/"
+ FILES
+ ${qquickuniversalstyleconf_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:qquickuniversalstyleconf.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qquickuniversalstyleconf CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickuniversalstyleconf CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/qquickuniversalstyleconf/data/applicationwindow.qml b/tests/auto/quickcontrols2/qquickuniversalstyleconf/data/applicationwindow.qml
new file mode 100644
index 0000000000..bb16254a15
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickuniversalstyleconf/data/applicationwindow.qml
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Universal
+
+ApplicationWindow {
+ width: 400
+ height: 400
+
+ property alias label: label
+
+ Label {
+ id: label
+ }
+}
diff --git a/tests/auto/cmake/qmlimportscanner/qis_test.qrc b/tests/auto/quickcontrols2/qquickuniversalstyleconf/qquickuniversalstyleconf.qrc
index 1f88fc4e71..53ba645049 100644
--- a/tests/auto/cmake/qmlimportscanner/qis_test.qrc
+++ b/tests/auto/quickcontrols2/qquickuniversalstyleconf/qquickuniversalstyleconf.qrc
@@ -1,6 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
-<file>./main.qml</file>
-<file alias="main.cpp">./main.cpp</file>
+ <file>qtquickcontrols2.conf</file>
</qresource>
</RCC>
diff --git a/tests/auto/quickcontrols2/qquickuniversalstyleconf/qtquickcontrols2.conf b/tests/auto/quickcontrols2/qquickuniversalstyleconf/qtquickcontrols2.conf
new file mode 100644
index 0000000000..0ec1325871
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickuniversalstyleconf/qtquickcontrols2.conf
@@ -0,0 +1,10 @@
+[Controls]
+Style=Universal
+
+[Universal]
+Background=#444444
+Foreground=Red
+Font\PixelSize=22
+
+[Universal\Font]
+Family=Courier
diff --git a/tests/auto/quickcontrols2/qquickuniversalstyleconf/tst_qquickuniversalstyleconf.cpp b/tests/auto/quickcontrols2/qquickuniversalstyleconf/tst_qquickuniversalstyleconf.cpp
new file mode 100644
index 0000000000..1892dd3cf7
--- /dev/null
+++ b/tests/auto/quickcontrols2/qquickuniversalstyleconf/tst_qquickuniversalstyleconf.cpp
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+
+using namespace QQuickControlsTestUtils;
+
+class tst_qquickuniversalstyleconf : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_qquickuniversalstyleconf();
+
+private slots:
+ void conf();
+};
+
+tst_qquickuniversalstyleconf::tst_qquickuniversalstyleconf()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_qquickuniversalstyleconf::conf()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("applicationwindow.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QFont customFont;
+ customFont.setFamilies(QStringList{QLatin1String("Courier")});
+ customFont.setPixelSize(22);
+
+ QQuickApplicationWindow *window = helper.appWindow;
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+ // We specified a custom background color and font, so the window should have them.
+ QCOMPARE(window->property("color").value<QColor>(), QColor("#444444"));
+ QCOMPARE(window->property("font").value<QFont>(), customFont);
+
+ // We specified a custom foreground color and font, so the label should have them.
+ QQuickItem *label = window->property("label").value<QQuickItem*>();
+ QVERIFY(label);
+ QCOMPARE(label->property("color").value<QColor>(), QColor("#E51400"));
+ QCOMPARE(label->property("font").value<QFont>(), customFont);
+}
+
+QTEST_MAIN(tst_qquickuniversalstyleconf)
+
+#include "tst_qquickuniversalstyleconf.moc"
diff --git a/tests/auto/quickcontrols2/revisions/CMakeLists.txt b/tests/auto/quickcontrols2/revisions/CMakeLists.txt
new file mode 100644
index 0000000000..801dd6d66d
--- /dev/null
+++ b/tests/auto/quickcontrols2/revisions/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Generated from revisions.pro.
+
+#####################################################################
+## tst_revisions Test:
+#####################################################################
+
+qt_internal_add_test(tst_revisions
+ SOURCES
+ tst_revisions.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::Qml
+ Qt::QuickControls2
+ Qt::QuickTemplates2
+)
+
+## Scopes:
+#####################################################################
diff --git a/tests/auto/quickcontrols2/revisions/data/dependencies.qml b/tests/auto/quickcontrols2/revisions/data/dependencies.qml
new file mode 100644
index 0000000000..bb95421995
--- /dev/null
+++ b/tests/auto/quickcontrols2/revisions/data/dependencies.qml
@@ -0,0 +1,6 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Controls.Universal
+
+Control { }
diff --git a/tests/auto/quickcontrols2/revisions/tst_revisions.cpp b/tests/auto/quickcontrols2/revisions/tst_revisions.cpp
new file mode 100644
index 0000000000..0d4518cc20
--- /dev/null
+++ b/tests/auto/quickcontrols2/revisions/tst_revisions.cpp
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtTest/qsignalspy.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+class tst_revisions : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_revisions();
+
+private slots:
+ void revisions_data();
+ void revisions();
+
+ void window_data();
+ void window();
+};
+
+tst_revisions::tst_revisions()
+{
+ QQuickStyle::setStyle("Basic");
+}
+
+void tst_revisions::revisions_data()
+{
+ QTest::addColumn<int>("revision");
+
+ // Qt 5.7: 2.0, Qt 5.8: 2.1, Qt 5.9: 2.2...
+ for (int i = 0; i <= 15; ++i)
+ QTest::newRow(qPrintable(QString("2.%1").arg(i))) << i;
+}
+
+void tst_revisions::revisions()
+{
+ QFETCH(int, revision);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QString("import QtQuick; \
+ import QtQuick.Templates 2.%1 as T; \
+ import QtQuick.Controls 2.%1; \
+ import QtQuick.Controls.impl 2.%1; \
+ import QtQuick.Controls.Material 2.%1; \
+ import QtQuick.Controls.Material.impl 2.%1; \
+ import QtQuick.Controls.Universal 2.%1; \
+ import QtQuick.Controls.Universal.impl 2.%1; \
+ Control { }").arg(revision).toUtf8(), QUrl());
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+}
+
+void tst_revisions::window_data()
+{
+ QTest::addColumn<int>("revision");
+ QTest::addColumn<QString>("qml");
+ QTest::addColumn<QString>("error");
+
+ // Qt 5.7: 2.0, Qt 5.8: 2.1, Qt 5.9: 2.2
+ // Note that we can no longer map the same Screen type to different versions
+ // in QtQuick and QtQuick.Controls anymore.
+ for (int i = 0; i <= 2; ++i)
+ QTest::newRow(qPrintable(QString("screen:2.%1").arg(i))) << i << "screen: null" << QString(":1 \"ApplicationWindow.screen\" is not available in QtQuick.Templates 2.%1").arg(i);
+
+ // Qt 5.10: 2.3...
+ for (int i = 3; i <= 15; ++i)
+ QTest::newRow(qPrintable(QString("screen:2.%1").arg(i))) << i << "screen: null" << "";
+}
+
+void tst_revisions::window()
+{
+ QFETCH(int, revision);
+ QFETCH(QString, qml);
+ QFETCH(QString, error);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QString("import QtQuick.Templates 2.%1; ApplicationWindow { %2 }").arg(revision).arg(qml).toUtf8(), QUrl());
+ QScopedPointer<QObject> window(component.create());
+ QCOMPARE(window.isNull(), !error.isEmpty());
+}
+
+QTEST_MAIN(tst_revisions)
+
+#include "tst_revisions.moc"
diff --git a/tests/auto/quickcontrols2/sanity/BLACKLIST b/tests/auto/quickcontrols2/sanity/BLACKLIST
new file mode 100644
index 0000000000..214c6e7c3e
--- /dev/null
+++ b/tests/auto/quickcontrols2/sanity/BLACKLIST
@@ -0,0 +1,24 @@
+[attachedObjects:material/Switch.qml]
+*
+[attachedObjects:material/SwitchDelegate.qml]
+*
+[ids:basic/HorizontalHeaderView.qml]
+*
+[ids:basic/VerticalHeaderView.qml]
+*
+[ids:fusion/HorizontalHeaderView.qml]
+*
+[ids:fusion/VerticalHeaderView.qml]
+*
+[ids:imagine/HorizontalHeaderView.qml]
+*
+[ids:imagine/VerticalHeaderView.qml]
+*
+[ids:material/HorizontalHeaderView.qml]
+*
+[ids:material/VerticalHeaderView.qml]
+*
+[ids:universal/HorizontalHeaderView.qml]
+*
+[ids:universal/VerticalHeaderView.qml]
+*
diff --git a/tests/auto/quickcontrols2/sanity/CMakeLists.txt b/tests/auto/quickcontrols2/sanity/CMakeLists.txt
new file mode 100644
index 0000000000..f81efb0bc1
--- /dev/null
+++ b/tests/auto/quickcontrols2/sanity/CMakeLists.txt
@@ -0,0 +1,43 @@
+# Generated from sanity.pro.
+
+#####################################################################
+## tst_sanity Test:
+#####################################################################
+
+qt_internal_add_test(tst_sanity
+ SOURCES
+ tst_sanity.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Qml
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+)
+
+#### Keys ignored in scope 1:.:.:sanity.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/BLACKLIST"
+# TEMPLATE = "app"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_sanity CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_sanity CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/sanity/data/dependencies.qml b/tests/auto/quickcontrols2/sanity/data/dependencies.qml
new file mode 100644
index 0000000000..280cfd2962
--- /dev/null
+++ b/tests/auto/quickcontrols2/sanity/data/dependencies.qml
@@ -0,0 +1,4 @@
+import QtQuick
+import QtQuick.Controls
+
+Control { }
diff --git a/tests/auto/quickcontrols2/sanity/tst_sanity.cpp b/tests/auto/quickcontrols2/sanity/tst_sanity.cpp
new file mode 100644
index 0000000000..c29a191cd9
--- /dev/null
+++ b/tests/auto/quickcontrols2/sanity/tst_sanity.cpp
@@ -0,0 +1,695 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest>
+#include <QtQml>
+#include <QtCore/private/qhooks_p.h>
+#include <QtCore/qpair.h>
+#include <QtCore/qscopedpointer.h>
+#include <QtCore/qset.h>
+#include <QtQml/private/qqmljsengine_p.h>
+#include <QtQml/private/qqmljslexer_p.h>
+#include <QtQml/private/qqmljsparser_p.h>
+#include <QtQml/private/qqmljsast_p.h>
+#include <QtQml/private/qqmljsastvisitor_p.h>
+#include <QtQml/private/qqmlmetatype_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+
+using namespace QQuickVisualTestUtils;
+using namespace QQuickControlsTestUtils;
+
+Q_GLOBAL_STATIC(QObjectList, qt_qobjects)
+
+extern "C" Q_DECL_EXPORT void qt_addQObject(QObject *object)
+{
+ qt_qobjects->append(object);
+}
+
+extern "C" Q_DECL_EXPORT void qt_removeQObject(QObject *object)
+{
+ qt_qobjects->removeAll(object);
+}
+
+class tst_Sanity : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void init();
+ void cleanup();
+ void initTestCase();
+
+ void jsFiles();
+ void functions();
+ void functions_data();
+ void signalHandlers();
+ void signalHandlers_data();
+ void anchors();
+ void anchors_data();
+ void attachedObjects();
+ void attachedObjects_data();
+ void ids();
+ void ids_data();
+
+private:
+ QMap<QString, QString> sourceQmlFiles;
+ QMap<QString, QString> installedQmlFiles;
+ QQuickStyleHelper styleHelper;
+};
+
+void tst_Sanity::init()
+{
+ qtHookData[QHooks::AddQObject] = reinterpret_cast<quintptr>(&qt_addQObject);
+ qtHookData[QHooks::RemoveQObject] = reinterpret_cast<quintptr>(&qt_removeQObject);
+}
+
+void tst_Sanity::cleanup()
+{
+ qt_qobjects->clear();
+ qtHookData[QHooks::AddQObject] = 0;
+ qtHookData[QHooks::RemoveQObject] = 0;
+}
+
+class BaseValidator : public QQmlJS::AST::Visitor
+{
+public:
+ QString errors() const { return m_errors.join(", "); }
+
+ bool validate(const QString& filePath)
+ {
+ m_errors.clear();
+ m_fileName = QFileInfo(filePath).fileName();
+
+ QFile file(filePath);
+ if (!file.open(QFile::ReadOnly)) {
+ m_errors += QString("%1: failed to open (%2)").arg(m_fileName, file.errorString());
+ return false;
+ }
+
+ QQmlJS::Engine engine;
+ QQmlJS::Lexer lexer(&engine);
+ lexer.setCode(QString::fromUtf8(file.readAll()), /*line = */ 1);
+
+ QQmlJS::Parser parser(&engine);
+ if (!parser.parse()) {
+ const auto diagnosticMessages = parser.diagnosticMessages();
+ for (const QQmlJS::DiagnosticMessage &msg : diagnosticMessages)
+ m_errors += QString("%s:%d : %s").arg(m_fileName).arg(msg.loc.startLine).arg(msg.message);
+ return false;
+ }
+
+ QQmlJS::AST::UiProgram* ast = parser.ast();
+ ast->accept(this);
+ return m_errors.isEmpty();
+ }
+
+protected:
+ void addError(const QString& error, QQmlJS::AST::Node *node)
+ {
+ m_errors += QString("%1:%2 : %3").arg(m_fileName).arg(node->firstSourceLocation().startLine).arg(error);
+ }
+
+ void throwRecursionDepthError() final
+ {
+ m_errors += QString::fromLatin1("%1: Maximum statement or expression depth exceeded")
+ .arg(m_fileName);
+ }
+
+private:
+ QString m_fileName;
+ QStringList m_errors;
+};
+
+void tst_Sanity::initTestCase()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QString("import QtQuick.Templates 2.%1; Control { }").arg(15).toUtf8(), QUrl());
+
+ const QStringList qmlTypeNames = QQmlMetaType::qmlTypeNames();
+
+ // Collect the files from each style in the source tree.
+ QDirIterator it(QQC2_IMPORT_PATH, QStringList() << "*.qml" << "*.js", QDir::Files, QDirIterator::Subdirectories);
+ while (it.hasNext()) {
+ it.next();
+ QFileInfo info = it.fileInfo();
+ if (qmlTypeNames.contains(QStringLiteral("QtQuick.Templates/") + info.baseName()))
+ sourceQmlFiles.insert(info.dir().dirName() + "/" + info.fileName(), info.filePath());
+ }
+
+ // Then, collect the files from each installed style directory.
+ const QVector<QPair<QString, QString>> styleRelativePaths = {
+ { "basic", "QtQuick/Controls/Basic" },
+ { "fusion", "QtQuick/Controls/Fusion" },
+ { "material", "QtQuick/Controls/Material" },
+ { "universal", "QtQuick/Controls/Universal" },
+ // TODO: add native styles: QTBUG-87108
+ };
+ for (const auto &stylePathPair : styleRelativePaths) {
+ forEachControl(&engine, QQC2_IMPORT_PATH, stylePathPair.first, stylePathPair.second, QStringList(),
+ [&](const QString &relativePath, const QUrl &absoluteUrl) {
+ installedQmlFiles.insert(relativePath, absoluteUrl.toLocalFile());
+ });
+ }
+}
+
+void tst_Sanity::jsFiles()
+{
+ QMap<QString, QString>::const_iterator it;
+ for (it = sourceQmlFiles.constBegin(); it != sourceQmlFiles.constEnd(); ++it) {
+ if (QFileInfo(it.value()).suffix() == QStringLiteral("js"))
+ QFAIL(qPrintable(it.value() + ": JS files are not allowed"));
+ }
+}
+
+class FunctionValidator : public BaseValidator
+{
+protected:
+ bool visit(QQmlJS::AST::FunctionDeclaration *node) override
+ {
+ addError("function declarations are not allowed", node);
+ return true;
+ }
+};
+
+void tst_Sanity::functions()
+{
+ QFETCH(QString, control);
+ QFETCH(QString, filePath);
+
+ FunctionValidator validator;
+ if (!validator.validate(filePath))
+ QFAIL(qPrintable(validator.errors()));
+}
+
+void tst_Sanity::functions_data()
+{
+ QTest::addColumn<QString>("control");
+ QTest::addColumn<QString>("filePath");
+
+ QMap<QString, QString>::const_iterator it;
+ for (it = sourceQmlFiles.constBegin(); it != sourceQmlFiles.constEnd(); ++it)
+ QTest::newRow(qPrintable(it.key())) << it.key() << it.value();
+}
+
+class SignalHandlerValidator : public BaseValidator
+{
+protected:
+ static bool isSignalHandler(QStringView name)
+ {
+ return name.length() > 2 && name.startsWith(QLatin1String("on")) && name.at(2).isUpper();
+ }
+
+ bool visit(QQmlJS::AST::UiScriptBinding *node) override
+ {
+ QQmlJS::AST::UiQualifiedId* id = node->qualifiedId;
+ if ((id && isSignalHandler(id->name)) || (id && id->next && isSignalHandler(id->next->name)))
+ addError("signal handlers are not allowed", node);
+ return true;
+ }
+};
+
+void tst_Sanity::signalHandlers()
+{
+ QFETCH(QString, control);
+ QFETCH(QString, filePath);
+
+ SignalHandlerValidator validator;
+ if (!validator.validate(filePath))
+ QFAIL(qPrintable(validator.errors()));
+}
+
+void tst_Sanity::signalHandlers_data()
+{
+ QTest::addColumn<QString>("control");
+ QTest::addColumn<QString>("filePath");
+
+ QMap<QString, QString>::const_iterator it;
+ for (it = sourceQmlFiles.constBegin(); it != sourceQmlFiles.constEnd(); ++it)
+ QTest::newRow(qPrintable(it.key())) << it.key() << it.value();
+}
+
+class AnchorValidator : public BaseValidator
+{
+protected:
+ bool visit(QQmlJS::AST::UiScriptBinding *node) override
+ {
+ QQmlJS::AST::UiQualifiedId* id = node->qualifiedId;
+ if (id && id->name == QStringLiteral("anchors"))
+ addError("anchors are not allowed", node);
+ return true;
+ }
+};
+
+void tst_Sanity::anchors()
+{
+ QFETCH(QString, control);
+ QFETCH(QString, filePath);
+
+ AnchorValidator validator;
+ if (!validator.validate(filePath))
+ QFAIL(qPrintable(validator.errors()));
+}
+
+void tst_Sanity::anchors_data()
+{
+ QTest::addColumn<QString>("control");
+ QTest::addColumn<QString>("filePath");
+
+ QMap<QString, QString>::const_iterator it;
+ for (it = sourceQmlFiles.constBegin(); it != sourceQmlFiles.constEnd(); ++it)
+ QTest::newRow(qPrintable(it.key())) << it.key() << it.value();
+}
+
+class IdValidator : public BaseValidator
+{
+public:
+ IdValidator() : m_depth(0) { }
+
+protected:
+ bool visit(QQmlJS::AST::UiObjectBinding *) override
+ {
+ ++m_depth;
+ return true;
+ }
+
+ void endVisit(QQmlJS::AST::UiObjectBinding *) override
+ {
+ --m_depth;
+ }
+
+ bool visit(QQmlJS::AST::UiScriptBinding *node) override
+ {
+ if (m_depth == 0)
+ return true;
+
+ QQmlJS::AST::UiQualifiedId *id = node->qualifiedId;
+ if (id && id->name == QStringLiteral("id"))
+ addError(QString("Internal IDs are not allowed (%1)").arg(extractName(node->statement)), node);
+ return true;
+ }
+
+private:
+ QString extractName(QQmlJS::AST::Statement *statement)
+ {
+ QQmlJS::AST::ExpressionStatement *expressionStatement = static_cast<QQmlJS::AST::ExpressionStatement *>(statement);
+ if (!expressionStatement)
+ return QString();
+
+ QQmlJS::AST::IdentifierExpression *expression = static_cast<QQmlJS::AST::IdentifierExpression *>(expressionStatement->expression);
+ if (!expression)
+ return QString();
+
+ return expression->name.toString();
+ }
+
+ int m_depth;
+};
+
+void tst_Sanity::ids()
+{
+ QFETCH(QString, control);
+ QFETCH(QString, filePath);
+
+ IdValidator validator;
+ if (!validator.validate(filePath))
+ QFAIL(qPrintable(validator.errors()));
+}
+
+void tst_Sanity::ids_data()
+{
+ QTest::addColumn<QString>("control");
+ QTest::addColumn<QString>("filePath");
+
+ QMap<QString, QString>::const_iterator it;
+ for (it = sourceQmlFiles.constBegin(); it != sourceQmlFiles.constEnd(); ++it)
+ QTest::newRow(qPrintable(it.key())) << it.key() << it.value();
+}
+
+typedef QPair<QString, QString> StringPair;
+typedef QSet<StringPair> StringPairSet;
+
+void tst_Sanity::attachedObjects()
+{
+ QFETCH(QStringList, ignoredAttachedClassNames);
+ QFETCH(StringPairSet, expectedAttachedClassNames);
+
+ const QString tagStr = QString::fromLatin1(QTest::currentDataTag());
+ QStringList styleAndFileName = tagStr.split('/');
+ QCOMPARE(styleAndFileName.size(), 2);
+ QString style = styleAndFileName.first();
+
+ if (styleHelper.updateStyle(style))
+ qt_qobjects->clear();
+
+ QString styleRelativePath = tagStr;
+ styleRelativePath[0] = styleRelativePath.at(0).toLower();
+ // Get the absolute path to the installed file.
+ const QString controlFilePath = installedQmlFiles.value(styleRelativePath);
+
+ QQmlComponent component(styleHelper.engine.data());
+ component.loadUrl(QUrl::fromLocalFile(controlFilePath));
+
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY2(object.data(), qPrintable(component.errorString()));
+
+ // The goal of this test is to check that every unique attached type is used only once
+ // within each QML file. To track this, we remove expected pairs of class names as we
+ // encounter them, so that we know when something unexpected shows up.
+ StringPairSet remainingAttachedClassNames = expectedAttachedClassNames;
+
+ // Intentional copy, as QDebug creates a QObject-derived instance which would modify the list.
+ const auto qobjectsCopy = *qt_qobjects;
+ for (QObject *object : qobjectsCopy) {
+ const QString attachedClassName = object->metaObject()->className();
+ if (object->parent() == styleHelper.engine.data())
+ continue; // allow "global" instances
+
+ // objects without parents would be singletons such as QQuickFusionStyle, and we're not interested in them.
+ if ((attachedClassName.endsWith("Attached") || attachedClassName.endsWith("Style")) && object->parent()) {
+ QString attacheeClassName = QString::fromLatin1(object->parent()->metaObject()->className());
+ const QString qmlTypeToken = QStringLiteral("QMLTYPE");
+ if (attacheeClassName.contains(qmlTypeToken)) {
+ // Remove the numbers from the class name, as they can change between runs; e.g.:
+ // Menu_QMLTYPE_222 => Menu_QMLTYPE
+ const int qmlTypeTokenIndex = attacheeClassName.indexOf(qmlTypeToken);
+ QVERIFY(qmlTypeTokenIndex != -1);
+ attacheeClassName = attacheeClassName.mid(0, attacheeClassName.indexOf(qmlTypeToken) + qmlTypeToken.size());
+ }
+
+ const StringPair classNamePair = { attachedClassName, attacheeClassName };
+ QVERIFY2(remainingAttachedClassNames.contains(classNamePair), qPrintable(QString::fromLatin1(
+ "Found an unexpected usage of an attached type: %1 is attached to %2. Either an incorrect usage was added, or the list of expected usages needs to be updated. Expected attached class names for %3 are:\n %4")
+ .arg(attachedClassName).arg(attacheeClassName).arg(tagStr).arg(QDebug::toString(expectedAttachedClassNames))));
+ remainingAttachedClassNames.remove(classNamePair);
+ }
+ }
+
+ QVERIFY2(remainingAttachedClassNames.isEmpty(), qPrintable(QString::fromLatin1(
+ "Not all expected attached class name usages were found; the following usages are missing:\n %1")
+ .arg(QDebug::toString(remainingAttachedClassNames))));
+}
+
+void tst_Sanity::attachedObjects_data()
+{
+ QTest::addColumn<QStringList>("ignoredAttachedClassNames");
+ QTest::addColumn<StringPairSet>("expectedAttachedClassNames");
+
+ QStringList ignoredNames;
+
+ // We used to just check that there were no duplicate QMetaObject class names,
+ // but that doesn't account for attached objects loaded by composite controls,
+ // such as DialogButtonBox, which is loaded by Dialog.
+ // So now we list all controls and the attached types we expect them to use.
+
+ QTest::newRow("Basic/AbstractButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Action.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ActionGroup.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ApplicationWindow.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/BusyIndicator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Button.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ButtonGroup.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/CheckBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/CheckDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ComboBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Container.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Control.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/DelayButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Dial.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Dialog.qml") << ignoredNames << StringPairSet {{ "QQuickOverlayAttached", "Dialog_QMLTYPE" }};
+ QTest::newRow("Basic/DialogButtonBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Drawer.qml") << ignoredNames << StringPairSet {{ "QQuickOverlayAttached", "Drawer_QMLTYPE" }};
+ QTest::newRow("Basic/Frame.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/GroupBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/HorizontalHeaderView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ItemDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Label.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Menu.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Menu_QMLTYPE" },
+ { "QQuickScrollIndicatorAttached", "QQuickListView" },
+ { "QQuickWindowAttached", "QQuickListView" }
+ };
+ QTest::newRow("Basic/MenuBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/MenuBarItem.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/MenuItem.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/MenuSeparator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Page.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/PageIndicator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Pane.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Popup.qml") << ignoredNames << StringPairSet {{ "QQuickOverlayAttached", "Popup_QMLTYPE" }};
+ QTest::newRow("Basic/ProgressBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/RadioButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/RadioDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/RangeSlider.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/RoundButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ScrollBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ScrollIndicator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ScrollView.qml") << ignoredNames << StringPairSet {{ "QQuickScrollBarAttached", "ScrollView_QMLTYPE" }};
+ QTest::newRow("Basic/Slider.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/SpinBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/SplitView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/StackView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/SwipeDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/SwipeView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Switch.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/SwitchDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/TabBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/TabButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/TextArea.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/TextField.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ToolBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ToolButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ToolSeparator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/ToolTip.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/Tumbler.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Basic/VerticalHeaderView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ApplicationWindow.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/BusyIndicator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Button.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/CheckBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/CheckDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ComboBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/DelayButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Dial.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Dialog.qml") << ignoredNames << StringPairSet {{ "QQuickOverlayAttached", "Dialog_QMLTYPE" }};
+ QTest::newRow("Fusion/DialogButtonBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Drawer.qml") << ignoredNames << StringPairSet {{ "QQuickOverlayAttached", "Drawer_QMLTYPE" }};
+ QTest::newRow("Fusion/Frame.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/GroupBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/HorizontalHeaderView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ItemDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Label.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Menu.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Menu_QMLTYPE" },
+ { "QQuickScrollIndicatorAttached", "QQuickListView" },
+ { "QQuickWindowAttached", "QQuickListView" }
+ };
+ QTest::newRow("Fusion/MenuBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/MenuBarItem.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/MenuItem.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/MenuSeparator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Page.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/PageIndicator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Pane.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Popup.qml") << ignoredNames << StringPairSet {{ "QQuickOverlayAttached", "Popup_QMLTYPE" }};
+ QTest::newRow("Fusion/ProgressBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/RadioButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/RadioDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/RangeSlider.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/RoundButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ScrollBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ScrollIndicator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Slider.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/SpinBox.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/SplitView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/SwipeDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Switch.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/SwitchDelegate.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/TabBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/TabButton.qml") << ignoredNames << StringPairSet {{ "QQuickTabBarAttached", "TabButton_QMLTYPE" }};
+ QTest::newRow("Fusion/TextArea.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/TextField.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ToolBar.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ToolButton.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ToolSeparator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/ToolTip.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/Tumbler.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Fusion/VerticalHeaderView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Material/ApplicationWindow.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ApplicationWindow_QMLTYPE" }};
+ QTest::newRow("Material/BusyIndicator.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "BusyIndicator_QMLTYPE" }};
+ QTest::newRow("Material/Button.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "Button_QMLTYPE" }};
+ QTest::newRow("Material/CheckBox.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "CheckBox_QMLTYPE" }};
+ QTest::newRow("Material/CheckDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "CheckDelegate_QMLTYPE" }};
+ QTest::newRow("Material/ComboBox.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ComboBox_QMLTYPE" }};
+ QTest::newRow("Material/DelayButton.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "DelayButton_QMLTYPE" }};
+ QTest::newRow("Material/Dial.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "Dial_QMLTYPE" }};
+ QTest::newRow("Material/Dialog.qml") << ignoredNames << StringPairSet {
+ { "QQuickMaterialStyle", "DialogButtonBox_QMLTYPE" },
+ { "QQuickOverlayAttached", "Dialog_QMLTYPE" },
+ { "QQuickMaterialStyle", "Dialog_QMLTYPE" },
+ { "QQuickMaterialStyle", "Label_QMLTYPE" }
+ };
+ QTest::newRow("Material/DialogButtonBox.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "DialogButtonBox_QMLTYPE" }};
+ QTest::newRow("Material/Drawer.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Drawer_QMLTYPE" },
+ { "QQuickMaterialStyle", "Drawer_QMLTYPE" }
+ };
+ QTest::newRow("Material/Frame.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "Frame_QMLTYPE" }};
+ QTest::newRow("Material/GroupBox.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "GroupBox_QMLTYPE" }};
+ QTest::newRow("Material/HorizontalHeaderView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Material/ItemDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ItemDelegate_QMLTYPE" }};
+ QTest::newRow("Material/Label.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "Label_QMLTYPE" }};
+ QTest::newRow("Material/Menu.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Menu_QMLTYPE" },
+ { "QQuickMaterialStyle", "Menu_QMLTYPE" },
+ { "QQuickScrollIndicatorAttached", "QQuickListView" },
+ { "QQuickWindowAttached", "QQuickListView" },
+ { "QQuickMaterialStyle", "ScrollIndicator_QMLTYPE" }
+ };
+ QTest::newRow("Material/MenuBar.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "MenuBar_QMLTYPE" }};
+ QTest::newRow("Material/MenuBarItem.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "MenuBarItem_QMLTYPE" }};
+ QTest::newRow("Material/MenuItem.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "MenuItem_QMLTYPE" }};
+ QTest::newRow("Material/MenuSeparator.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "MenuSeparator_QMLTYPE" }};
+ QTest::newRow("Material/Page.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "Page_QMLTYPE" }};
+ QTest::newRow("Material/PageIndicator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Material/Pane.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "Pane_QMLTYPE" }};
+ QTest::newRow("Material/Popup.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Popup_QMLTYPE" },
+ { "QQuickMaterialStyle", "Popup_QMLTYPE" }
+ };
+ QTest::newRow("Material/ProgressBar.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ProgressBar_QMLTYPE" }};
+ QTest::newRow("Material/RadioButton.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "RadioButton_QMLTYPE" }};
+ QTest::newRow("Material/RadioDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "RadioDelegate_QMLTYPE" }};
+ QTest::newRow("Material/RangeSlider.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "RangeSlider_QMLTYPE" }};
+ QTest::newRow("Material/RoundButton.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "RoundButton_QMLTYPE" }};
+ QTest::newRow("Material/ScrollBar.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ScrollBar_QMLTYPE" }};
+ QTest::newRow("Material/ScrollIndicator.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ScrollIndicator_QMLTYPE" }};
+ QTest::newRow("Material/Slider.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "Slider_QMLTYPE" }};
+ QTest::newRow("Material/SpinBox.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "SpinBox_QMLTYPE" }};
+ QTest::newRow("Material/SplitView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Material/StackView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Material/SwipeDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "SwipeDelegate_QMLTYPE" }};
+ QTest::newRow("Material/SwipeView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Material/Switch.qml") << ignoredNames << StringPairSet {
+ { "QQuickMaterialStyle", "SwitchIndicator_QMLTYPE" },
+ { "QQuickMaterialStyle", "Switch_QMLTYPE" }
+ };
+ QTest::newRow("Material/SwitchDelegate.qml") << ignoredNames << StringPairSet {
+ { "QQuickMaterialStyle", "SwitchDelegate_QMLTYPE" },
+ { "QQuickMaterialStyle", "SwitchIndicator_QMLTYPE" }
+ };
+ QTest::newRow("Material/TabBar.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "TabBar_QMLTYPE" }};
+ QTest::newRow("Material/TabButton.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "TabButton_QMLTYPE" }};
+ QTest::newRow("Material/TextArea.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "TextArea_QMLTYPE" }};
+ QTest::newRow("Material/TextField.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "TextField_QMLTYPE" }};
+ QTest::newRow("Material/ToolBar.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ToolBar_QMLTYPE" }};
+ QTest::newRow("Material/ToolButton.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ToolButton_QMLTYPE" }};
+ QTest::newRow("Material/ToolSeparator.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ToolSeparator_QMLTYPE" }};
+ QTest::newRow("Material/ToolTip.qml") << ignoredNames << StringPairSet {{ "QQuickMaterialStyle", "ToolTip_QMLTYPE" }};
+ QTest::newRow("Material/Tumbler.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Material/VerticalHeaderView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Universal/ApplicationWindow.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ApplicationWindow_QMLTYPE" }};
+ QTest::newRow("Universal/BusyIndicator.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "BusyIndicator_QMLTYPE" }};
+ QTest::newRow("Universal/Button.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "Button_QMLTYPE" }};
+ QTest::newRow("Universal/CheckBox.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "CheckBox_QMLTYPE" }};
+ QTest::newRow("Universal/CheckDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "CheckDelegate_QMLTYPE" }};
+ QTest::newRow("Universal/ComboBox.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ComboBox_QMLTYPE" }};
+ QTest::newRow("Universal/DelayButton.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "DelayButton_QMLTYPE" }};
+ QTest::newRow("Universal/Dial.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "Dial_QMLTYPE" }};
+ QTest::newRow("Universal/Dialog.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Dialog_QMLTYPE" },
+ { "QQuickUniversalStyle", "Label_QMLTYPE" },
+ { "QQuickUniversalStyle", "Dialog_QMLTYPE" },
+ { "QQuickUniversalStyle", "DialogButtonBox_QMLTYPE" }
+ };
+ QTest::newRow("Universal/DialogButtonBox.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "DialogButtonBox_QMLTYPE" }};
+ QTest::newRow("Universal/Drawer.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Drawer_QMLTYPE" },
+ { "QQuickUniversalStyle", "Drawer_QMLTYPE" }
+ };
+ QTest::newRow("Universal/Frame.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "Frame_QMLTYPE" }};
+ QTest::newRow("Universal/GroupBox.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "GroupBox_QMLTYPE" }};
+ QTest::newRow("Universal/HorizontalHeaderView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Universal/ItemDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ItemDelegate_QMLTYPE" }};
+ QTest::newRow("Universal/Label.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "Label_QMLTYPE" }};
+ QTest::newRow("Universal/Menu.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Menu_QMLTYPE" },
+ { "QQuickUniversalStyle", "Menu_QMLTYPE" },
+ { "QQuickScrollIndicatorAttached", "QQuickListView" },
+ { "QQuickWindowAttached", "QQuickListView" },
+ { "QQuickUniversalStyle", "ScrollIndicator_QMLTYPE" }
+ };
+ QTest::newRow("Universal/MenuBar.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "MenuBar_QMLTYPE" }};
+ QTest::newRow("Universal/MenuBarItem.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "MenuBarItem_QMLTYPE" }};
+ QTest::newRow("Universal/MenuItem.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "MenuItem_QMLTYPE" }};
+ QTest::newRow("Universal/MenuSeparator.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "MenuSeparator_QMLTYPE" }};
+ QTest::newRow("Universal/Page.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "Page_QMLTYPE" }};
+ QTest::newRow("Universal/PageIndicator.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Universal/Pane.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "Pane_QMLTYPE" }};
+ QTest::newRow("Universal/Popup.qml") << ignoredNames << StringPairSet {
+ { "QQuickOverlayAttached", "Popup_QMLTYPE" },
+ { "QQuickUniversalStyle", "Popup_QMLTYPE" }
+ };
+ QTest::newRow("Universal/ProgressBar.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ProgressBar_QMLTYPE" }};
+ QTest::newRow("Universal/RadioButton.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "RadioButton_QMLTYPE" }};
+ QTest::newRow("Universal/RadioDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "RadioDelegate_QMLTYPE" }};
+ QTest::newRow("Universal/RangeSlider.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "RangeSlider_QMLTYPE" }};
+ QTest::newRow("Universal/RoundButton.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "RoundButton_QMLTYPE" }};
+ QTest::newRow("Universal/ScrollBar.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ScrollBar_QMLTYPE" }};
+ QTest::newRow("Universal/ScrollIndicator.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ScrollIndicator_QMLTYPE" }};
+ QTest::newRow("Universal/Slider.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "Slider_QMLTYPE" }};
+ QTest::newRow("Universal/SpinBox.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "SpinBox_QMLTYPE" }};
+ QTest::newRow("Universal/SplitView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Universal/StackView.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Universal/SwipeDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "SwipeDelegate_QMLTYPE" }};
+ QTest::newRow("Universal/Switch.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "Switch_QMLTYPE" }};
+ QTest::newRow("Universal/SwitchDelegate.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "SwitchDelegate_QMLTYPE" }};
+ QTest::newRow("Universal/TabBar.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "TabBar_QMLTYPE" }};
+ QTest::newRow("Universal/TabButton.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "TabButton_QMLTYPE" }};
+ QTest::newRow("Universal/TextArea.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "TextArea_QMLTYPE" }};
+ QTest::newRow("Universal/TextField.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "TextField_QMLTYPE" }};
+ QTest::newRow("Universal/ToolBar.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ToolBar_QMLTYPE" }};
+ QTest::newRow("Universal/ToolButton.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ToolButton_QMLTYPE" }};
+ QTest::newRow("Universal/ToolSeparator.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ToolSeparator_QMLTYPE" }};
+ QTest::newRow("Universal/ToolTip.qml") << ignoredNames << StringPairSet {{ "QQuickUniversalStyle", "ToolTip_QMLTYPE" }};
+ QTest::newRow("Universal/Tumbler.qml") << ignoredNames << StringPairSet {};
+ QTest::newRow("Universal/VerticalHeaderView.qml") << ignoredNames << StringPairSet {};
+}
+
+QTEST_MAIN(tst_Sanity)
+
+#include "tst_sanity.moc"
diff --git a/tests/auto/quickcontrols2/snippets/CMakeLists.txt b/tests/auto/quickcontrols2/snippets/CMakeLists.txt
new file mode 100644
index 0000000000..ce76c4fbc5
--- /dev/null
+++ b/tests/auto/quickcontrols2/snippets/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Generated from snippets.pro.
+
+#####################################################################
+## tst_snippets Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_snippets
+ SOURCES
+ tst_snippets.cpp
+ DEFINES
+ QQC2_SNIPPETS_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2/doc/snippets\\\"
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::Quick
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickTemplates2
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qmake_immediate_resource_files
+ "qtquickcontrols2.conf"
+)
+
+qt_internal_add_resource(tst_snippets "qmake_immediate"
+ PREFIX
+ "/"
+ FILES
+ ${qmake_immediate_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:snippets.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/data/*.qml"
+# TEMPLATE = "app"
+
+## Scopes:
+#####################################################################
diff --git a/tests/auto/quickcontrols2/snippets/data/dependencies.qml b/tests/auto/quickcontrols2/snippets/data/dependencies.qml
new file mode 100644
index 0000000000..8785d0b08e
--- /dev/null
+++ b/tests/auto/quickcontrols2/snippets/data/dependencies.qml
@@ -0,0 +1,7 @@
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Controls.Universal
+
+Control { }
diff --git a/tests/auto/quickcontrols2/snippets/qtquickcontrols2.conf b/tests/auto/quickcontrols2/snippets/qtquickcontrols2.conf
new file mode 100644
index 0000000000..bd15777684
--- /dev/null
+++ b/tests/auto/quickcontrols2/snippets/qtquickcontrols2.conf
@@ -0,0 +1,3 @@
+# Specify the style here so that it can be overridden by e.g. command line arguments.
+[Controls]
+Style=Basic
diff --git a/tests/auto/quickcontrols2/snippets/tst_snippets.cpp b/tests/auto/quickcontrols2/snippets/tst_snippets.cpp
new file mode 100644
index 0000000000..6be53d274e
--- /dev/null
+++ b/tests/auto/quickcontrols2/snippets/tst_snippets.cpp
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest>
+#include <QtQuick>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+
+typedef QPair<QString, QString> QStringPair;
+
+class tst_Snippets : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+
+ void verify();
+ void verify_data();
+
+private:
+ void loadSnippet(const QString &source);
+
+ bool takeScreenshots;
+ QMap<QString, QStringPair> snippetPaths;
+};
+
+static QMap<QString, QStringPair> findSnippets(const QDir &inputDir, const QDir &outputDir = QDir())
+{
+ QMap<QString, QStringPair> snippetPaths;
+ QDirIterator it(inputDir.path(), QStringList() << "qtquick*.qml" << "qtlabs*.qml", QDir::Files | QDir::Readable);
+ while (it.hasNext()) {
+ QFileInfo fi(it.next());
+ const QString outDirPath = !outputDir.path().isEmpty() ? outputDir.filePath(fi.baseName() + ".png") : QString();
+ snippetPaths.insert(fi.baseName(), qMakePair(fi.filePath(), outDirPath));
+ }
+ return snippetPaths;
+}
+
+void tst_Snippets::initTestCase()
+{
+ qInfo() << "Snippets are taken from" << QQC2_SNIPPETS_PATH;
+
+ QDir snippetsDir(QQC2_SNIPPETS_PATH);
+ QVERIFY(!snippetsDir.path().isEmpty());
+
+ QDir screenshotsDir(QDir::current().filePath("screenshots"));
+
+ takeScreenshots = qEnvironmentVariableIntValue("SCREENSHOTS");
+ if (takeScreenshots)
+ QVERIFY(screenshotsDir.exists() || QDir::current().mkpath("screenshots"));
+
+ snippetPaths = findSnippets(snippetsDir, screenshotsDir);
+ QVERIFY(!snippetPaths.isEmpty());
+}
+
+Q_DECLARE_METATYPE(QList<QQmlError>)
+
+void tst_Snippets::verify()
+{
+ QFETCH(QString, input);
+ QFETCH(QString, output);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+
+ qRegisterMetaType<QList<QQmlError> >();
+ QSignalSpy warnings(&engine, SIGNAL(warnings(QList<QQmlError>)));
+ QVERIFY(warnings.isValid());
+
+ QUrl url = QUrl::fromLocalFile(input);
+ component.loadUrl(url);
+
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY2(!root.isNull(), qPrintable(component.errorString()));
+
+ QCOMPARE(component.status(), QQmlComponent::Ready);
+ QVERIFY(component.errors().isEmpty());
+
+ QVERIFY(warnings.isEmpty());
+
+ if (takeScreenshots) {
+ const QString currentDataTag = QLatin1String(QTest::currentDataTag());
+ static const QString applicationStyle = QQuickStyle::name().isEmpty() ? "Basic" : QQuickStyle::name();
+ static const QStringList builtInStyles = QQuickStylePrivate::builtInStyles();
+
+ bool isStyledSnippet = false;
+ const QString snippetStyle = currentDataTag.section("-", 1, 1);
+ for (const QString &style : builtInStyles) {
+ if (!snippetStyle.compare(style, Qt::CaseInsensitive)) {
+ if (applicationStyle != style)
+ QSKIP(qPrintable(QString("%1 style specific snippet. Running with the %2 style.").arg(style, applicationStyle)));
+ isStyledSnippet = true;
+ }
+ }
+
+ if (!isStyledSnippet && !applicationStyle.isEmpty()) {
+ int index = output.indexOf("-", output.lastIndexOf("/"));
+ if (index != -1)
+ output.insert(index, "-" + applicationStyle.toLower());
+ }
+
+ QQuickWindow *window = qobject_cast<QQuickWindow *>(root.data());
+ if (!window) {
+ QQuickView *view = new QQuickView;
+ view->setContent(url, &component, root.data());
+ window = view;
+ }
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window));
+
+ QSharedPointer<QQuickItemGrabResult> result = window->contentItem()->grabToImage();
+ QSignalSpy spy(result.data(), SIGNAL(ready()));
+ QVERIFY(spy.isValid());
+ QVERIFY(spy.wait());
+ QVERIFY(result->saveToFile(output));
+
+ window->close();
+ }
+}
+
+void tst_Snippets::verify_data()
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("output");
+
+ QMap<QString, QStringPair>::const_iterator it;
+ for (it = snippetPaths.constBegin(); it != snippetPaths.constEnd(); ++it)
+ QTest::newRow(qPrintable(it.key())) << it.value().first << it.value().second;
+}
+
+QTEST_MAIN(tst_Snippets)
+
+#include "tst_snippets.moc"
diff --git a/tests/auto/quickcontrols2/styleimports/CMakeLists.txt b/tests/auto/quickcontrols2/styleimports/CMakeLists.txt
new file mode 100644
index 0000000000..0bdcce6774
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/CMakeLists.txt
@@ -0,0 +1,65 @@
+# Generated from styleimports.pro.
+
+#####################################################################
+## tst_styleimports Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_styleimports
+ SOURCES
+ tst_styleimports.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qmake_resourcestyle_resource_files
+ "resources/ResourceStyle/Button.qml"
+ "resources/ResourceStyle/qmldir"
+)
+
+qt_internal_add_resource(tst_styleimports "qmake_resourcestyle"
+ PREFIX
+ "/"
+ BASE
+ "resources"
+ FILES
+ ${qmake_resourcestyle_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:styleimports.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml" "data/qmldir" "data/FileSystemStyle/*.qml" "data/FileSystemStyle/qmldir" "data/PlatformStyle/*.qml" "data/PlatformStyle/+linux/*.qml" "data/PlatformStyle/+macos/*.qml" "data/PlatformStyle/+windows/*.qml" "data/PlatformStyle/qmldir"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_styleimports CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_styleimports CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/styleimports/data/+FileSystemStyle/CustomComponent.qml b/tests/auto/quickcontrols2/styleimports/data/+FileSystemStyle/CustomComponent.qml
new file mode 100644
index 0000000000..ee5ffe1151
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/+FileSystemStyle/CustomComponent.qml
@@ -0,0 +1,5 @@
+import QtQuick
+
+Item {
+ objectName: "+FileSystemStyle/CustomComponent.qml"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/CustomComponent.qml b/tests/auto/quickcontrols2/styleimports/data/CustomComponent.qml
new file mode 100644
index 0000000000..220630f812
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/CustomComponent.qml
@@ -0,0 +1,5 @@
+import QtQuick
+
+Item {
+ objectName: "CustomComponent.qml"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/applicationWindowWithButton.qml b/tests/auto/quickcontrols2/styleimports/data/applicationWindowWithButton.qml
new file mode 100644
index 0000000000..ba6af22ce9
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/applicationWindowWithButton.qml
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ title: "Test Application Window"
+ width: 400
+ height: 400
+
+ property alias button: button
+
+ Button {
+ id: button
+ }
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/customStyleSelector.qml b/tests/auto/quickcontrols2/styleimports/data/customStyleSelector.qml
new file mode 100644
index 0000000000..7d36842131
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/customStyleSelector.qml
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ title: "Test Application Window"
+ width: 400
+ height: 400
+
+ property alias customComponent: customComponent
+
+ CustomComponent {
+ id: customComponent
+ }
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Action.qml b/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Action.qml
new file mode 100644
index 0000000000..fcf336e983
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Action.qml
@@ -0,0 +1,4 @@
+import QtQuick.Templates as T
+T.Action {
+ objectName: "FileSystemStyle"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Button.qml b/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Button.qml
new file mode 100644
index 0000000000..a5078b14c2
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Button.qml
@@ -0,0 +1,4 @@
+import QtQuick.Templates as T
+T.Button {
+ objectName: "FileSystemStyle"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Label.qml b/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Label.qml
new file mode 100644
index 0000000000..3233d3646b
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/Label.qml
@@ -0,0 +1,4 @@
+import QtQuick.Templates as T
+T.Label {
+ objectName: "FileSystemStyle"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/qmldir b/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/qmldir
new file mode 100644
index 0000000000..5deb93b653
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/FileSystemStyle/qmldir
@@ -0,0 +1,4 @@
+module FileSystemStyle
+Action 2.15 Action.qml
+Button 2.15 Button.qml
+Label 2.15 Label.qml
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+linux/Button.qml b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+linux/Button.qml
new file mode 100644
index 0000000000..15c04d7721
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+linux/Button.qml
@@ -0,0 +1,4 @@
+import QtQuick.Templates as T
+T.Button {
+ objectName: "PlatformStyle/+linux"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+macos/Button.qml b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+macos/Button.qml
new file mode 100644
index 0000000000..6c07ec028a
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+macos/Button.qml
@@ -0,0 +1,4 @@
+import QtQuick.Templates as T
+T.Button {
+ objectName: "PlatformStyle/+macos"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+windows/Button.qml b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+windows/Button.qml
new file mode 100644
index 0000000000..6a94679c2b
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/+windows/Button.qml
@@ -0,0 +1,4 @@
+import QtQuick.Templates as T
+T.Button {
+ objectName: "PlatformStyle/+windows"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/Button.qml b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/Button.qml
new file mode 100644
index 0000000000..fce35efdf7
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/Button.qml
@@ -0,0 +1,4 @@
+import QtQuick.Templates as T
+T.Button {
+ objectName: "PlatformStyle/Button.qml"
+}
diff --git a/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/qmldir b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/qmldir
new file mode 100644
index 0000000000..ce2545171b
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/data/styles/PlatformStyle/qmldir
@@ -0,0 +1,2 @@
+module PlatformStyle
+Button 2.15 Button.qml
diff --git a/tests/auto/quickcontrols2/styleimports/resources/ResourceStyle/Button.qml b/tests/auto/quickcontrols2/styleimports/resources/ResourceStyle/Button.qml
new file mode 100644
index 0000000000..3a97e9de1f
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/resources/ResourceStyle/Button.qml
@@ -0,0 +1,9 @@
+import QtQuick.Controls.impl 2.15
+import QtQuick.Templates 2.15 as T
+T.Button {
+ objectName: "ResourceStyle"
+
+ contentItem: IconLabel {
+ color: "salmon"
+ }
+}
diff --git a/tests/auto/quickcontrols2/styleimports/resources/ResourceStyle/qmldir b/tests/auto/quickcontrols2/styleimports/resources/ResourceStyle/qmldir
new file mode 100644
index 0000000000..4cb1a835bd
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/resources/ResourceStyle/qmldir
@@ -0,0 +1,2 @@
+module ResourceStyle
+Button 2.15 Button.qml
diff --git a/tests/auto/quickcontrols2/styleimports/tst_styleimports.cpp b/tests/auto/quickcontrols2/styleimports/tst_styleimports.cpp
new file mode 100644
index 0000000000..bdd3a40cea
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimports/tst_styleimports.cpp
@@ -0,0 +1,273 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qregularexpression.h>
+#include <QtTest/qtest.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQml/qqmlapplicationengine.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQuick/qquickwindow.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+#include <QtQuickControls2Impl/private/qquickiconlabel_p.h>
+
+class tst_StyleImports : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_StyleImports();
+
+private slots:
+ void initTestCase() override;
+
+ void cleanup();
+
+ void select_data();
+ void select();
+
+ void platformSelectors();
+ void customStyleSelector();
+
+ void fallbackStyleShouldNotOverwriteTheme_data();
+ void fallbackStyleShouldNotOverwriteTheme();
+};
+
+tst_StyleImports::tst_StyleImports()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_StyleImports::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+}
+
+void tst_StyleImports::cleanup()
+{
+ qmlClearTypeRegistrations();
+}
+
+void tst_StyleImports::select_data()
+{
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QString>("style");
+ QTest::addColumn<QString>("fallback");
+ QTest::addColumn<QString>("expected");
+
+ // Action.qml exists in the FileSystemStyle style and the Basic style.
+ QTest::newRow("control=Action,style=basic,fallback=empty") << "Action.qml" << "Basic" << "" << "Basic";
+ QTest::newRow("control=Action,style=fs,fallback=empty") << "Action.qml" << "FileSystemStyle" << "" << "FileSystemStyle";
+ QTest::newRow("control=Action,style=qrc,fallback=empty") << "Action.qml" << "ResourceStyle" << "" << "Basic";
+ QTest::newRow("control=Action,style=nosuch,fallback=empty") << "Action.qml" << "NoSuchStyle" << "" << "Basic";
+
+ QTest::newRow("control=Action,style=basic,fallback=mat") << "Action.qml" << "Basic" << "Material" << "";
+ QTest::newRow("control=Action,style=fs,fallback=mat") << "Action.qml" << "FileSystemStyle" << "Material" << "FileSystemStyle";
+ QTest::newRow("control=Action,style=qrc,fallback=mat") << "Action.qml" << "ResourceStyle" << "Material" << "Basic";
+ QTest::newRow("control=Action,style=nosuch,fallback=mat") << "Action.qml" << "NoSuchStyle" << "Material" << "Basic";
+
+ // Amongst the styles we're testing here, ScrollView.qml only exists in the Basic style.
+ QTest::newRow("control=ScrollView,style=basic,fallback=empty") << "ScrollView.qml" << "Basic" << "" << "Basic";
+ QTest::newRow("control=ScrollView,style=fs,fallback=empty") << "ScrollView.qml" << "FileSystemStyle" << "" << "Basic";
+ QTest::newRow("control=ScrollView,style=qrc,fallback=empty") << "ScrollView.qml" << "ResourceStyle" << "" << "Basic";
+ QTest::newRow("control=ScrollView,style=nosuch,fallback=empty") << "ScrollView.qml" << "NoSuchStyle" << "" << "Basic";
+
+ QTest::newRow("control=ScrollView,style=basic,fallback=mat") << "ScrollView.qml" << "Basic" << "Material" << "Basic";
+ QTest::newRow("control=ScrollView,style=fs,fallback=mat") << "ScrollView.qml" << "FileSystemStyle" << "Material" << "Basic";
+ QTest::newRow("control=ScrollView,style=qrc,fallback=mat") << "ScrollView.qml" << "ResourceStyle" << "Material" << "Basic";
+ QTest::newRow("control=ScrollView,style=nosuch,fallback=mat") << "ScrollView.qml" << "NoSuchStyle" << "Material" << "Basic";
+
+ // Label.qml exists in the FileSystemStyle, Basic and Material styles.
+ QTest::newRow("control=Label,style=basic,fallback=empty") << "Label.qml" << "Basic" << "" << "Basic";
+ QTest::newRow("control=Label,style=fs,fallback=empty") << "Label.qml" << "FileSystemStyle" << "" << "FileSystemStyle";
+ QTest::newRow("control=Label,style=qrc,fallback=empty") << "Label.qml" << "ResourceStyle" << "" << "Basic";
+ QTest::newRow("control=Label,style=nosuch,fallback=empty") << "Label.qml" << "NoSuchStyle" << "" << "Basic";
+
+ QTest::newRow("control=Label,style=basic,fallback=mat") << "Label.qml" << "Basic" << "Material" << "Basic";
+ QTest::newRow("control=Label,style=fs,fallback=mat") << "Label.qml" << "FileSystemStyle" << "Material" << "FileSystemStyle";
+ QTest::newRow("control=Label,style=qrc,fallback=mat") << "Label.qml" << "ResourceStyle" << "Material" << "Basic";
+ QTest::newRow("control=Label,style=nosuch,fallback=mat") << "Label.qml" << "NoSuchStyle" << "Material" << "Basic";
+
+ // Button.qml exists in all styles including the fs and qrc styles
+ QTest::newRow("control=Button,style=basic,fallback=empty") << "Button.qml" << "Basic" << "" << "Basic";
+ QTest::newRow("control=Button,style=fs,fallback=empty") << "Button.qml" << "FileSystemStyle" << "" << "FileSystemStyle";
+ QTest::newRow("control=Button,style=qrc,fallback=empty") << "Button.qml" << "ResourceStyle" << "" << "ResourceStyle";
+ QTest::newRow("control=Button,style=nosuch,fallback=empty") << "Button.qml" << "NoSuchStyle" << "" << "Basic";
+
+ QTest::newRow("control=Button,style=basic,fallback=mat") << "Button.qml" << "Basic" << "Material" << "Basic";
+ QTest::newRow("control=Button,style=fs,fallback=mat") << "Button.qml" << "FileSystemStyle" << "Material" << "FileSystemStyle";
+ QTest::newRow("control=Button,style=qrc,fallback=mat") << "Button.qml" << "ResourceStyle" << "Material" << "ResourceStyle";
+ QTest::newRow("control=Button,style=nosuch,fallback=mat") << "Button.qml" << "NoSuchStyle" << "Material" << "Basic";
+}
+
+void tst_StyleImports::select()
+{
+ QFETCH(QString, file);
+ QFETCH(QString, style);
+ QFETCH(QString, fallback);
+ QFETCH(QString, expected);
+
+ // In Qt 5, there were several accepted forms for style names.
+ // In Qt 6, the only accepted form is the base name of the style directory.
+ const bool invalidStyleName = style.contains(QLatin1Char('/'));
+ if (invalidStyleName)
+ QTest::ignoreMessage(QtWarningMsg,
+ "Style names must not contain paths; see the \"Definition of a Style\" documentation for more information");
+ QQuickStyle::setStyle(style);
+ QQuickStyle::setFallbackStyle(fallback);
+
+ QQmlEngine engine;
+ engine.addImportPath(QLatin1String(":/"));
+// engine.addImportPath(directory());
+ engine.addImportPath(dataDirectory() + QLatin1String("/styles"));
+ QQmlComponent component(&engine);
+ const QString controlName = file.mid(0, file.indexOf(QLatin1Char('.')));
+ component.setData(QString::fromLatin1("import QtQuick; import QtQuick.Controls; %1 { }").arg(controlName).toUtf8(), QUrl());
+
+ const bool nonExistentStyle = style == QLatin1String("NoSuchStyle");
+ if (nonExistentStyle)
+ QTest::ignoreMessage(QtWarningMsg, "QQmlComponent: Component is not ready");
+ QScopedPointer<QObject> object(component.create());
+ if (nonExistentStyle) {
+ QVERIFY(object.isNull());
+ return;
+ }
+
+ QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
+
+ // TODO: test built-in styles below too
+ // We can't check for the attached style object since that API is in a plugin,
+ // and it's not possible to use e.g. the baseUrl of the QQmlContext
+ // nor the metaObject to test it either.
+
+ if (!QQuickStylePrivate::builtInStyles().contains(expected)) {
+ // We're expecting a custom style.
+ QCOMPARE(object->objectName(), expected);
+ }
+}
+
+// Tests that the various platforms are available as selectors.
+void tst_StyleImports::platformSelectors()
+{
+ QQuickStyle::setStyle(QLatin1String("PlatformStyle"));
+
+ QQmlApplicationEngine engine;
+ engine.addImportPath(dataDirectory() + QLatin1String("/styles"));
+ engine.load(testFileUrl("applicationWindowWithButton.qml"));
+ QVERIFY(!engine.rootObjects().isEmpty());
+ QQuickWindow *window = qobject_cast<QQuickWindow*>(engine.rootObjects().first());
+ QVERIFY(window);
+
+ QObject *button = window->property("button").value<QObject*>();
+ QVERIFY(button);
+
+#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
+ QCOMPARE(button->objectName(), "PlatformStyle/+linux");
+#elif defined(Q_OS_MACOS)
+ QCOMPARE(button->objectName(), "PlatformStyle/+macos");
+#elif defined(Q_OS_WIN)
+ QCOMPARE(button->objectName(), "PlatformStyle/+windows");
+#else
+ QCOMPARE(button->objectName(), "PlatformStyle/Button.qml");
+#endif
+}
+
+// Tests that a file selector is added for custom styles.
+// Note that this is different to the regular QML import mechanism
+// that results in e.g. FileSystemStyle/Button.qml being found;
+// it allows non-template (Controls), custom user types to be
+// picked up via selectors.
+void tst_StyleImports::customStyleSelector()
+{
+ QQuickStyle::setStyle(QLatin1String("FileSystemStyle"));
+
+ QQmlApplicationEngine engine;
+ engine.addImportPath(dataDirectory() + QLatin1String("/styles"));
+ engine.load(testFileUrl("customStyleSelector.qml"));
+ QVERIFY(!engine.rootObjects().isEmpty());
+ QQuickWindow *window = qobject_cast<QQuickWindow*>(engine.rootObjects().first());
+ QVERIFY(window);
+
+ QObject *customComponent = window->property("customComponent").value<QObject*>();
+ QVERIFY(customComponent);
+ QCOMPARE(customComponent->objectName(), "+FileSystemStyle/CustomComponent.qml");
+}
+
+void tst_StyleImports::fallbackStyleShouldNotOverwriteTheme_data()
+{
+ QTest::addColumn<QString>("style");
+ QTest::addColumn<QString>("fallbackStyle");
+ QTest::addColumn<QColor>("expectedContentItemColor");
+
+ QTest::addRow("style=Fusion,fallbackStyle=Material")
+ << QString::fromLatin1("Fusion") << QString::fromLatin1("Material") << QColor::fromRgb(0x252525);
+ QTest::addRow("style=ResourceStyle,fallbackStyle=Material")
+ << QString::fromLatin1("ResourceStyle") << QString::fromLatin1("Material") << QColor("salmon");
+}
+
+void tst_StyleImports::fallbackStyleShouldNotOverwriteTheme()
+{
+ QFETCH(QString, style);
+ QFETCH(QString, fallbackStyle);
+ QFETCH(QColor, expectedContentItemColor);
+
+ QQuickStyle::setStyle(style);
+ QQuickStyle::setFallbackStyle(fallbackStyle);
+
+ QQmlApplicationEngine engine;
+ engine.addImportPath(QLatin1String(":/"));
+ engine.addImportPath(dataDirectory());
+ engine.load(testFileUrl("applicationWindowWithButton.qml"));
+ QVERIFY(!engine.rootObjects().isEmpty());
+ QQuickWindow *window = qobject_cast<QQuickWindow*>(engine.rootObjects().first());
+ QVERIFY(window);
+
+ QObject *button = window->property("button").value<QObject*>();
+ QVERIFY(button);
+
+ QQuickIconLabel *contentItem = button->property("contentItem").value<QQuickIconLabel*>();
+ QVERIFY(contentItem);
+
+ // For example: the Fusion style provides Button.qml, so the Button's text color
+ // should be that of QPalette::ButtonText from QQuickFusionTheme.
+ QCOMPARE(contentItem->color(), expectedContentItemColor);
+}
+
+QTEST_MAIN(tst_StyleImports)
+
+#include "tst_styleimports.moc"
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimematerial/CMakeLists.txt b/tests/auto/quickcontrols2/styleimportscompiletimematerial/CMakeLists.txt
new file mode 100644
index 0000000000..361ceb9f17
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimematerial/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from styleimportscompiletimematerial.pro.
+
+#####################################################################
+## tst_styleimportscompiletimematerial Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_styleimportscompiletimematerial
+ SOURCES
+ tst_styleimportscompiletimematerial.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:styleimportscompiletimematerial.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_styleimportscompiletimematerial CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_styleimportscompiletimematerial CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimematerial/data/importMaterialStyleWithoutControls.qml b/tests/auto/quickcontrols2/styleimportscompiletimematerial/data/importMaterialStyleWithoutControls.qml
new file mode 100644
index 0000000000..7cb4fd5883
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimematerial/data/importMaterialStyleWithoutControls.qml
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick.Controls.Material
+
+ApplicationWindow {
+ title: "Test Application Window"
+ width: 400
+ height: 400
+
+ property alias button: button
+
+ Button {
+ id: button
+ text: "Material Button"
+ }
+}
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimematerial/tst_styleimportscompiletimematerial.cpp b/tests/auto/quickcontrols2/styleimportscompiletimematerial/tst_styleimportscompiletimematerial.cpp
new file mode 100644
index 0000000000..52833c52ec
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimematerial/tst_styleimportscompiletimematerial.cpp
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qregularexpression.h>
+#include <QtTest/qtest.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQml/qqmlapplicationengine.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/private/qqmlmetatype_p.h>
+#include <QtQuick/qquickwindow.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+
+using namespace QQuickVisualTestUtils;
+using namespace QQuickControlsTestUtils;
+
+class tst_StyleImportsCompileTimeMaterial : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_StyleImportsCompileTimeMaterial();
+
+private slots:
+ void importMaterialStyleWithoutControls();
+};
+
+tst_StyleImportsCompileTimeMaterial::tst_StyleImportsCompileTimeMaterial()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_StyleImportsCompileTimeMaterial::importMaterialStyleWithoutControls()
+{
+ QQuickControlsApplicationHelper helper(this, QLatin1String("importMaterialStyleWithoutControls.qml"));
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ auto button = helper.window->property("button").value<QQuickButton*>();
+ QVERIFY(button);
+ // The Material style sets a size 14 font for Button.
+ QCOMPARE(button->font().pixelSize(), 14);
+ const QTypeRevision latestControlsRevision = QQmlMetaType::latestModuleVersion(QLatin1String("QtQuick.Controls"));
+ QVERIFY2(!latestControlsRevision.isValid(), "QtQuick.Controls should not be imported when using compile-time style selection");
+}
+
+QTEST_MAIN(tst_StyleImportsCompileTimeMaterial)
+
+#include "tst_styleimportscompiletimematerial.moc"
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/CMakeLists.txt b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/CMakeLists.txt
new file mode 100644
index 0000000000..ca1a4f51ba
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Generated from styleimportscompiletimeqmlonly.pro.
+
+#####################################################################
+## tst_styleimportscompiletimeqmlonly Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_styleimportscompiletimeqmlonly
+ SOURCES
+ tst_styleimportscompiletimeqmlonly.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+#### Keys ignored in scope 1:.:.:styleimportscompiletimeqmlonly.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml" "data/QmlOnly/*.qml" "data/QmlOnly/qmldir"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_styleimportscompiletimeqmlonly CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_styleimportscompiletimeqmlonly CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/QmlOnly/Button.qml b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/QmlOnly/Button.qml
new file mode 100644
index 0000000000..73d94c1ce1
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/QmlOnly/Button.qml
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Button {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ horizontalPadding: padding + 2
+ spacing: 6
+ font.pixelSize: 8
+
+ contentItem: T.Label {
+ text: control.text
+ font: control.font
+ color: control.checked || control.highlighted ? control.palette.brightText :
+ control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
+ verticalAlignment: T.Label.AlignVCenter
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: !control.flat || control.down || control.checked || control.highlighted
+ color: "#ccc"
+ border.color: control.palette.highlight
+ border.width: control.visualFocus ? 2 : 0
+ }
+}
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/QmlOnly/qmldir b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/QmlOnly/qmldir
new file mode 100644
index 0000000000..5e60f09534
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/QmlOnly/qmldir
@@ -0,0 +1,3 @@
+module QmlOnly
+Button 1.0 Button.qml
+import QtQuick.Controls.Basic
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/importQmlOnlyStyleWithoutControls.qml b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/importQmlOnlyStyleWithoutControls.qml
new file mode 100644
index 0000000000..027d5636be
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/data/importQmlOnlyStyleWithoutControls.qml
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QmlOnly
+
+ApplicationWindow {
+ title: "Test Application Window"
+ width: 400
+ height: 400
+
+ property alias button: button
+
+ Button {
+ id: button
+ text: "QmlOnly Button"
+ }
+}
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/dummy_imports.qml b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/dummy_imports.qml
new file mode 100644
index 0000000000..aa37fd14b0
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/dummy_imports.qml
@@ -0,0 +1,8 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQuick
+import QtQuick.Controls.Basic
+
+QtObject { }
diff --git a/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/tst_styleimportscompiletimeqmlonly.cpp b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/tst_styleimportscompiletimeqmlonly.cpp
new file mode 100644
index 0000000000..3734d7df9e
--- /dev/null
+++ b/tests/auto/quickcontrols2/styleimportscompiletimeqmlonly/tst_styleimportscompiletimeqmlonly.cpp
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qregularexpression.h>
+#include <QtTest/qtest.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQml/qqmlapplicationengine.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQuick/qquickwindow.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+
+using namespace QQuickControlsTestUtils;
+
+class tst_StyleImportsCompileTimeQmlOnly : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_StyleImportsCompileTimeQmlOnly();
+
+private slots:
+ void importQmlOnlyStyleWithoutControls();
+};
+
+tst_StyleImportsCompileTimeQmlOnly::tst_StyleImportsCompileTimeQmlOnly()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_StyleImportsCompileTimeQmlOnly::importQmlOnlyStyleWithoutControls()
+{
+ QQuickControlsApplicationHelper helper(this,
+ QLatin1String("importQmlOnlyStyleWithoutControls.qml"), {}, QStringList() << dataDirectory());
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ auto button = helper.window->property("button").value<QQuickButton*>();
+ QVERIFY(button);
+ QCOMPARE(button->font().pixelSize(), 8);
+}
+
+QTEST_MAIN(tst_StyleImportsCompileTimeQmlOnly)
+
+#include "tst_styleimportscompiletimeqmlonly.moc"
diff --git a/tests/auto/quickcontrols2/translation/CMakeLists.txt b/tests/auto/quickcontrols2/translation/CMakeLists.txt
new file mode 100644
index 0000000000..cbb8b30c95
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/CMakeLists.txt
@@ -0,0 +1,62 @@
+# Generated from translation.pro.
+
+#####################################################################
+## tst_translation Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_translation
+ SOURCES
+ tst_translation.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qmake_immediate_resource_files
+ "qml_jp.qm"
+ "qtbase_fr.qm"
+)
+
+qt_internal_add_resource(tst_translation "qmake_immediate"
+ PREFIX
+ "/"
+ FILES
+ ${qmake_immediate_resource_files}
+)
+
+
+#### Keys ignored in scope 1:.:.:translation.pro:<TRUE>:
+# OTHER_FILES = "data/*.qml"
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_translation CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_translation CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickcontrols2/translation/data/comboBox.qml b/tests/auto/quickcontrols2/translation/data/comboBox.qml
new file mode 100644
index 0000000000..cba1cf0c23
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/data/comboBox.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+ComboBox {
+ objectName: "comboBox"
+ textRole: "label"
+ model: ListModel {
+ ListElement {
+ label: qsTr("Hello")
+ }
+ ListElement {
+ label: qsTr("ListView")
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/translation/data/dialogButtonBox.qml b/tests/auto/quickcontrols2/translation/data/dialogButtonBox.qml
new file mode 100644
index 0000000000..fd8f9548a2
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/data/dialogButtonBox.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ property Dialog dialog: Dialog {
+ width: 300
+ height: 300
+ visible: true
+ standardButtons: DialogButtonBox.Save | DialogButtonBox.Discard
+ }
+}
diff --git a/tests/auto/quickcontrols2/translation/data/dialogButtonBoxWithCustomButtons.qml b/tests/auto/quickcontrols2/translation/data/dialogButtonBoxWithCustomButtons.qml
new file mode 100644
index 0000000000..bf0fb512a7
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/data/dialogButtonBoxWithCustomButtons.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ property Dialog dialog: Dialog {
+ width: 300
+ height: 300
+ visible: true
+
+ footer: DialogButtonBox {
+ Button {
+ objectName: "okButton"
+ text: qsTr("OK")
+
+ DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
+ }
+ Button {
+ objectName: "cancelButton"
+ text: qsTr("Cancel")
+
+ DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickcontrols2/translation/data/stackView.qml b/tests/auto/quickcontrols2/translation/data/stackView.qml
new file mode 100644
index 0000000000..55748d219a
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/data/stackView.qml
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Window
+
+Window {
+ id: window
+ width: 640
+ height: 480
+
+ property var engine
+
+ signal calledTranslate
+
+ property int pagesCreated: 0
+
+ Component {
+ id: translatePageComponent
+ Item {
+ id: root
+
+ Component.onCompleted: objectName = "translatePageRootItem" + pagesCreated++
+
+ StackView.onActivating: {
+ retranslateTimer.start()
+ }
+
+ Timer {
+ id: retranslateTimer
+ objectName: "retranslateTimer"
+ interval: 100
+ repeat: true
+
+ property int count: 0
+
+ onTriggered: {
+
+ // This triggers the crash without retranslate().
+ // retranslate() got cleverer in 6.2, sidestepping the issue.
+ replaceExit.animations[0].target = null;
+ replaceExit.animations[0].target = replaceExit.ViewTransition.item
+
+ console.log("timer within", root, "is about to call retranslate")
+ window.engine.retranslate()
+ window.calledTranslate()
+ count++
+ if(count >= 10) {
+ stop()
+ count = 0
+ }
+ }
+ }
+
+ Button {
+ objectName: "button"
+ text: qsTr("Push")
+ onClicked: root.StackView.view.replace(translatePageComponent)
+ }
+ }
+ }
+
+ StackView {
+ id: stack
+ objectName: "stackView"
+ anchors.fill: parent
+ initialItem: translatePageComponent
+
+ replaceEnter: Transition {
+ id: replaceEnter
+ objectName: "enterTransition"
+
+ PropertyAnimation {
+ objectName: replaceEnter.objectName + "PropertyAnimation"
+ target: replaceEnter.ViewTransition.item
+ property: "opacity"
+ from: 0
+ to: 1
+ duration: 10
+ }
+
+ }
+
+ replaceExit: Transition {
+ id: replaceExit
+ objectName: "exitTransition"
+
+ PropertyAnimation {
+ objectName: replaceExit.objectName + "PropertyAnimation"
+ target: replaceExit.ViewTransition.item
+ property: "opacity"
+ from: 1
+ to: 0
+ duration: 10
+ }
+ }
+ }
+}
+
diff --git a/tests/auto/quickcontrols2/translation/qml_jp.qm b/tests/auto/quickcontrols2/translation/qml_jp.qm
new file mode 100644
index 0000000000..a3712e9964
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/qml_jp.qm
Binary files differ
diff --git a/tests/auto/quickcontrols2/translation/qml_jp.ts b/tests/auto/quickcontrols2/translation/qml_jp.ts
new file mode 100644
index 0000000000..303c142fd8
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/qml_jp.ts
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ja_JP">
+<context>
+ <name>main</name>
+ <message>
+ <location filename="../main.qml" line="8"/>
+ <source>Hello World</source>
+ <translation>こんにちは世界</translation>
+ </message>
+ <message>
+ <location filename="../main.qml" line="12"/>
+ <source>Hello Text</source>
+ <translation>ハローテキスト</translation>
+ </message>
+ <message>
+ <location filename="../main.qml" line="35"/>
+ <source>Hello</source>
+ <translation>こんにちは</translation>
+ </message>
+ <message>
+ <location filename="../main.qml" line="38"/>
+ <source>ListView</source>
+ <translation>リストビュー</translation>
+ </message>
+</context>
+</TS>
+
diff --git a/tests/auto/quickcontrols2/translation/qtbase_fr.qm b/tests/auto/quickcontrols2/translation/qtbase_fr.qm
new file mode 100644
index 0000000000..176675a820
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/qtbase_fr.qm
Binary files differ
diff --git a/tests/auto/quickcontrols2/translation/qtbase_fr.ts b/tests/auto/quickcontrols2/translation/qtbase_fr.ts
new file mode 100644
index 0000000000..7aff8bd760
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/qtbase_fr.ts
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr_FR">
+<context>
+ <name>QPlatformTheme</name>
+ <message>
+ <source>Save</source>
+ <translation>Enregistrer</translation>
+ </message>
+ <message>
+ <source>Discard</source>
+ <translation>Ne pas tenir compte</translation>
+ </message>
+</context>
+<context>
+ <name>QGnomeTheme</name>
+ <message>
+ <source>&amp;Save</source>
+ <translation>&amp;Enregistrer</translation>
+ </message>
+</context>
+</TS>
+
diff --git a/tests/auto/quickcontrols2/translation/tst_translation.cpp b/tests/auto/quickcontrols2/translation/tst_translation.cpp
new file mode 100644
index 0000000000..5d215df828
--- /dev/null
+++ b/tests/auto/quickcontrols2/translation/tst_translation.cpp
@@ -0,0 +1,198 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qsignalspy.h>
+#include <QtTest/qtest.h>
+#include <QtCore/qtranslator.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/qpa/qplatformtheme.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickTemplates2/private/qquickabstractbutton_p.h>
+#include <QtQuickTemplates2/private/qquickcombobox_p.h>
+#include <QtQuickTemplates2/private/qquickdialog_p.h>
+#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p.h>
+#include <QtQuickTemplates2/private/qquicktextfield_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+using namespace QQuickControlsTestUtils;
+using namespace QQuickVisualTestUtils;
+
+class tst_translation : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_translation();
+
+private slots:
+ void dialogButtonBox();
+ void dialogButtonBoxWithCustomButtons();
+ void comboBox();
+ void stackView();
+};
+
+tst_translation::tst_translation()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+ QQuickStyle::setStyle("Basic");
+}
+
+void tst_translation::dialogButtonBox()
+{
+ QQuickView view(testFileUrl("dialogButtonBox.qml"));
+ if (view.status() != QQuickView::Ready)
+ QFAIL("Failed to load QML file");
+ view.show();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickDialog *dialog = view.rootObject()->property("dialog").value<QQuickDialog*>();
+ QVERIFY(dialog);
+
+ QQuickDialogButtonBox *dialogButtonBox = qobject_cast<QQuickDialogButtonBox*>(dialog->footer());
+ QVERIFY(dialogButtonBox);
+
+ QQuickAbstractButton *saveButton = dialogButtonBox->standardButton(QPlatformDialogHelper::Save);
+ QVERIFY(saveButton);
+ QString defaultSaveText = QGuiApplicationPrivate::platformTheme()->standardButtonText(QPlatformDialogHelper::Save);
+ defaultSaveText = QPlatformTheme::removeMnemonics(defaultSaveText);
+ QCOMPARE(saveButton->text(), defaultSaveText);
+
+ QQuickAbstractButton *discardButton = dialogButtonBox->standardButton(QPlatformDialogHelper::Discard);
+ QVERIFY(discardButton);
+ QString defaultDiscardText = QGuiApplicationPrivate::platformTheme()->standardButtonText(QPlatformDialogHelper::Discard);
+ defaultDiscardText = QPlatformTheme::removeMnemonics(defaultDiscardText);
+ QCOMPARE(discardButton->text(), defaultDiscardText);
+
+ QTranslator translator;
+ QVERIFY(translator.load("qtbase_fr.qm", ":/"));
+ QVERIFY(qApp->installTranslator(&translator));
+ qApp->sendPostedEvents();
+ view.engine()->retranslate();
+
+ QString translatedSaveText = QGuiApplicationPrivate::platformTheme()->standardButtonText(QPlatformDialogHelper::Save);
+ translatedSaveText = QPlatformTheme::removeMnemonics(translatedSaveText);
+ QCOMPARE(saveButton->text(), translatedSaveText);
+
+ QString translatedDiscardText = QGuiApplicationPrivate::platformTheme()->standardButtonText(QPlatformDialogHelper::Discard);
+ translatedDiscardText = QPlatformTheme::removeMnemonics(translatedDiscardText);
+ QCOMPARE(discardButton->text(), translatedDiscardText);
+}
+
+// Test that custom buttons with explicitly specified text
+// do not have that text overwritten on language changes.
+void tst_translation::dialogButtonBoxWithCustomButtons()
+{
+ // This is just a way of simulating the translator going out of scope
+ // after the QML has been loaded.
+ QScopedPointer<QTranslator> translator(new QTranslator);
+ // Doesn't matter which language it is, as we won't be using it anyway.
+ QVERIFY(translator->load("qtbase_fr.qm", ":/"));
+ QVERIFY(qApp->installTranslator(translator.data()));
+
+ QQuickView view(testFileUrl("dialogButtonBoxWithCustomButtons.qml"));
+ if (view.status() != QQuickView::Ready)
+ QFAIL("Failed to load QML file");
+ view.show();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QQuickDialog *dialog = view.rootObject()->property("dialog").value<QQuickDialog*>();
+ QVERIFY(dialog);
+
+ QQuickDialogButtonBox *dialogButtonBox = qobject_cast<QQuickDialogButtonBox*>(dialog->footer());
+ QVERIFY(dialogButtonBox);
+
+ auto okButton = dialogButtonBox->findChild<QQuickAbstractButton*>("okButton");
+ QVERIFY(okButton);
+ QCOMPARE(okButton->text(), QLatin1String("OK"));
+
+ QQuickAbstractButton *cancelButton = dialogButtonBox->findChild<QQuickAbstractButton*>("cancelButton");
+ QVERIFY(cancelButton);
+ QCOMPARE(cancelButton->text(), QLatin1String("Cancel"));
+
+ // Delete the translator and hence cause a LanguageChange event,
+ // but _without_ calling QQmlEngine::retranslate(), which would
+ // restore the original bindings and hence not reproduce the issue.
+ translator.reset();
+ QCOMPARE(okButton->text(), QLatin1String("OK"));
+ QCOMPARE(cancelButton->text(), QLatin1String("Cancel"));
+}
+
+void tst_translation::comboBox()
+{
+ QQuickView view(testFileUrl("comboBox.qml"));
+
+ QQuickComboBox *comboBox = qobject_cast<QQuickComboBox*>(view.rootObject());
+ QVERIFY(comboBox);
+ QCOMPARE(comboBox->displayText(), QLatin1String("Hello"));
+
+ QQuickTextField *contentItem = qobject_cast<QQuickTextField*>(comboBox->contentItem());
+ QVERIFY(contentItem);
+ QCOMPARE(contentItem->text(), QLatin1String("Hello"));
+
+ QTranslator translator;
+ QVERIFY(translator.load("qml_jp.qm", ":/"));
+ QVERIFY(qApp->installTranslator(&translator));
+ view.engine()->retranslate();
+ QTRY_COMPARE(comboBox->displayText(), QString::fromUtf8("こんにちは"));
+ QCOMPARE(contentItem->text(), QString::fromUtf8("こんにちは"));
+}
+
+void tst_translation::stackView()
+{
+ QQuickControlsApplicationHelper helper(this, "stackView.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ QVERIFY(window->setProperty("engine", QVariant::fromValue(&helper.engine)));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QSignalSpy calledTranslateSpy(window, SIGNAL(calledTranslate()));
+ QVERIFY(calledTranslateSpy.isValid());
+
+ QQuickAbstractButton *button = window->findChild<QQuickAbstractButton*>("button");
+ QVERIFY(button);
+ // Shouldn't crash when calling retranslate.
+ QVERIFY(clickButton(button));
+ QTRY_COMPARE(calledTranslateSpy.count(), 1);
+}
+
+QTEST_MAIN(tst_translation)
+
+#include "tst_translation.moc"
diff --git a/tests/auto/quickdialogs/CMakeLists.txt b/tests/auto/quickdialogs/CMakeLists.txt
new file mode 100644
index 0000000000..d26f42818e
--- /dev/null
+++ b/tests/auto/quickdialogs/CMakeLists.txt
@@ -0,0 +1,4 @@
+if(NOT ANDROID) # temporarily disabled until QTBUG-100991 is fixed
+add_subdirectory(qquickfiledialogimpl)
+add_subdirectory(qquickfontdialogimpl)
+endif()
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/BLACKLIST b/tests/auto/quickdialogs/qquickfiledialogimpl/BLACKLIST
new file mode 100644
index 0000000000..7601025475
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/BLACKLIST
@@ -0,0 +1,11 @@
+# QTBUG-92094
+[tabFocusNavigation]
+*
+
+# QTBUG-92585
+[fileMode:OpenFiles]
+*
+
+# QTBUG-101488
+[goUpIntoLargeFolder]
+*
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/CMakeLists.txt b/tests/auto/quickdialogs/qquickfiledialogimpl/CMakeLists.txt
new file mode 100644
index 0000000000..64022f6293
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickfiledialogimpl
+ SOURCES
+ tst_qquickfiledialogimpl.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickDialogs2Private
+ Qt::QuickDialogs2QuickImplPrivate
+ Qt::QuickDialogs2UtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+qt_internal_extend_target(tst_qquickfiledialogimpl CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickfiledialogimpl CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/data/acceptRejectLabel.qml b/tests/auto/quickdialogs/qquickfiledialogimpl/data/acceptRejectLabel.qml
new file mode 100644
index 0000000000..3cd526e3af
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/data/acceptRejectLabel.qml
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+ApplicationWindow {
+ id: window
+ width: 640
+ height: 480
+
+ property alias dialog: dialog
+
+ FileDialog {
+ id: dialog
+ acceptLabel: "AcceptTest"
+ rejectLabel: "RejectTest"
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindAllTxtHtmlNameFilters.qml b/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindAllTxtHtmlNameFilters.qml
new file mode 100644
index 0000000000..5010c4226b
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindAllTxtHtmlNameFilters.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+ApplicationWindow {
+ width: 640
+ height: 480
+
+ property alias dialog: dialog
+
+ FileDialog {
+ id: dialog
+ objectName: "FileDialog"
+ nameFilters: ["All files (*)", "Text files (*.txt)", "HTML files (*.html)"]
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindCurrentFolder.qml b/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindCurrentFolder.qml
new file mode 100644
index 0000000000..03cd61bc31
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindCurrentFolder.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+ApplicationWindow {
+ id: window
+ width: 640
+ height: 480
+
+ property alias dialog: dialog
+ required property url initialFolder
+
+ FileDialog {
+ id: dialog
+ objectName: "FileDialog"
+ currentFolder: window.initialFolder
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindTitle.qml b/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindTitle.qml
new file mode 100644
index 0000000000..60657f5868
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindTitle.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+ApplicationWindow {
+ width: 640
+ height: 480
+
+ property alias dialog: dialog
+
+ FileDialog {
+ id: dialog
+ title: "Test Title"
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindTxtHtmlNameFilters.qml b/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindTxtHtmlNameFilters.qml
new file mode 100644
index 0000000000..1e312fbc07
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/data/bindTxtHtmlNameFilters.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+ApplicationWindow {
+ width: 640
+ height: 480
+
+ property alias dialog: dialog
+
+ FileDialog {
+ id: dialog
+ objectName: "FileDialog"
+ nameFilters: ["Text files (*.txt)", "HTML files (*.html)"]
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/data/fileDialog.qml b/tests/auto/quickdialogs/qquickfiledialogimpl/data/fileDialog.qml
new file mode 100644
index 0000000000..febad45ca6
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/data/fileDialog.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+ApplicationWindow {
+ width: 640
+ height: 480
+
+ property alias dialog: dialog
+
+ function doneAccepted() {
+ dialog.done(FileDialog.Accepted)
+ }
+
+ function doneRejected() {
+ dialog.done(FileDialog.Rejected)
+ }
+
+ FileDialog {
+ id: dialog
+ objectName: "FileDialog"
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/dummy_imports.qml b/tests/auto/quickdialogs/qquickfiledialogimpl/dummy_imports.qml
new file mode 100644
index 0000000000..4ea33de671
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/dummy_imports.qml
@@ -0,0 +1,9 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQuick.Controls
+import QtQuick.Layouts
+import Qt.labs.folderlistmodel
+
+QtObject { }
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/qquickfiledialogimpl.pro b/tests/auto/quickdialogs/qquickfiledialogimpl/qquickfiledialogimpl.pro
new file mode 100644
index 0000000000..3f6e83d7fd
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/qquickfiledialogimpl.pro
@@ -0,0 +1,14 @@
+CONFIG += testcase
+TARGET = tst_qquickfiledialogimpl
+SOURCES += tst_qquickfiledialogimpl.cpp
+
+macos:CONFIG -= app_bundle
+
+QT += core-private gui-private testlib qml-private quick-private qmltest quicktemplates2-private
+
+include (../../shared/util.pri)
+
+TESTDATA = data/*
+
+OTHER_FILES += \
+ data/*.qml
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp b/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp
new file mode 100644
index 0000000000..833b480843
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp
@@ -0,0 +1,1358 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtTest/qsignalspy.h>
+#include <QtQml/qqmlfile.h>
+#include <QtQuick/private/qquicklistview_p.h>
+#include <QtQuickTest/quicktest.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickControlsTestUtils/private/dialogstestutils_p.h>
+#include <QtQuickDialogs2/private/qquickfiledialog_p.h>
+#include <QtQuickDialogs2QuickImpl/private/qquickplatformfiledialog_p.h>
+#include <QtQuickDialogs2QuickImpl/private/qquickfiledialogdelegate_p.h>
+#include <QtQuickDialogs2QuickImpl/private/qquickfolderbreadcrumbbar_p.h>
+#include <QtQuickDialogs2QuickImpl/private/qquickfolderbreadcrumbbar_p_p.h>
+#include <QtQuickDialogs2Utils/private/qquickfilenamefilter_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickcombobox_p.h>
+#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p.h>
+#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p_p.h>
+#include <QtQuickTemplates2/private/qquicklabel_p.h>
+#include <QtQuickTemplates2/private/qquickoverlay_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+using namespace QQuickVisualTestUtils;
+using namespace QQuickDialogTestUtils;
+using namespace QQuickControlsTestUtils;
+
+class tst_QQuickFileDialogImpl : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickFileDialogImpl();
+ static void initMain()
+ {
+ // We need to set this attribute.
+ QCoreApplication::setAttribute(Qt::AA_DontUseNativeDialogs);
+ // We also don't want to run this for every style, as each one will have
+ // different ways of implementing the dialogs.
+ // For now we only test one style.
+ QQuickStyle::setStyle("Basic");
+ }
+
+private slots:
+ void initTestCase() override;
+ void cleanupTestCase();
+
+ void defaults();
+ void chooseFileViaStandardButtons();
+ void chooseFileViaDoubleClick();
+ void chooseFileViaTextEdit();
+ void chooseFileViaEnter();
+ void bindCurrentFolder_data();
+ void bindCurrentFolder();
+ void changeFolderViaStandardButtons();
+ void changeFolderViaDoubleClick();
+ void chooseFolderViaTextEdit();
+ void chooseFolderViaEnter();
+ void chooseFileAndThenFolderViaTextEdit();
+ void cancelDialogWhileTextEditHasFocus();
+ void closingDialogCancels();
+ void goUp();
+ void goUpWhileTextEditHasFocus();
+ void goIntoLargeFolder();
+ void keyAndShortcutHandling();
+ void bindNameFilters();
+ void changeNameFilters();
+ void changeNameFiltersAfterChangingFolder();
+ void tabFocusNavigation();
+ void acceptRejectLabel();
+ void bindTitle();
+ void itemsDisabledWhenNecessary();
+ void fileMode_data();
+ void fileMode();
+ void defaultSuffix_data();
+ void defaultSuffix();
+ void done_data();
+ void done();
+
+private:
+ QTemporaryDir tempDir;
+ QScopedPointer<QFile> tempFile1;
+ QScopedPointer<QFile> tempFile2;
+ QDir tempSubDir;
+ QDir tempSubSubDir;
+ QScopedPointer<QFile> tempSubFile1;
+ QScopedPointer<QFile> tempSubFile2;
+ QDir oldCurrentDir;
+};
+
+tst_QQuickFileDialogImpl::tst_QQuickFileDialogImpl()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_QQuickFileDialogImpl::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+
+ QVERIFY(tempDir.isValid());
+ // QTEST_QUICKCONTROLS_MAIN constructs the test case object once,
+ // and then calls qRun() for each style, and qRun() calls initTestCase().
+ // So, we need to check if we've already made the temporary directory.
+ // Note that this is only necessary if the test is run with more than one style.
+ if (!QDir(tempDir.path()).isEmpty())
+ return;
+
+ /*
+ Create a couple of files within the temporary directory. The structure is:
+
+ [temp directory]
+ ├── sub-dir
+ │ ├── sub-sub-dir
+ │ ├── sub-file1.txt
+ │ └── sub-file2.txt
+ ├── file1.txt
+ └── file2.txt
+ */
+ tempSubDir = QDir(tempDir.path());
+ QVERIFY2(tempSubDir.mkdir("sub-dir"), qPrintable(QString::fromLatin1(
+ "Failed to make sub-directory \"sub-dir\" in %1. Permissions are: %2")
+ .arg(tempDir.path()).arg(QDebug::toString(QFileInfo(tempDir.path()).permissions()))));
+ QVERIFY(tempSubDir.cd("sub-dir"));
+
+ tempSubSubDir = QDir(tempSubDir.path());
+ QVERIFY2(tempSubSubDir.mkdir("sub-sub-dir"), qPrintable(QString::fromLatin1(
+ "Failed to make sub-directory \"sub-sub-dir\" in %1. Permissions are: %2")
+ .arg(tempSubDir.path()).arg(QDebug::toString(QFileInfo(tempSubDir.path()).permissions()))));
+ QVERIFY(tempSubSubDir.cd("sub-sub-dir"));
+
+ tempSubFile1.reset(new QFile(tempSubDir.path() + "/sub-file1.txt"));
+ QVERIFY(tempSubFile1->open(QIODevice::ReadWrite));
+
+ tempSubFile2.reset(new QFile(tempSubDir.path() + "/sub-file2.txt"));
+ QVERIFY(tempSubFile2->open(QIODevice::ReadWrite));
+
+ tempFile1.reset(new QFile(tempDir.path() + "/file1.txt"));
+ QVERIFY(tempFile1->open(QIODevice::ReadWrite));
+
+ tempFile2.reset(new QFile(tempDir.path() + "/file2.txt"));
+ QVERIFY(tempFile2->open(QIODevice::ReadWrite));
+
+ // Ensure that each test starts off in the temporary directory.
+ oldCurrentDir = QDir::current();
+ QDir::setCurrent(tempDir.path());
+}
+
+void tst_QQuickFileDialogImpl::cleanupTestCase()
+{
+ // Just in case...
+ QDir::setCurrent(oldCurrentDir.path());
+}
+
+void tst_QQuickFileDialogImpl::defaults()
+{
+ QQuickApplicationHelper helper(this, "fileDialog.qml");
+ QVERIFY2(helper.ready, helper.failureMessage());
+
+ QQuickWindow *window = helper.window;
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickFileDialog *dialog = window->property("dialog").value<QQuickFileDialog*>();
+ QVERIFY(dialog);
+ COMPARE_URL(dialog->selectedFile(), QUrl());
+ // It should default to the current directory.
+ COMPARE_URL(dialog->currentFolder(), QUrl::fromLocalFile(QDir().absolutePath()));
+ // The first file in the directory should be selected, but not until the dialog is actually open,
+ // as QQuickFileDialogImpl hasn't been created yet.
+ COMPARE_URL(dialog->currentFile(), QUrl());
+ COMPARE_URLS(dialog->currentFiles(), {});
+ QCOMPARE(dialog->title(), QString());
+
+ dialog->open();
+ QQuickFileDialogImpl *quickDialog = window->findChild<QQuickFileDialogImpl*>();
+ QTRY_VERIFY(quickDialog->isOpened());
+ QVERIFY(quickDialog);
+ COMPARE_URL(quickDialog->selectedFile(), QUrl());
+ COMPARE_URL(quickDialog->currentFolder(), QUrl::fromLocalFile(QDir().absolutePath()));
+ COMPARE_URL(dialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
+ COMPARE_URLS(dialog->currentFiles(), { QUrl::fromLocalFile(tempSubDir.path()) });
+ COMPARE_URL(quickDialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
+ QCOMPARE(quickDialog->title(), QString());
+}
+
+void tst_QQuickFileDialogImpl::chooseFileViaStandardButtons()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Select the delegate by clicking once.
+ QSignalSpy dialogFileChangedSpy(dialogHelper.dialog, SIGNAL(selectedFileChanged()));
+ QVERIFY(dialogFileChangedSpy.isValid());
+ QSignalSpy dialogCurrentFileChangedSpy(dialogHelper.dialog, SIGNAL(currentFileChanged()));
+ QVERIFY(dialogCurrentFileChangedSpy.isValid());
+ QSignalSpy quickDialogCurrentFileChangedSpy(dialogHelper.quickDialog, SIGNAL(currentFileChanged(const QUrl &)));
+ QVERIFY(quickDialogCurrentFileChangedSpy.isValid());
+
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *delegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 2, delegate));
+ COMPARE_URL(delegate->file(), QUrl::fromLocalFile(tempFile2->fileName()));
+ QVERIFY(clickButton(delegate));
+ COMPARE_URL(dialogHelper.quickDialog->currentFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) });
+ // Only currentFile-related signals should be emitted.
+ QCOMPARE(dialogFileChangedSpy.count(), 0);
+ QCOMPARE(dialogCurrentFileChangedSpy.count(), 1);
+ QCOMPARE(quickDialogCurrentFileChangedSpy.count(), 1);
+
+ // Click the "Open" button.
+ QVERIFY(dialogHelper.quickDialog->footer());
+ auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
+ QVERIFY(dialogButtonBox);
+ QQuickAbstractButton* openButton = findDialogButton(dialogButtonBox, "Open");
+ QVERIFY(openButton);
+ QVERIFY(clickButton(openButton));
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) });
+ QCOMPARE(dialogFileChangedSpy.count(), 1);
+ COMPARE_URL(dialogHelper.quickDialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+ QVERIFY(!dialogHelper.dialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::chooseFileViaDoubleClick()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Select the delegate by double-clicking.
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *delegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 2, delegate));
+ COMPARE_URL(delegate->file(), QUrl::fromLocalFile(tempFile2->fileName()))
+ QVERIFY(doubleClickButton(delegate));
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile2->fileName()))
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) })
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()))
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) })
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::chooseFileViaTextEdit()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Get the text edit visible with Ctrl+L.
+ const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+ QCOMPARE(breadcrumbBar->textField()->text(), dialogHelper.dialog->currentFolder().toLocalFile());
+ QCOMPARE(breadcrumbBar->textField()->selectedText(), breadcrumbBar->textField()->text());
+
+ // Enter the path to the file in the text edit.
+ enterText(dialogHelper.window(), tempFile2->fileName());
+ QCOMPARE(breadcrumbBar->textField()->text(), tempFile2->fileName());
+
+ // Hit enter to accept.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
+ COMPARE_URL(dialogHelper.quickDialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) });
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::chooseFileViaEnter()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Before moving down, the first delegate in the view should be selected and have focus.
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *subDirDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
+ COMPARE_URL(subDirDelegate->file(), QUrl::fromLocalFile(tempSubDir.path()));
+ QVERIFY(subDirDelegate->hasActiveFocus());
+
+ // Select the first file in the view by navigating with the down key.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Down);
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile1->fileName()));
+
+ // Select the delegate by pressing enter.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempFile1->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempFile1->fileName()) });
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+ QCOMPARE(dialogHelper.dialog->result(), QQuickFileDialog::Accepted);
+}
+
+void tst_QQuickFileDialogImpl::bindCurrentFolder_data()
+{
+ QTest::addColumn<QUrl>("initialFolder");
+ QTest::addColumn<QUrl>("expectedFolder");
+ QTest::addColumn<QStringList>("expectedVisibleFiles");
+
+ const auto currentDirUrl = QUrl::fromLocalFile(QDir::current().path());
+ const auto tempSubDirUrl = QUrl::fromLocalFile(tempSubDir.path());
+ const auto tempSubFile1Url = QUrl::fromLocalFile(tempSubFile1->fileName());
+
+ const QStringList currentDirFiles = { tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() };
+ const QStringList tempSubDirFiles = { tempSubSubDir.path(), tempSubFile1->fileName(), tempSubFile2->fileName() };
+
+ // Setting the folder to "sub-dir" should result in "sub-file1.txt" and "sub-file2.txt" being visible.
+ QTest::addRow("sub-dir") << tempSubDirUrl << tempSubDirUrl << tempSubDirFiles;
+ // Setting a file as the folder shouldn't work, and the dialog shouldn't change its folder.
+ QTest::addRow("sub-dir/sub-file1.txt") << tempSubFile1Url << currentDirUrl << currentDirFiles;
+}
+
+void tst_QQuickFileDialogImpl::bindCurrentFolder()
+{
+ QFETCH(QUrl, initialFolder);
+ QFETCH(QUrl, expectedFolder);
+ QFETCH(QStringList, expectedVisibleFiles);
+
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ {{ "initialFolder", initialFolder }});
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), expectedFolder);
+
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QString failureMessage;
+ // Even waiting for ListView polish and that the FolderListModel's status is ready aren't enough
+ // on Windows, apparently, as sometimes there just aren't any delegates by the time we do the check.
+ // So, we use QTRY_VERIFY2 each time we call this function just to be safe.
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, expectedVisibleFiles, failureMessage), qPrintable(failureMessage));
+
+ // Check that the breadcrumb bar is correct by constructing the expected files from the expectedFolder.
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY2(verifyBreadcrumbDelegates(breadcrumbBar, expectedFolder, failureMessage), qPrintable(failureMessage));
+}
+
+void tst_QQuickFileDialogImpl::changeFolderViaStandardButtons()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Select the delegate by clicking once.
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *delegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, delegate));
+ COMPARE_URL(delegate->file(), QUrl::fromLocalFile(tempSubDir.path()));
+ QVERIFY(clickButton(delegate));
+ // The selectedFile and currentFolder shouldn't change yet.
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl());
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), {});
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
+ // The currentFile should, though.
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempSubDir.path()) });
+
+ // Click the "Open" button. The dialog should navigate to that directory, but still be open.
+ QVERIFY(dialogHelper.quickDialog->footer());
+ auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
+ QVERIFY(dialogButtonBox);
+ QQuickAbstractButton* openButton = findDialogButton(dialogButtonBox, "Open");
+ QVERIFY(openButton);
+ QVERIFY(clickButton(openButton));
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl());
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
+ QVERIFY(dialogHelper.dialog->isVisible());
+
+ dialogHelper.dialog->close();
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::changeFolderViaDoubleClick()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Select the "sub-dir" delegate by double-clicking.
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *subDirDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
+ COMPARE_URL(subDirDelegate->file(), QUrl::fromLocalFile(tempSubDir.path()));
+ QVERIFY(doubleClickButton(subDirDelegate));
+ // The first file in the directory should be selected, which is "sub-sub-dir".
+ const QStringList expectedVisibleFiles = { tempSubSubDir.path(), tempSubFile1->fileName(), tempSubFile2->fileName() };
+ QString failureMessage;
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, expectedVisibleFiles, failureMessage), qPrintable(failureMessage));
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempSubSubDir.path()) });
+ QQuickFileDialogDelegate *subSubDirDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subSubDirDelegate));
+ QCOMPARE(subSubDirDelegate->isHighlighted(), true);
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl());
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), {});
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
+ // Since we only chose a folder, the dialog should still be open.
+ QVERIFY(dialogHelper.dialog->isVisible());
+
+ dialogHelper.dialog->close();
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::chooseFolderViaTextEdit()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Get the text edit visible with Ctrl+L.
+ const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+ QCOMPARE(breadcrumbBar->textField()->text(), dialogHelper.dialog->currentFolder().toLocalFile());
+ QCOMPARE(breadcrumbBar->textField()->selectedText(), breadcrumbBar->textField()->text());
+
+ // Enter the path to the folder in the text edit.
+ enterText(dialogHelper.window(), tempSubDir.path());
+ QCOMPARE(breadcrumbBar->textField()->text(), tempSubDir.path());
+
+ // Hit enter to accept.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
+ // The first file in the directory should be selected, which is "sub-sub-dir".
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *subSubDirDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subSubDirDelegate));
+ QCOMPARE(subSubDirDelegate->isHighlighted(), true);
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl());
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), {});
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
+ QTRY_VERIFY(dialogHelper.dialog->isVisible());
+
+ dialogHelper.dialog->close();
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::chooseFolderViaEnter()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // The first delegate in the view should be selected and have focus.
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempSubDir.path()) });
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *subDirDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
+ COMPARE_URL(subDirDelegate->file(), QUrl::fromLocalFile(tempSubDir.path()));
+ QVERIFY(subDirDelegate->hasActiveFocus());
+
+ // Select the delegate by pressing enter.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
+ const QStringList expectedVisibleFiles = { tempSubSubDir.path(), tempSubFile1->fileName(), tempSubFile2->fileName() };
+ QString failureMessage;
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, expectedVisibleFiles, failureMessage), qPrintable(failureMessage));
+ // The first file in the new directory should be selected, which is "sub-sub-dir".
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
+ // Since we only chose a folder, the dialog should still be open.
+ QVERIFY(dialogHelper.dialog->isVisible());
+
+ dialogHelper.dialog->close();
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::chooseFileAndThenFolderViaTextEdit()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Get the text edit visible with Ctrl+L.
+ const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+ QCOMPARE(breadcrumbBar->textField()->text(), dialogHelper.dialog->currentFolder().toLocalFile());
+ QCOMPARE(breadcrumbBar->textField()->selectedText(), breadcrumbBar->textField()->text());
+
+ // Enter the path to the file in the text edit.
+ enterText(dialogHelper.window(), tempFile2->fileName());
+ QCOMPARE(breadcrumbBar->textField()->text(), tempFile2->fileName());
+
+ // Hit enter to accept.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
+ COMPARE_URL(dialogHelper.quickDialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) });
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+ // Check that the text edit is hidden and breadcrumbs are shown instead.
+ QVERIFY(!breadcrumbBar->textField()->isVisible());
+
+ // Re-open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ // The breadcrumbs should be visible after opening, not the text edit.
+ QVERIFY(!breadcrumbBar->textField()->isVisible());
+
+ // Get the text edit visible with Ctrl+L.
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+ // The text edit should show the directory that contains the last file that was selected.
+ QCOMPARE(breadcrumbBar->textField()->text(), tempDir.path());
+ QCOMPARE(breadcrumbBar->textField()->selectedText(), breadcrumbBar->textField()->text());
+
+ // Enter the path to the folder in the text edit.
+ enterText(dialogHelper.window(), tempSubDir.path());
+ QCOMPARE(breadcrumbBar->textField()->text(), tempSubDir.path());
+
+ // Hit enter to accept.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
+ // The first file in the directory should be selected, which is "sub-sub-dir".
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubSubDir.path()));
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *subSubDirDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subSubDirDelegate));
+ QCOMPARE(subSubDirDelegate->isHighlighted(), true);
+ // We just changed directories, so the actual selected file shouldn't change.
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) });
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
+ QTRY_VERIFY(dialogHelper.dialog->isVisible());
+
+ // Close the dialog.
+ dialogHelper.dialog->close();
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::cancelDialogWhileTextEditHasFocus()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Get the text edit visible with Ctrl+L.
+ const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY(breadcrumbBar->textField()->hasActiveFocus());
+
+ // Close it via the cancel button.
+ auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
+ QVERIFY(dialogButtonBox);
+ const QString cancelText = QQuickDialogButtonBoxPrivate::buttonText(QPlatformDialogHelper::Cancel);
+ auto cancelButton = findDialogButton(dialogButtonBox, cancelText);
+ QVERIFY(cancelButton);
+ QVERIFY(clickButton(cancelButton));
+
+ // Open it again. The text field should not be visible, but the breadcrumb bar itself should be.
+ dialogHelper.dialog->open();
+ QVERIFY(dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(dialogHelper.quickDialog->isOpened());
+ QVERIFY(breadcrumbBar->isVisible());
+ // The ListView that contains the breadcrumb delegates should be visible.
+ QVERIFY(breadcrumbBar->contentItem()->isVisible());
+ QVERIFY(!breadcrumbBar->textField()->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::closingDialogCancels()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ OPEN_QUICK_DIALOG();
+
+ QSignalSpy accepted(dialogHelper.dialog, &QQuickAbstractDialog::accepted);
+ QSignalSpy rejected(dialogHelper.dialog, &QQuickAbstractDialog::rejected);
+
+ // Accept the dialog.
+ QVERIFY(QMetaObject::invokeMethod(dialogHelper.window(), "doneAccepted"));
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+ QCOMPARE(accepted.size(), 1);
+ QCOMPARE(rejected.size(), 0);
+
+ // Re-open the dialog.
+ accepted.clear();
+ OPEN_QUICK_DIALOG();
+
+ // Close the dialog.
+ CLOSE_QUICK_DIALOG();
+ QCOMPARE(accepted.size(), 0);
+ QCOMPARE(rejected.size(), 1);
+}
+
+void tst_QQuickFileDialogImpl::goUp()
+{
+ // Open the dialog. Start off in "sub-dir".
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ {{ "initialFolder", QUrl::fromLocalFile(tempSubDir.path()) }});
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Go up a directory via the button next to the breadcrumb bar.
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ auto barListView = qobject_cast<QQuickListView*>(breadcrumbBar->contentItem());
+ QVERIFY(barListView);
+ if (QQuickTest::qIsPolishScheduled(barListView))
+ QVERIFY(QQuickTest::qWaitForItemPolished(barListView));
+ QVERIFY(clickButton(breadcrumbBar->upButton()));
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
+ // The previous directory that we were in should now be selected (matches e.g. Windows and Ubuntu).
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempSubDir.path()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempSubDir.path()) });
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *subDirDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
+ QCOMPARE(subDirDelegate->isHighlighted(), true);
+
+ // Go up a directory via the keyboard shortcut.
+ const auto goUpKeySequence = QKeySequence(Qt::ALT | Qt::Key_Up);
+ QTest::keySequence(dialogHelper.window(), goUpKeySequence);
+ QDir tempParentDir(tempDir.path());
+ QVERIFY(tempParentDir.cdUp());
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempParentDir.path()));
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempDir.path()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempDir.path()) });
+}
+
+void tst_QQuickFileDialogImpl::goUpWhileTextEditHasFocus()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ {{ "initialFolder", QUrl::fromLocalFile(tempSubDir.path()) }});
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Get the text edit visible with Ctrl+L.
+ const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY(breadcrumbBar->textField()->hasActiveFocus());
+
+ // Go up a directory via the button next to the breadcrumb bar.
+ auto barListView = qobject_cast<QQuickListView*>(breadcrumbBar->contentItem());
+ QVERIFY(barListView);
+ if (QQuickTest::qIsPolishScheduled(barListView))
+ QVERIFY(QQuickTest::qWaitForItemPolished(barListView));
+ QVERIFY(clickButton(breadcrumbBar->upButton()));
+ // The path should have changed to the parent directory.
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
+ // The text edit should be hidden when it loses focus.
+ QVERIFY(!breadcrumbBar->textField()->hasActiveFocus());
+ QVERIFY(!breadcrumbBar->textField()->isVisible());
+ // The focus should be given to the first delegate.
+ QVERIFY(dialogHelper.window()->activeFocusItem());
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *firstDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, firstDelegate));
+ QCOMPARE(dialogHelper.window()->activeFocusItem(), firstDelegate);
+}
+
+void tst_QQuickFileDialogImpl::goIntoLargeFolder()
+{
+ // Create a throwaway directory with a lot of folders within it...
+ QTemporaryDir anotherTempDir;
+ QVERIFY(anotherTempDir.isValid());
+ for (int i = 0; i < 30; ++i) {
+ QDir newDir(anotherTempDir.path());
+ QVERIFY(newDir.exists());
+ // Pad with zeroes so that the directories are ordered as we expect.
+ QVERIFY(newDir.mkdir(QString::fromLatin1("dir%1").arg(i, 2, 10, QLatin1Char('0'))));
+ }
+
+ // ... and within one of those folders, more folders.
+ QDir dir20(anotherTempDir.path() + "/dir20");
+ QVERIFY(dir20.exists());
+ for (int i = 0; i < 30; ++i) {
+ QDir newDir(dir20.path());
+ QVERIFY(newDir.exists());
+ QVERIFY(newDir.mkdir(QString::fromLatin1("subdir%1").arg(i, 2, 10, QLatin1Char('0'))));
+ }
+
+ // Open the dialog. Start off in the throwaway directory.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ {{ "initialFolder", QUrl::fromLocalFile(anotherTempDir.path()) }});
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // If the screen is so tall that the contentItem is not vertically larger than the view,
+ // then the test makes no sense.
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ if (QQuickTest::qIsPolishScheduled(fileDialogListView))
+ QVERIFY(QQuickTest::qWaitForItemPolished(fileDialogListView));
+ // Just to be safe, make sure it's at least twice as big.
+ if (fileDialogListView->contentItem()->height() < fileDialogListView->height() * 2) {
+ QSKIP(qPrintable(QString::fromLatin1("Expected height of fileDialogListView's contentItem (%1)" \
+ " to be at least twice as big as the ListView's height (%2)")
+ .arg(fileDialogListView->contentItem()->height()).arg(fileDialogListView->height())));
+ }
+
+ // Scroll down to dir20. The view should be somewhere past the middle.
+ QVERIFY(QMetaObject::invokeMethod(fileDialogListView, "positionViewAtIndex", Qt::DirectConnection,
+ Q_ARG(int, 20), Q_ARG(int, QQuickItemView::PositionMode::Center)));
+ QVERIFY(fileDialogListView->contentY() > 0);
+
+ // Go into it. The view should start at the top of the directory, not at the same contentY
+ // that it had in the previous directory.
+ QQuickFileDialogDelegate *dir20Delegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 20, dir20Delegate));
+ COMPARE_URL(dir20Delegate->file(), QUrl::fromLocalFile(dir20.path()));
+ QVERIFY(doubleClickButton(dir20Delegate));
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(dir20.path()));
+ COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(dir20.path()));
+ QCOMPARE(fileDialogListView->contentY(), 0);
+}
+
+void tst_QQuickFileDialogImpl::keyAndShortcutHandling()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Get the text edit visible with Ctrl+L.
+ const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+ QCOMPARE(breadcrumbBar->textField()->text(), dialogHelper.dialog->currentFolder().toLocalFile());
+ QCOMPARE(breadcrumbBar->textField()->selectedText(), breadcrumbBar->textField()->text());
+
+ // Ctrl+L shouldn't hide it.
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+
+ // Cancel it with the escape key.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Escape);
+ QVERIFY(!breadcrumbBar->textField()->isVisible());
+ QVERIFY(dialogHelper.dialog->isVisible());
+
+ // Make it visible.
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+
+ // Cancel it with the escape key again.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Escape);
+ QVERIFY(!breadcrumbBar->textField()->isVisible());
+ QVERIFY(dialogHelper.dialog->isVisible());
+
+ // Pressing escape now should close the dialog.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Escape);
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFileDialogImpl::bindNameFilters()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindTxtHtmlNameFilters.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Only "sub-dir", "text1.txt" and "text2.txt" should be visible, since *.txt is the first filter.
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QString failureMessage;
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView,
+ { tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() }, failureMessage), qPrintable(failureMessage));
+}
+
+void tst_QQuickFileDialogImpl::changeNameFilters()
+{
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+
+ // Open the dialog and check that selectedNameFilter is correct.
+ // By default, QFileDialogOptions::defaultNameFilterString() is used.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ QCOMPARE(dialogHelper.dialog->selectedNameFilter()->name(), "All Files");
+ QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->name(), "All Files");
+ QCOMPARE(dialogHelper.dialog->selectedNameFilter()->index(), 0);
+ QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->index(), 0);
+ QCOMPARE(dialogHelper.dialog->selectedNameFilter()->extensions(), { "*" });
+ QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->extensions(), { "*" });
+ QCOMPARE(dialogHelper.dialog->selectedNameFilter()->globs(), { "*" });
+ QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->globs(), { "*" });
+
+ // Close the dialog.
+ dialogHelper.dialog->close();
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+
+ // Set .txt and .html filters.
+ QSignalSpy nameFiltersChangedSpy(dialogHelper.dialog, SIGNAL(nameFiltersChanged()));
+ QVERIFY(nameFiltersChangedSpy.isValid());
+ const QStringList nameFilters = { "Text files (*.txt)", "HTML files (*.html)" };
+ dialogHelper.dialog->setNameFilters(nameFilters);
+ QCOMPARE(dialogHelper.dialog->nameFilters(), nameFilters);
+ QCOMPARE(nameFiltersChangedSpy.count(), 1);
+ QCOMPARE(dialogHelper.dialog->selectedNameFilter()->name(), "Text files");
+ QCOMPARE(dialogHelper.dialog->selectedNameFilter()->index(), 0);
+ QCOMPARE(dialogHelper.dialog->selectedNameFilter()->extensions(), { "txt" });
+ QCOMPARE(dialogHelper.dialog->selectedNameFilter()->globs(), { "*.txt" });
+
+ // Re-open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ // QQuickFileDialogImpl's values only get set before opening.
+ QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->name(), "Text files");
+ QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->index(), 0);
+ QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->extensions(), { "txt" });
+ QCOMPARE(dialogHelper.quickDialog->selectedNameFilter()->globs(), { "*.txt" });
+
+ // Only "sub-dir", "text1.txt" and "text2.txt" should be visible, since *.txt is the first filter.
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QString failureMessage;
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView,
+ { tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() }, failureMessage), qPrintable(failureMessage));
+
+ // Open the ComboBox's popup.
+ const QQuickComboBox *comboBox = dialogHelper.quickDialog->findChild<QQuickComboBox*>();
+ QVERIFY(comboBox);
+ const QPoint comboBoxCenterPos = comboBox->mapToScene({ comboBox->width() / 2, comboBox->height() / 2 }).toPoint();
+ QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, comboBoxCenterPos);
+ QTRY_VERIFY(comboBox->popup()->isOpened());
+
+ // Select the .html delegate and close the combobox popup. The only visible entry should be the sub-dir.
+ QQuickListView *comboBoxPopupListView = qobject_cast<QQuickListView*>(comboBox->popup()->contentItem());
+ QVERIFY(comboBoxPopupListView);
+ {
+ QQuickAbstractButton *htmlDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(comboBoxPopupListView, 1, htmlDelegate));
+ QVERIFY(clickButton(htmlDelegate));
+ }
+ QTRY_VERIFY(!comboBox->popup()->isVisible());
+ // Use QTRY_VERIFY2 here to fix a failure on QEMU armv7 (QT_QPA_PLATFORM=offscreen).
+ // Not sure why it's necessary.
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, { tempSubDir.path() }, failureMessage), qPrintable(failureMessage));
+
+ // Open the popup again.
+ QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, comboBoxCenterPos);
+ QTRY_VERIFY(comboBox->popup()->isOpened());
+
+ // Select .txt and close the combobox popup. The original entries should be visible.
+ {
+ QQuickAbstractButton *txtDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(comboBoxPopupListView, 0, txtDelegate));
+ QCOMPARE(txtDelegate->text(), nameFilters.at(0));
+ QVERIFY(clickButton(txtDelegate));
+ }
+ QTRY_VERIFY(!comboBox->popup()->isVisible());
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView,
+ { tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() }, failureMessage), qPrintable(failureMessage));
+}
+
+void tst_QQuickFileDialogImpl::changeNameFiltersAfterChangingFolder()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindAllTxtHtmlNameFilters.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Go into the "sub-dir" folder.
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QString failureMessage;
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView,
+ { tempSubDir.path(), tempFile1->fileName(), tempFile2->fileName() }, failureMessage), qPrintable(failureMessage));
+ QQuickFileDialogDelegate *subDirDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, subDirDelegate));
+ QVERIFY(doubleClickButton(subDirDelegate));
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
+ COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(tempSubDir.path()));
+
+ // Open the ComboBox's popup.
+ const QQuickComboBox *comboBox = dialogHelper.quickDialog->findChild<QQuickComboBox*>();
+ QVERIFY(comboBox);
+ const QPoint comboBoxCenterPos = comboBox->mapToScene({ comboBox->width() / 2, comboBox->height() / 2 }).toPoint();
+ QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, comboBoxCenterPos);
+ QTRY_VERIFY(comboBox->popup()->isOpened());
+
+ // Select the .html delegate, close the combobox popup, and ensure that the change had an effect.
+ QQuickListView *comboBoxPopupListView = qobject_cast<QQuickListView*>(comboBox->popup()->contentItem());
+ QVERIFY(comboBoxPopupListView);
+ {
+ QQuickAbstractButton *htmlDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(comboBoxPopupListView, 2, htmlDelegate));
+ QVERIFY(clickButton(htmlDelegate));
+ }
+ QTRY_VERIFY(!comboBox->popup()->isVisible());
+ // There are no HTML files in "sub-dir", so there should only be the one "sub-sub-dir" delegate.
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, { tempSubSubDir.path() }, failureMessage), qPrintable(failureMessage));
+}
+
+void tst_QQuickFileDialogImpl::tabFocusNavigation()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindTxtHtmlNameFilters.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ QList<QQuickItem*> expectedFocusItems;
+
+ // The initial focus should be on the first delegate.
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *firstDelegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, firstDelegate));
+ expectedFocusItems << firstDelegate;
+
+ // Tab should move to the name filters combobox.
+ QQuickComboBox *comboBox = dialogHelper.quickDialog->findChild<QQuickComboBox*>();
+ QVERIFY(comboBox);
+ expectedFocusItems << comboBox;
+
+ // Next, the left-most dialog button.
+ auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
+ QVERIFY(dialogButtonBox);
+ QCOMPARE(dialogButtonBox->count(), 2);
+ auto leftMostButton = qobject_cast<QQuickAbstractButton*>(dialogButtonBox->itemAt(0));
+ QVERIFY(leftMostButton);
+ expectedFocusItems << leftMostButton;
+
+ // Then, the right-most dialog button.
+ auto rightMostButton = qobject_cast<QQuickAbstractButton*>(dialogButtonBox->itemAt(1));
+ QVERIFY(rightMostButton);
+ expectedFocusItems << rightMostButton;
+
+ // Then, the up button.
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ expectedFocusItems << breadcrumbBar->upButton();
+
+ // Finally, add each bread crumb delegate.
+ for (int i = 0; i < fileDialogListView->count(); ++i) {
+ QQuickFileDialogDelegate *delegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, i, delegate));
+ expectedFocusItems << delegate;
+ }
+
+ // Tab through each item, checking the focus after each.
+ for (auto expectedFocusItem : qAsConst(expectedFocusItems)) {
+ // Check the focus item first so that we account for the first item.
+ // Print detailed failure message as workaround for QTBUG-92102.
+ QVERIFY2(dialogHelper.window()->activeFocusItem() == expectedFocusItem, qPrintable(QString::fromLatin1(
+ "\n Actual: %1\n Expected: %2").arg(QDebug::toString(dialogHelper.window()->activeFocusItem()))
+ .arg(QDebug::toString(expectedFocusItem))));
+
+ if (expectedFocusItem != expectedFocusItems.last())
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Tab);
+ }
+
+ // Ensure the order is reversed when shift-tabbing.
+ std::reverse(expectedFocusItems.begin(), expectedFocusItems.end());
+ // We know the first (last) item has focus already, so skip it.
+ expectedFocusItems.removeFirst();
+ for (auto expectedFocusItem : qAsConst(expectedFocusItems)) {
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Tab, Qt::ShiftModifier);
+
+ QCOMPARE(dialogHelper.window()->activeFocusItem(), expectedFocusItem);
+ }
+}
+
+void tst_QQuickFileDialogImpl::acceptRejectLabel()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "acceptRejectLabel.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Check that the accept and reject buttons' labels have changed.
+ auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
+ QVERIFY(dialogButtonBox);
+ QVERIFY(findDialogButton(dialogButtonBox, "AcceptTest"));
+ QVERIFY(findDialogButton(dialogButtonBox, "RejectTest"));
+
+ // Close the dialog.
+ dialogHelper.dialog->close();
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+
+ // Reset back to the default text.
+ dialogHelper.dialog->resetAcceptLabel();
+ dialogHelper.dialog->resetRejectLabel();
+
+ // Re-open the dialog.
+ dialogHelper.dialog->open();
+ QVERIFY(dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(dialogHelper.quickDialog->isOpened());
+
+ // Check that the defaults are back.
+ const QString openText = QQuickDialogButtonBoxPrivate::buttonText(QPlatformDialogHelper::Open);
+ QVERIFY2(findDialogButton(dialogButtonBox, openText), qPrintable(QString::fromLatin1(
+ "Failed to find dialog button with text \"%1\"").arg(openText)));
+ const QString cancelText = QQuickDialogButtonBoxPrivate::buttonText(QPlatformDialogHelper::Cancel);
+ QVERIFY2(findDialogButton(dialogButtonBox, cancelText), qPrintable(QString::fromLatin1(
+ "Failed to find dialog button with text \"%1\"").arg(cancelText)));
+}
+
+void tst_QQuickFileDialogImpl::bindTitle()
+{
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindTitle.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Open the dialog and check that the correct title is displayed.
+ QQuickFileDialog *dialog = dialogHelper.window()->property("dialog").value<QQuickFileDialog*>();
+ QVERIFY(dialog);
+ const QString expectedTitle = QLatin1String("Test Title");
+ QCOMPARE(dialogHelper.dialog->title(), expectedTitle);
+ QCOMPARE(dialogHelper.quickDialog->title(), expectedTitle);
+ auto header = dialogHelper.quickDialog->header();
+ QVERIFY(header);
+ auto dialogTitleBarLabel = dialogHelper.quickDialog->header()->findChild<QQuickLabel*>("dialogTitleBarLabel");
+ QVERIFY(dialogTitleBarLabel);
+ QCOMPARE(dialogTitleBarLabel->text(), expectedTitle);
+}
+
+void tst_QQuickFileDialogImpl::itemsDisabledWhenNecessary()
+{
+ QTemporaryDir anotherTempDir;
+ QVERIFY(anotherTempDir.isValid());
+ QDir subDir(anotherTempDir.path());
+ QVERIFY(subDir.mkdir("emptyDir"));
+ QVERIFY(subDir.cd("emptyDir"));
+
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ {{ "initialFolder", QUrl::fromLocalFile(subDir.path()) }});
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(subDir.path()));
+ COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(subDir.path()));
+
+ // We opened it in a folder that has no files, so the Open button should be disabled.
+ QVERIFY(dialogHelper.quickDialog->footer());
+ auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
+ QVERIFY(dialogButtonBox);
+ QQuickAbstractButton* openButton = findDialogButton(dialogButtonBox, "Open");
+ QVERIFY(openButton);
+ QCOMPARE(openButton->isEnabled(), false);
+
+ // Now go up. The Open button should now be enabled.
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY(clickButton(breadcrumbBar->upButton()));
+ QCOMPARE(openButton->isEnabled(), true);
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(anotherTempDir.path()));
+ COMPARE_URL(dialogHelper.quickDialog->currentFolder(), QUrl::fromLocalFile(anotherTempDir.path()));
+
+ // Get the text edit visible with Ctrl+L. The Open button should now be disabled.
+ const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+ QCOMPARE(openButton->isEnabled(), false);
+
+ // Hide it with the escape key. The Open button should now be enabled.
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Escape);
+ QVERIFY(!breadcrumbBar->textField()->isVisible());
+ QCOMPARE(openButton->isEnabled(), true);
+}
+
+void tst_QQuickFileDialogImpl::fileMode_data()
+{
+ QTest::addColumn<QQuickFileDialog::FileMode>("fileMode");
+
+ QTest::newRow("OpenFile") << QQuickFileDialog::OpenFile;
+ QTest::newRow("OpenFiles") << QQuickFileDialog::OpenFiles;
+ QTest::newRow("SaveFile") << QQuickFileDialog::SaveFile;
+}
+
+void tst_QQuickFileDialogImpl::fileMode()
+{
+ QFETCH(QQuickFileDialog::FileMode, fileMode);
+
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ dialogHelper.dialog->setFileMode(fileMode);
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Select the first file (not a directory).
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QQuickFileDialogDelegate *tempFile1Delegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 1, tempFile1Delegate));
+ COMPARE_URL(tempFile1Delegate->file(), QUrl::fromLocalFile(tempFile1->fileName()));
+ QVERIFY(clickButton(tempFile1Delegate));
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile1->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempFile1->fileName()) });
+
+ // All modes should support opening an existing file, so the Open button should be enabled.
+ QVERIFY(dialogHelper.quickDialog->footer());
+ auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
+ QVERIFY(dialogButtonBox);
+ QQuickAbstractButton* openButton = findDialogButton(dialogButtonBox, "Open");
+ QVERIFY(openButton);
+ QCOMPARE(openButton->isEnabled(), true);
+
+ // Only the OpenFiles mode should allow multiple files to be selected, however.
+ QQuickFileDialogDelegate *tempFile2Delegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 2, tempFile2Delegate));
+ COMPARE_URL(tempFile2Delegate->file(), QUrl::fromLocalFile(tempFile2->fileName()));
+ QTest::keyPress(dialogHelper.window(), Qt::Key_Shift);
+ QVERIFY(clickButton(tempFile2Delegate));
+ QTest::keyRelease(dialogHelper.window(), Qt::Key_Shift);
+ if (fileMode == QQuickFileDialog::OpenFiles) {
+ // currentFile() always points to the first file in the list of selected files.
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile1->fileName()));
+ const QList<QUrl> expectedSelectedFiles = {
+ QUrl::fromLocalFile(tempFile1->fileName()), QUrl::fromLocalFile(tempFile2->fileName()) };
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), expectedSelectedFiles);
+ } else {
+ // OpenFile and SaveFile dialogs should have tempFile2 selected since it was clicked,
+ // but the shift should do nothing, so tempFile1 should no longer be selected.
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) });
+ }
+
+ // Get the text edit visible with Ctrl+L.
+ const auto editPathKeySequence = QKeySequence(Qt::CTRL | Qt::Key_L);
+ QTest::keySequence(dialogHelper.window(), editPathKeySequence);
+ auto breadcrumbBar = dialogHelper.quickDialog->findChild<QQuickFolderBreadcrumbBar*>();
+ QVERIFY(breadcrumbBar);
+ QVERIFY(breadcrumbBar->textField()->isVisible());
+
+ // Typing in the name of an non-existent file should only work for SaveFile.
+ const QString nonExistentFilePath = "/foo/bar.txt";
+ enterText(dialogHelper.window(), nonExistentFilePath);
+ QCOMPARE(breadcrumbBar->textField()->text(), nonExistentFilePath);
+ QTest::keyClick(dialogHelper.window(), Qt::Key_Return);
+ if (fileMode == QQuickFileDialog::SaveFile) {
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), QUrl::fromLocalFile(nonExistentFilePath));
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { QUrl::fromLocalFile(nonExistentFilePath) });
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+ } else {
+ // For OpenFile(s), we do what Qt Quick Dialogs 1.x did, and restore the previous (valid) dir path.
+ // The currentFile(s) should remain unchanged too.
+ QVERIFY(dialogHelper.dialog->isVisible());
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempDir.path()));
+ QCOMPARE(breadcrumbBar->textField()->text(), tempDir.path());
+
+ // Should be unchanged from the last time.
+ if (fileMode == QQuickFileDialog::OpenFiles) {
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile1->fileName()));
+ const QList<QUrl> expectedSelectedFiles = {
+ QUrl::fromLocalFile(tempFile1->fileName()), QUrl::fromLocalFile(tempFile2->fileName()) };
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), expectedSelectedFiles);
+ } else { // OpenFile
+ COMPARE_URL(dialogHelper.dialog->currentFile(), QUrl::fromLocalFile(tempFile2->fileName()));
+ COMPARE_URLS(dialogHelper.dialog->currentFiles(), { QUrl::fromLocalFile(tempFile2->fileName()) });
+ }
+ }
+}
+
+void tst_QQuickFileDialogImpl::defaultSuffix_data()
+{
+ QTest::addColumn<QString>("defaultSuffix");
+
+ QTest::newRow("txt") << "txt";
+ QTest::newRow(".txt") << ".txt";
+}
+
+void tst_QQuickFileDialogImpl::defaultSuffix()
+{
+ QFETCH(QString, defaultSuffix);
+
+ // Simplify the test by using a directory with no files, and add a single file there.
+ QFile tempFile1(tempSubSubDir.path() + "/file1");
+ QVERIFY(tempFile1.open(QIODevice::ReadWrite));
+
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "bindCurrentFolder.qml", {},
+ {{ "initialFolder", QUrl::fromLocalFile(tempSubSubDir.path()) }});
+ dialogHelper.dialog->setDefaultSuffix(defaultSuffix);
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ COMPARE_URL(dialogHelper.dialog->currentFolder(), QUrl::fromLocalFile(tempSubSubDir.path()));
+
+ // There should be one extension-less file: "file1".
+ auto fileDialogListView = dialogHelper.quickDialog->findChild<QQuickListView*>("fileDialogListView");
+ QVERIFY(fileDialogListView);
+ QString failureMessage;
+ const QStringList expectedVisibleFiles = { tempFile1.fileName() };
+ QTRY_VERIFY2(verifyFileDialogDelegates(fileDialogListView, expectedVisibleFiles, failureMessage), qPrintable(failureMessage));
+
+ // Choose the delegate. The suffix should be added to the delegates.
+ QQuickFileDialogDelegate *file1Delegate = nullptr;
+ QTRY_VERIFY(findViewDelegateItem(fileDialogListView, 0, file1Delegate));
+ COMPARE_URL(file1Delegate->file(), QUrl::fromLocalFile(tempFile1.fileName()));
+ QVERIFY(doubleClickButton(file1Delegate));
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+ const QUrl fileUrlWithSuffix = QUrl::fromLocalFile(tempFile1.fileName() + ".txt");
+ COMPARE_URL(dialogHelper.dialog->selectedFile(), fileUrlWithSuffix);
+ COMPARE_URLS(dialogHelper.dialog->selectedFiles(), { fileUrlWithSuffix });
+}
+
+void tst_QQuickFileDialogImpl::done_data()
+{
+ QTest::addColumn<QQuickFileDialog::StandardCode>("result");
+
+ QTest::newRow("Accepted") << QQuickFileDialog::Accepted;
+ QTest::newRow("Rejected") << QQuickFileDialog::Rejected;
+}
+
+void tst_QQuickFileDialogImpl::done()
+{
+ QFETCH(QQuickFileDialog::StandardCode, result);
+
+ // Open the dialog.
+ DialogTestHelper<QQuickFileDialog, QQuickFileDialogImpl> dialogHelper(this, "fileDialog.qml");
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage());
+ QVERIFY(dialogHelper.waitForWindowActive());
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ switch (result) {
+ case QQuickFileDialog::Accepted:
+ QVERIFY(QMetaObject::invokeMethod(dialogHelper.window(), "doneAccepted"));
+ break;
+ case QQuickFileDialog::Rejected:
+ QVERIFY(QMetaObject::invokeMethod(dialogHelper.window(), "doneRejected"));
+ break;
+ }
+
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+ QCOMPARE(dialogHelper.dialog->result(), result);
+}
+
+QTEST_MAIN(tst_QQuickFileDialogImpl)
+
+#include "tst_qquickfiledialogimpl.moc"
diff --git a/tests/auto/quickdialogs/qquickfolderdialogimpl/dummy_imports.qml b/tests/auto/quickdialogs/qquickfolderdialogimpl/dummy_imports.qml
new file mode 100644
index 0000000000..7faa9b98e0
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfolderdialogimpl/dummy_imports.qml
@@ -0,0 +1,10 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Qt.labs.folderlistmodel
+
+QtObject { }
diff --git a/tests/auto/quickdialogs/qquickfontdialogimpl/BLACKLIST b/tests/auto/quickdialogs/qquickfontdialogimpl/BLACKLIST
new file mode 100644
index 0000000000..7d88c9868a
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfontdialogimpl/BLACKLIST
@@ -0,0 +1,4 @@
+# See qtbase/src/testlib/qtestblacklist.cpp for format
+# QTBUG-94225
+[clickAroundInTheFamilyListView]
+b2qt
diff --git a/tests/auto/quickdialogs/qquickfontdialogimpl/CMakeLists.txt b/tests/auto/quickdialogs/qquickfontdialogimpl/CMakeLists.txt
new file mode 100644
index 0000000000..1b21daded0
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfontdialogimpl/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qquickfontdialogimpl
+ SOURCES
+ tst_qquickfontdialogimpl.cpp
+ DEFINES
+ QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/quickcontrols2\\\"
+ PUBLIC_LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2
+ Qt::QuickControls2Private
+ Qt::QuickControlsTestUtilsPrivate
+ Qt::QuickDialogs2Private
+ Qt::QuickDialogs2QuickImplPrivate
+ Qt::QuickDialogs2UtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickTest
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
+ TESTDATA ${test_data}
+)
+
+qt_internal_extend_target(tst_qquickfontdialogimpl CONDITION ANDROID OR IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\":/data\\\"
+)
+
+qt_internal_extend_target(tst_qquickfontdialogimpl CONDITION NOT ANDROID AND NOT IOS
+ DEFINES
+ QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+)
diff --git a/tests/auto/quickdialogs/qquickfontdialogimpl/data/fontDialog.qml b/tests/auto/quickdialogs/qquickfontdialogimpl/data/fontDialog.qml
new file mode 100644
index 0000000000..4979d473f3
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfontdialogimpl/data/fontDialog.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** 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:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Dialogs
+
+ApplicationWindow {
+ width: 640
+ height: 480
+
+ property alias dialog: dialog
+
+ FontDialog {
+ id: dialog
+ objectName: "FontDialog"
+ }
+}
diff --git a/tests/auto/quickdialogs/qquickfontdialogimpl/dummy_imports.qml b/tests/auto/quickdialogs/qquickfontdialogimpl/dummy_imports.qml
new file mode 100644
index 0000000000..5b8af918ea
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfontdialogimpl/dummy_imports.qml
@@ -0,0 +1,8 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQuick
+import QtQuick.Layouts
+
+QtObject { }
diff --git a/tests/auto/quickdialogs/qquickfontdialogimpl/tst_qquickfontdialogimpl.cpp b/tests/auto/quickdialogs/qquickfontdialogimpl/tst_qquickfontdialogimpl.cpp
new file mode 100644
index 0000000000..cd8f98eb54
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickfontdialogimpl/tst_qquickfontdialogimpl.cpp
@@ -0,0 +1,641 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/qtest.h>
+#include <QtTest/qsignalspy.h>
+#include <QtQml/qqmlfile.h>
+#include <QtQuick/private/qquicklistview_p.h>
+#include <QtQuickTemplates2/private/qquickitemdelegate_p.h>
+#include <QtQuickDialogs2/private/qquickfontdialog_p.h>
+#include <QtQuickDialogs2QuickImpl/private/qquickfontdialogimpl_p.h>
+#include <QtQuickTest/quicktest.h>
+#include <QtQuickControlsTestUtils/private/controlstestutils_p.h>
+#include <QtQuickControlsTestUtils/private/dialogstestutils_p.h>
+#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
+#include <QtQuickTemplates2/private/qquickcombobox_p.h>
+#include <QtQuickTemplates2/private/qquicktextfield_p.h>
+#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p.h>
+#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p_p.h>
+#include <QtQuickTemplates2/private/qquicklabel_p.h>
+#include <QtQuickTemplates2/private/qquickoverlay_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+using namespace QQuickVisualTestUtils;
+using namespace QQuickDialogTestUtils;
+using namespace QQuickControlsTestUtils;
+
+class tst_QQuickFontDialogImpl : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickFontDialogImpl();
+ static void initMain()
+ {
+ // We need to set this attribute.
+ QCoreApplication::setAttribute(Qt::AA_DontUseNativeDialogs);
+ // We don't want to run this test for every style, as each one will have
+ // different ways of implementing the dialogs.
+ // For now we only test one style.
+ // TODO: use Basic
+ QQuickStyle::setStyle("Fusion");
+ }
+
+private slots:
+ void changingWritingSystem();
+ void clickAroundInTheFamilyListView();
+ void settingUnderlineAndStrikeoutEffects();
+ void changeFontSize();
+ void changeDialogTitle();
+ void searchFamily();
+ void setCurrentFontFromApi();
+ void sensibleDefaults();
+
+private:
+ QQuickAbstractButton *findDialogButton(QQuickDialogButtonBox *box, const QString &buttonText)
+ {
+ for (int i = 0; i < box->count(); ++i) {
+ auto button = qobject_cast<QQuickAbstractButton *>(box->itemAt(i));
+ if (button && button->text().toUpper() == buttonText.toUpper())
+ return button;
+ }
+ return nullptr;
+ }
+
+ bool closePopup(DialogTestHelper<QQuickFontDialog, QQuickFontDialogImpl> *dialogHelper,
+ QString dialogButton, QString &failureMessage)
+ {
+ auto dialogButtonBox =
+ dialogHelper->quickDialog->footer()->findChild<QQuickDialogButtonBox *>();
+
+ if (!dialogButtonBox) {
+ failureMessage = QLatin1String("dialogButtonBox is null");
+ return false;
+ }
+
+ QQuickAbstractButton *openButton = findDialogButton(dialogButtonBox, dialogButton);
+
+ if (!openButton) {
+ failureMessage =
+ QLatin1String("Couldn't find a button with text '%1'").arg(dialogButton);
+ return false;
+ }
+
+ bool clicked = clickButton(openButton);
+
+ if (!clicked) {
+ failureMessage = QLatin1String("'%1' button was never clicked").arg(dialogButton);
+ return false;
+ }
+
+ bool visible = dialogHelper->dialog->isVisible();
+ if (visible) {
+ failureMessage = QLatin1String("Dialog is still visible after clicking the '%1' button")
+ .arg(dialogButton);
+ return false;
+ }
+ return true;
+ }
+};
+
+#define CREATE_DIALOG_TEST_HELPER \
+ DialogTestHelper<QQuickFontDialog, QQuickFontDialogImpl> dialogHelper(this, "fontDialog.qml"); \
+ QVERIFY2(dialogHelper.isWindowInitialized(), dialogHelper.failureMessage()); \
+ QVERIFY(dialogHelper.waitForWindowActive());
+
+#define CLOSE_DIALOG(BUTTON) \
+ QString errorMessage; \
+ QVERIFY2(closePopup(&dialogHelper, BUTTON, errorMessage), qPrintable(errorMessage)); \
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+
+tst_QQuickFontDialogImpl::tst_QQuickFontDialogImpl()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
+{
+}
+
+void tst_QQuickFontDialogImpl::changingWritingSystem()
+{
+ CREATE_DIALOG_TEST_HELPER
+
+ // Open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ const QQuickTextEdit *sampleEdit =
+ dialogHelper.quickDialog->findChild<QQuickTextEdit *>("sampleEdit");
+ QVERIFY(sampleEdit);
+
+ QCOMPARE(sampleEdit->text(), QFontDatabase::writingSystemSample(QFontDatabase::Any));
+
+ // Check that the font family list view exist and add signal spy.
+ const QQuickListView *fontFamilyListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("familyListView");
+ QVERIFY(fontFamilyListView);
+ QSignalSpy fontFamilyModelSpy(fontFamilyListView, SIGNAL(modelChanged()));
+
+ // Open the ComboBox's popup.
+ const QQuickComboBox *writingSystemComboBox = dialogHelper.quickDialog->findChild<QQuickComboBox*>();
+ QVERIFY(writingSystemComboBox);
+ const QPoint comboBoxCenterPos = writingSystemComboBox->mapToScene({ writingSystemComboBox->width() / 2, writingSystemComboBox->height() / 2 }).toPoint();
+ QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, comboBoxCenterPos);
+ QTRY_VERIFY(writingSystemComboBox->popup()->isOpened());
+
+ // "Any" should be selected by default.
+ QQuickListView *comboBoxPopupListView = qobject_cast<QQuickListView*>(writingSystemComboBox->popup()->contentItem());
+ QVERIFY(comboBoxPopupListView);
+ const int anyIndex = QFontDatabase::Any;
+ QQuickAbstractButton *anyDelegate = qobject_cast<QQuickAbstractButton*>(findViewDelegateItem(comboBoxPopupListView, anyIndex));
+ QVERIFY(anyDelegate);
+ QCOMPARE(anyDelegate->text(), QFontDatabase::writingSystemName(QFontDatabase::Any));
+
+ QCOMPARE(fontFamilyModelSpy.count(), 0);
+
+ // Select "Japanese" from the ComboBox.
+ const int japaneseIndex = QFontDatabase::Japanese;
+ QQuickAbstractButton *japaneseDelegate = qobject_cast<QQuickAbstractButton*>(findViewDelegateItem(comboBoxPopupListView, japaneseIndex));
+ QVERIFY(japaneseDelegate);
+ QCOMPARE(japaneseDelegate->text(), QFontDatabase::writingSystemName(QFontDatabase::Japanese));
+ QVERIFY(clickButton(japaneseDelegate));
+ QTRY_VERIFY(!writingSystemComboBox->popup()->isVisible());
+
+ // Check that the contents of the font family listview changed
+ QCOMPARE(fontFamilyModelSpy.count(), 1);
+
+ // And that the sample text is correctly set
+ QCOMPARE(sampleEdit->text(), QFontDatabase::writingSystemSample(QFontDatabase::Japanese));
+
+ // Then accept it to close it.
+ auto dialogButtonBox = dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox*>();
+ QVERIFY(dialogButtonBox);
+ QQuickAbstractButton* openButton = findDialogButton(dialogButtonBox, "Ok");
+ QVERIFY(openButton);
+ QVERIFY(clickButton(openButton));
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+}
+
+void tst_QQuickFontDialogImpl::clickAroundInTheFamilyListView()
+{
+ CREATE_DIALOG_TEST_HELPER
+
+ // Open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ QQuickListView *fontFamilyListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("familyListView");
+ QVERIFY(fontFamilyListView);
+
+ const QQuickListView *fontStyleListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("styleListView");
+ QVERIFY(fontStyleListView);
+
+ const QQuickListView *fontSizeListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("sizeListView");
+ QVERIFY(fontSizeListView);
+
+ QSignalSpy currentFontSpy(dialogHelper.dialog, SIGNAL(currentFontChanged()));
+ QSignalSpy styleModelSpy(fontStyleListView, SIGNAL(modelChanged()));
+ QSignalSpy sizeModelSpy(fontSizeListView, SIGNAL(modelChanged()));
+
+ QCOMPARE(fontFamilyListView->currentIndex(), 0);
+ QCOMPARE(fontStyleListView->currentIndex(), 0);
+ QCOMPARE(fontSizeListView->currentIndex(), 0);
+
+ auto fontListModel = QFontDatabase::families(QFontDatabase::WritingSystem::Any);
+ fontListModel.removeIf(QFontDatabase::isPrivateFamily);
+
+ // In case the font database contains a significant number of font families
+ const int maxNumberOfFamiliesToTest = 10;
+
+ for (auto i = 1; i < qMin(fontListModel.size(), maxNumberOfFamiliesToTest); ++i) {
+ currentFontSpy.clear();
+ styleModelSpy.clear();
+ sizeModelSpy.clear();
+
+ const QString err = QString("LOOP INDEX %1, EXPECTED %2, ACTUAL %3").arg(i);
+
+ const QFont currentFont = dialogHelper.dialog->currentFont();
+
+ const auto oldStyleModel = fontStyleListView->model();
+ const auto oldSizeModel = fontSizeListView->model();
+
+ const QString expected1 = fontListModel[i - 1], actual1 = currentFont.family();
+ QVERIFY2(expected1 == actual1, qPrintable(err.arg(expected1, actual1)));
+
+ QQuickAbstractButton *fontDelegate =
+ qobject_cast<QQuickAbstractButton *>(findViewDelegateItem(fontFamilyListView, i));
+ QVERIFY2(fontDelegate, qPrintable(QString("LOOP INDEX %1").arg(i)));
+
+ QVERIFY2(clickButton(fontDelegate), qPrintable(QString("LOOP INDEX %1").arg(i)));
+
+ const QString expected2 = fontListModel[i],
+ actual2 = dialogHelper.dialog->currentFont().family();
+ QVERIFY2(expected2 == actual2, qPrintable(err.arg(expected2, actual2).append(", FONT ").append(fontDelegate->text())));
+ const int currentFontSpyCount = currentFontSpy.count();
+ QVERIFY2(currentFontSpyCount == 1, qPrintable(err.arg(1).arg(currentFontSpyCount).append(", FONT ").append(fontDelegate->text())));
+ QVERIFY2((oldStyleModel == fontStyleListView->model()) != (styleModelSpy.count() == 1),
+ qPrintable(QString("LOOP INDEX %1").arg(i)));
+ QVERIFY2((oldSizeModel == fontSizeListView->model()) != (sizeModelSpy.count() == 1),
+ qPrintable(QString("LOOP INDEX %1").arg(i)));
+ }
+
+ // Then accept it to close it.
+ QVERIFY(dialogHelper.dialog->currentFont() != dialogHelper.dialog->selectedFont());
+
+ CLOSE_DIALOG("Ok");
+
+ QVERIFY(dialogHelper.dialog->currentFont() == dialogHelper.dialog->selectedFont());
+}
+
+void tst_QQuickFontDialogImpl::settingUnderlineAndStrikeoutEffects()
+{
+ CREATE_DIALOG_TEST_HELPER
+
+ // Open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ QSignalSpy currentFontSpy(dialogHelper.dialog, SIGNAL(currentFontChanged()));
+
+ QQuickCheckBox *underlineCheckBox =
+ dialogHelper.quickDialog->findChild<QQuickCheckBox *>("underlineEffect");
+ QVERIFY(underlineCheckBox);
+
+ QQuickCheckBox *strikeoutCheckBox =
+ dialogHelper.quickDialog->findChild<QQuickCheckBox *>("strikeoutEffect");
+ QVERIFY(strikeoutCheckBox);
+
+ QVERIFY(!dialogHelper.dialog->currentFont().underline());
+ QVERIFY(!dialogHelper.dialog->currentFont().strikeOut());
+
+ QVERIFY(clickButton(underlineCheckBox));
+
+ QCOMPARE(currentFontSpy.count(), 1);
+ QVERIFY(dialogHelper.dialog->currentFont().underline());
+ QVERIFY(!dialogHelper.dialog->currentFont().strikeOut());
+
+ QVERIFY(clickButton(underlineCheckBox));
+
+ QCOMPARE(currentFontSpy.count(), 2);
+ QVERIFY(!dialogHelper.dialog->currentFont().underline());
+ QVERIFY(!dialogHelper.dialog->currentFont().strikeOut());
+
+ QVERIFY(clickButton(strikeoutCheckBox));
+
+ QCOMPARE(currentFontSpy.count(), 3);
+ QVERIFY(!dialogHelper.dialog->currentFont().underline());
+ QVERIFY(dialogHelper.dialog->currentFont().strikeOut());
+
+ QVERIFY(clickButton(strikeoutCheckBox));
+
+ QCOMPARE(currentFontSpy.count(), 4);
+ QVERIFY(!dialogHelper.dialog->currentFont().underline());
+ QVERIFY(!dialogHelper.dialog->currentFont().strikeOut());
+
+ // Then accept it to close it.
+ CLOSE_DIALOG("Ok");
+}
+
+void tst_QQuickFontDialogImpl::changeFontSize()
+{
+ CREATE_DIALOG_TEST_HELPER
+
+ // Open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ QQuickTextField *sizeEdit = dialogHelper.quickDialog->findChild<QQuickTextField *>("sizeEdit");
+ QVERIFY(sizeEdit);
+
+ QQuickListView *fontSizeListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("sizeListView");
+ QVERIFY(fontSizeListView);
+
+ const QQuickItemDelegate *firstSizeDelegate =
+ qobject_cast<QQuickItemDelegate *>(findViewDelegateItem(fontSizeListView, 0));
+
+ QCOMPARE(dialogHelper.dialog->currentFont().pointSize(), firstSizeDelegate->text().toInt());
+
+ sizeEdit->setText("15");
+ QCOMPARE(dialogHelper.dialog->currentFont().pointSize(), 15);
+
+ sizeEdit->setText("22");
+ QCOMPARE(dialogHelper.dialog->currentFont().pointSize(), 22);
+
+ QVERIFY(dialogHelper.dialog->currentFont() != dialogHelper.dialog->selectedFont());
+
+ // Then accept it to close it.
+ CLOSE_DIALOG("Ok");
+
+ QVERIFY(dialogHelper.dialog->currentFont() == dialogHelper.dialog->selectedFont());
+}
+
+void tst_QQuickFontDialogImpl::changeDialogTitle()
+{
+ CREATE_DIALOG_TEST_HELPER
+
+ // Open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ const auto dialogButtonBox =
+ dialogHelper.quickDialog->footer()->findChild<QQuickDialogButtonBox *>();
+ QVERIFY(dialogButtonBox);
+ QQuickAbstractButton *cancelButton = findDialogButton(dialogButtonBox, "Cancel");
+ QVERIFY(cancelButton);
+
+ const QQuickLabel *titleLabel = dialogHelper.quickDialog->header()->findChild<QQuickLabel *>();
+ QVERIFY(titleLabel);
+
+ QCOMPARE(titleLabel->text(), QString());
+
+ const QString newTitle1 = QLatin1String("Some random title #1");
+
+ // Dialog must be closed for the title to update
+ QVERIFY(clickButton(cancelButton));
+ QVERIFY(!dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
+
+ dialogHelper.dialog->setTitle(newTitle1);
+
+ // Reopen the dialog
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+ QVERIFY(dialogHelper.dialog->isVisible());
+ QTRY_VERIFY(dialogHelper.quickDialog->isVisible());
+
+ QCOMPARE(titleLabel->text(), newTitle1);
+
+ const QString newTitle2 = QLatin1String("Some random other title #2");
+
+ dialogHelper.dialog->setTitle(newTitle2);
+
+ // Shouldn't update unless you reopen the dialog
+ QCOMPARE(titleLabel->text(), newTitle1);
+
+ QVERIFY(clickButton(cancelButton));
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ // Should now be updated
+ QCOMPARE(titleLabel->text(), newTitle2);
+
+ CLOSE_DIALOG("Ok");
+}
+
+/*
+ Represents the expected search logic we use when the user types text into
+ one of the read-only text edits.
+
+ As we test against real fonts installed on the system and hence cannot use
+ a hard-coded list, we need this helper to ensure that the (non-trivial)
+ searching behavior matches what we expect.
+*/
+class ListSearchHelper
+{
+public:
+ ListSearchHelper(const QStringList &model)
+ : m_model(model)
+ {
+ }
+
+ int expectedCurrentIndexForSearch(const QString &searchText)
+ {
+ bool redo = false;
+
+ do {
+ m_searchText.append(searchText);
+
+ for (int i = 0; i < m_model.count(); ++i) {
+ if (m_model.at(i).startsWith(m_searchText, Qt::CaseInsensitive))
+ return i;
+ }
+
+ m_searchText.clear();
+
+ redo = !redo;
+ } while (redo);
+
+ return -1;
+ }
+
+private:
+ QStringList m_model;
+ QString m_searchText;
+};
+
+void tst_QQuickFontDialogImpl::searchFamily()
+{
+ CREATE_DIALOG_TEST_HELPER
+
+ // Open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ const QQuickTextField *familyEdit =
+ dialogHelper.quickDialog->findChild<QQuickTextField *>("familyEdit");
+ QVERIFY(familyEdit);
+
+ QQuickListView *fontFamilyListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("familyListView");
+ QVERIFY(fontFamilyListView);
+
+ const QPoint familyEditCenterPos =
+ familyEdit->mapToScene({ familyEdit->width() / 2, familyEdit->height() / 2 }).toPoint();
+ QTest::mouseClick(dialogHelper.window(), Qt::LeftButton, Qt::NoModifier, familyEditCenterPos);
+ QVERIFY(familyEdit->hasActiveFocus());
+
+ QSignalSpy familyListViewCurrentIndexSpy(fontFamilyListView, SIGNAL(currentIndexChanged()));
+ QVERIFY(familyListViewCurrentIndexSpy.isValid());
+
+ const QString alphabet("abcdefghijklmnopqrstuvwxyz");
+ QStringList model = QFontDatabase::families(QFontDatabase::WritingSystem::Any);
+ model.removeIf(QFontDatabase::isPrivateFamily);
+
+ ListSearchHelper listSearchHelper(model);
+
+ // For each letter in the alphabet, press the corresponding key
+ // and check that the relevant delegate item in familyListView is selected.
+ for (auto alphabet_it = alphabet.cbegin(); alphabet_it != alphabet.cend(); alphabet_it++) {
+ const int previousIndex = fontFamilyListView->currentIndex();
+
+ const char keyEntered = alphabet_it->toLatin1();
+ QTest::keyClick(dialogHelper.window(), keyEntered);
+
+ int expectedListViewIndex = listSearchHelper.expectedCurrentIndexForSearch(QString(keyEntered));
+ if (expectedListViewIndex == -1) {
+ // There was no match, so the currentIndex should remain unchanged.
+ expectedListViewIndex = previousIndex;
+ }
+ if (fontFamilyListView->currentIndex() == expectedListViewIndex) {
+ // Working as expected; keep testing.
+ continue;
+ }
+
+ // Get the actual text of the current delegate item and the expected text.
+ auto currentDelegateItem = findViewDelegateItem(fontFamilyListView, fontFamilyListView->currentIndex());
+ QVERIFY(currentDelegateItem);
+ const auto actualDelegateText = currentDelegateItem->property("text").toString();
+ const auto expectedDelegateText = expectedListViewIndex != -1 ? model.at(expectedListViewIndex) : "(none)";
+
+ QFAIL(qPrintable(QString::fromLatin1("Expected fontFamilyListView to"
+ " change its currentIndex to %1 (%2) after typing '%3', but it is %4 (%5)")
+ .arg(expectedListViewIndex)
+ .arg(expectedDelegateText)
+ .arg(keyEntered)
+ .arg(fontFamilyListView->currentIndex())
+ .arg(actualDelegateText)));
+ }
+
+ CLOSE_DIALOG("Ok");
+}
+
+void tst_QQuickFontDialogImpl::setCurrentFontFromApi()
+{
+ CREATE_DIALOG_TEST_HELPER
+
+ QSignalSpy currentFontSpy(dialogHelper.dialog, SIGNAL(currentFontChanged()));
+
+ // Open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ QQuickListView *fontFamilyListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("familyListView");
+ QVERIFY(fontFamilyListView);
+
+ QQuickListView *fontStyleListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("styleListView");
+ QVERIFY(fontStyleListView);
+
+ QQuickListView *fontSizeListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("sizeListView");
+ QVERIFY(fontSizeListView);
+
+ QQuickTextField *fontSizeEdit =
+ dialogHelper.quickDialog->findChild<QQuickTextField *>("sizeEdit");
+ QVERIFY(fontSizeEdit);
+
+ // From when the listviews are populated
+ QCOMPARE(currentFontSpy.count(), 1);
+
+ currentFontSpy.clear();
+
+ // testing some available fonts
+ const auto familyModel = fontFamilyListView->model().toStringList();
+ int spyCounter = 0;
+ const int maxNumberOfFontFamilies = 10, maxNumberOfStyles = 3;
+ int size = 10;
+ int familyCounter = 0;
+ for (auto family = familyModel.cbegin(); family != familyModel.cend() && familyCounter < maxNumberOfFontFamilies; family++, familyCounter++)
+ {
+ const QString style = QFontDatabase::styles(*family).constFirst();
+
+ const QFont f = QFontDatabase::font(*family, style, size);
+ dialogHelper.dialog->setCurrentFont(f);
+
+ const int familyIndex = fontFamilyListView->currentIndex();
+ QVERIFY(familyIndex >= 0);
+ QCOMPARE(familyModel.at(familyIndex), *family);
+
+ const QStringList styleModel = fontStyleListView->model().toStringList();
+ QVERIFY(!styleModel.isEmpty()); // Any valid font should always have at least one style.
+ QCOMPARE(styleModel.at(fontStyleListView->currentIndex()), style);
+ QCOMPARE(fontSizeEdit->text(), QString::number(size++));
+
+ QCOMPARE(currentFontSpy.count(), ++spyCounter);
+
+ for (int styleIt = 0; styleIt < qMin(styleModel.count(), maxNumberOfStyles); ++styleIt) {
+ const QString currentStyle = styleModel.at(styleIt);
+
+ const QFont f = QFontDatabase::font(*family, currentStyle, size);
+ dialogHelper.dialog->setCurrentFont(f);
+
+ QCOMPARE(styleModel.at(fontStyleListView->currentIndex()), currentStyle);
+ QCOMPARE(currentFontSpy.count(), ++spyCounter);
+ }
+ }
+
+ CLOSE_DIALOG("Ok");
+}
+
+void tst_QQuickFontDialogImpl::sensibleDefaults()
+{
+ CREATE_DIALOG_TEST_HELPER
+
+ // Open the dialog.
+ QVERIFY(dialogHelper.openDialog());
+ QTRY_VERIFY(dialogHelper.isQuickDialogOpen());
+
+ QQuickListView *fontFamilyListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("familyListView");
+ QVERIFY(fontFamilyListView);
+ QQuickListView *fontStyleListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("styleListView");
+ QVERIFY(fontStyleListView);
+ QQuickListView *fontSizeListView =
+ dialogHelper.quickDialog->findChild<QQuickListView *>("sizeListView");
+ QVERIFY(fontSizeListView);
+ QQuickTextField *fontFamilyTextField =
+ dialogHelper.quickDialog->findChild<QQuickTextField *>("familyEdit");
+ QVERIFY(fontFamilyTextField);
+ QQuickTextField *fontStyleTextField =
+ dialogHelper.quickDialog->findChild<QQuickTextField *>("styleEdit");
+ QVERIFY(fontStyleTextField);
+
+ // The indexes should initially be 0.
+ QCOMPARE(fontFamilyListView->currentIndex(), 0);
+ QCOMPARE(fontStyleListView->currentIndex(), 0);
+ QCOMPARE(fontSizeListView->currentIndex(), 0);
+
+ // Setting the family to an empty model
+ fontFamilyListView->setModel(QStringList());
+
+ // The listviews for font family and style should now have an empty model with indexes set to -1
+ QVERIFY(fontFamilyListView->model().toStringList().isEmpty());
+ QVERIFY(fontStyleListView->model().toStringList().isEmpty());
+ QCOMPARE(fontFamilyListView->currentIndex(), -1);
+ QCOMPARE(fontStyleListView->currentIndex(), -1);
+ QVERIFY(fontFamilyTextField->text().isEmpty());
+ QVERIFY(fontStyleTextField->text().isEmpty());
+
+ CLOSE_DIALOG("Ok");
+}
+
+QTEST_MAIN(tst_QQuickFontDialogImpl)
+
+#include "tst_qquickfontdialogimpl.moc"
diff --git a/tests/auto/quickdialogs/qquickmessagedialogimpl/dummy_imports.qml b/tests/auto/quickdialogs/qquickmessagedialogimpl/dummy_imports.qml
new file mode 100644
index 0000000000..5b8af918ea
--- /dev/null
+++ b/tests/auto/quickdialogs/qquickmessagedialogimpl/dummy_imports.qml
@@ -0,0 +1,8 @@
+// This file exists for the sole purpose for qmlimportscanner to find
+// which modules it needs to extract for deployment.
+// Otherwise, it fails to find the imports that are expressed in C++.
+
+import QtQuick
+import QtQuick.Layouts
+
+QtObject { }
diff --git a/tests/auto/quicktest/CMakeLists.txt b/tests/auto/quicktest/CMakeLists.txt
index 45c763eec9..07b7cd7246 100644
--- a/tests/auto/quicktest/CMakeLists.txt
+++ b/tests/auto/quicktest/CMakeLists.txt
@@ -3,5 +3,7 @@
add_subdirectory(polish)
add_subdirectory(signalspy)
add_subdirectory(quicktestmainwithsetup)
-add_subdirectory(testfiltering)
+if(QT_FEATURE_process AND NOT ANDROID) # QTBUG-100175
+ add_subdirectory(testfiltering)
+endif()
add_subdirectory(testswithcomponents)
diff --git a/tests/auto/quicktest/polish-qml/CMakeLists.txt b/tests/auto/quicktest/polish-qml/CMakeLists.txt
index ff09b1e82e..0cf36f9ab4 100644
--- a/tests/auto/quicktest/polish-qml/CMakeLists.txt
+++ b/tests/auto/quicktest/polish-qml/CMakeLists.txt
@@ -13,14 +13,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_polish-qml
QMLTEST
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_polish-qml.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Quick
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quicktest/polish-qml/tst_polish-qml.cpp b/tests/auto/quicktest/polish-qml/tst_polish-qml.cpp
index e525a8a5af..a378af58af 100644
--- a/tests/auto/quicktest/polish-qml/tst_polish-qml.cpp
+++ b/tests/auto/quicktest/polish-qml/tst_polish-qml.cpp
@@ -33,8 +33,6 @@
#include <QtQuick/qquickview.h>
#include <QtQuickTest/quicktest.h>
-#include "../../shared/util.h"
-
class CustomItem : public QQuickItem
{
Q_OBJECT
diff --git a/tests/auto/quicktest/polish/CMakeLists.txt b/tests/auto/quicktest/polish/CMakeLists.txt
index d980935c88..acb29bab9d 100644
--- a/tests/auto/quicktest/polish/CMakeLists.txt
+++ b/tests/auto/quicktest/polish/CMakeLists.txt
@@ -13,14 +13,12 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_polish
QMLTEST
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_polish.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Quick
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quicktest/polish/tst_polish.cpp b/tests/auto/quicktest/polish/tst_polish.cpp
index 3b96002cd2..ec0580c15d 100644
--- a/tests/auto/quicktest/polish/tst_polish.cpp
+++ b/tests/auto/quicktest/polish/tst_polish.cpp
@@ -33,7 +33,7 @@
#include <QQuickView>
#include <QtQuickTest/quicktest.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
class CustomItem : public QQuickItem
{
@@ -62,6 +62,7 @@ private slots:
};
tst_Polish::tst_Polish()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qmlRegisterType<CustomItem>("Test", 1, 0, "CustomItem");
}
diff --git a/tests/auto/quicktest/quicktestmainwithsetup/CMakeLists.txt b/tests/auto/quicktest/quicktestmainwithsetup/CMakeLists.txt
index 9d627dbe43..bca7d7fb00 100644
--- a/tests/auto/quicktest/quicktestmainwithsetup/CMakeLists.txt
+++ b/tests/auto/quicktest/quicktestmainwithsetup/CMakeLists.txt
@@ -10,16 +10,19 @@ file(GLOB_RECURSE test_data_glob
${CMAKE_CURRENT_SOURCE_DIR}/data/*.qml)
list(APPEND test_data ${test_data_glob})
+file(GLOB_RECURSE test_imports_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/imports/*)
+list(APPEND test_data ${test_imports_glob})
+
qt_internal_add_test(tst_quicktestmainwithsetup
QMLTEST
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_quicktestmainwithsetup.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Quick
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quicktest/quicktestmainwithsetup/tst_quicktestmainwithsetup.cpp b/tests/auto/quicktest/quicktestmainwithsetup/tst_quicktestmainwithsetup.cpp
index b5deeceac4..38b50bd617 100644
--- a/tests/auto/quicktest/quicktestmainwithsetup/tst_quicktestmainwithsetup.cpp
+++ b/tests/auto/quicktest/quicktestmainwithsetup/tst_quicktestmainwithsetup.cpp
@@ -33,8 +33,6 @@
#include <QtQuick/qquickview.h>
#include <QtQuickTest/quicktest.h>
-#include "../../shared/util.h"
-
class QmlRegisterTypeCppType : public QObject
{
Q_OBJECT
diff --git a/tests/auto/quicktest/signalspy/CMakeLists.txt b/tests/auto/quicktest/signalspy/CMakeLists.txt
index cda19b605a..2618073cf3 100644
--- a/tests/auto/quicktest/signalspy/CMakeLists.txt
+++ b/tests/auto/quicktest/signalspy/CMakeLists.txt
@@ -4,16 +4,20 @@
## tst_signalspy Test:
#####################################################################
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*)
+list(APPEND test_data ${test_data_glob})
+
qt_internal_add_test(tst_signalspy
SOURCES
- ../../shared/util.cpp ../../shared/util.h
mypropertymap.cpp mypropertymap.h
tst_signalspy.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::Gui
Qt::Quick
+ Qt::QuickTestUtilsPrivate
+ TESTDATA ${test_data}
)
## Scopes:
diff --git a/tests/auto/quicktest/signalspy/data/signalspy2.qml b/tests/auto/quicktest/signalspy/data/signalspy2.qml
new file mode 100644
index 0000000000..b314e4f187
--- /dev/null
+++ b/tests/auto/quicktest/signalspy/data/signalspy2.qml
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtTest 1.1
+import MyImport 1.0
+
+Rectangle {
+ id:rect
+ width: 200
+ height: 200
+ color:"red"
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ }
+
+ MyPropertyMap {
+ id: propertyMap
+ objectName: "propertyMap"
+ }
+
+ SignalSpy {
+ objectName: "mouseSpy"
+ signalName: "pressed"
+ target: mouseArea
+ }
+
+ SignalSpy {
+ objectName: "propertyMapSpy"
+ signalName: "mySignal"
+ target: propertyMap
+ }
+}
diff --git a/tests/auto/quicktest/signalspy/tst_signalspy.cpp b/tests/auto/quicktest/signalspy/tst_signalspy.cpp
index 0806f43c1c..120e4394e1 100644
--- a/tests/auto/quicktest/signalspy/tst_signalspy.cpp
+++ b/tests/auto/quicktest/signalspy/tst_signalspy.cpp
@@ -32,7 +32,7 @@
#include <qquickitem.h>
#include <qquickview.h>
-#include "../../shared/util.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include "mypropertymap.h"
class tst_SignalSpy : public QQmlDataTest
@@ -50,6 +50,7 @@ private:
};
tst_SignalSpy::tst_SignalSpy()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
qmlRegisterType<MyPropertyMap>("MyImport", 1, 0, "MyPropertyMap");
}
@@ -69,25 +70,32 @@ void tst_SignalSpy::testValid()
void tst_SignalSpy::testCount()
{
- QQuickView window;
- window.resize(200, 200);
- window.setSource(testFileUrl("signalspy.qml"));
- window.show();
- QVERIFY(QTest::qWaitForWindowActive(&window));
- QVERIFY(window.rootObject() != nullptr);
-
- QObject *mouseSpy = window.rootObject()->findChild<QObject*>("mouseSpy");
- QCOMPARE(mouseSpy->property("count").toInt(), 0);
-
- QObject *propertyMapSpy = window.rootObject()->findChild<QObject*>("propertyMapSpy");
- QCOMPARE(propertyMapSpy->property("count").toInt(), 0);
-
- QTest::mouseClick(&window, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(100, 100));
- QTRY_COMPARE(mouseSpy->property("count").toInt(), 1);
-
- MyPropertyMap *propertyMap = static_cast<MyPropertyMap *>(window.rootObject()->findChild<QObject*>("propertyMap"));
- Q_EMIT propertyMap->mySignal();
- QCOMPARE(propertyMapSpy->property("count").toInt(), 1);
+ const QUrl urls[] = {
+ testFileUrl("signalspy.qml"),
+ testFileUrl("signalspy2.qml"),
+ };
+ for (const auto &url : urls) {
+ QQuickView window;
+ window.resize(200, 200);
+ window.setSource(url);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+ QVERIFY(window.rootObject() != nullptr);
+
+ QObject *mouseSpy = window.rootObject()->findChild<QObject *>("mouseSpy");
+ QCOMPARE(mouseSpy->property("count").toInt(), 0);
+
+ QObject *propertyMapSpy = window.rootObject()->findChild<QObject *>("propertyMapSpy");
+ QCOMPARE(propertyMapSpy->property("count").toInt(), 0);
+
+ QTest::mouseClick(&window, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(100, 100));
+ QTRY_COMPARE(mouseSpy->property("count").toInt(), 1);
+
+ MyPropertyMap *propertyMap = static_cast<MyPropertyMap *>(
+ window.rootObject()->findChild<QObject *>("propertyMap"));
+ Q_EMIT propertyMap->mySignal();
+ QCOMPARE(propertyMapSpy->property("count").toInt(), 1);
+ }
}
QTEST_MAIN(tst_SignalSpy)
diff --git a/tests/auto/quickwidgets/qquickwidget/BLACKLIST b/tests/auto/quickwidgets/qquickwidget/BLACKLIST
index 44ab3e9397..095e9ee484 100644
--- a/tests/auto/quickwidgets/qquickwidget/BLACKLIST
+++ b/tests/auto/quickwidgets/qquickwidget/BLACKLIST
@@ -3,5 +3,3 @@ opensuse-42.3
opensuse-leap
[enterLeave]
macos
-[synthMouseFromTouch] # QTBUG-86729
-*
diff --git a/tests/auto/quickwidgets/qquickwidget/CMakeLists.txt b/tests/auto/quickwidgets/qquickwidget/CMakeLists.txt
index 9018d5544d..5ce5cf3125 100644
--- a/tests/auto/quickwidgets/qquickwidget/CMakeLists.txt
+++ b/tests/auto/quickwidgets/qquickwidget/CMakeLists.txt
@@ -12,19 +12,19 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquickwidget
SOURCES
- ../../shared/util.cpp ../../shared/util.h
tst_qquickwidget.cpp
- INCLUDE_DIRECTORIES
- ../../shared
PUBLIC_LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTemplates2Private
Qt::QuickWidgets
Qt::QuickWidgetsPrivate
Qt::WidgetsPrivate
+ Qt::QuickTestUtilsPrivate
+ Qt::TestPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/quickwidgets/qquickwidget/data/FocusOnClick.qml b/tests/auto/quickwidgets/qquickwidget/data/FocusOnClick.qml
new file mode 100644
index 0000000000..6b1ca0f15a
--- /dev/null
+++ b/tests/auto/quickwidgets/qquickwidget/data/FocusOnClick.qml
@@ -0,0 +1,33 @@
+import QtQuick
+
+Rectangle {
+ width: 300
+ height: 100
+ color: "lightblue"
+ Column {
+ Rectangle {
+ width: 150
+ height: 50
+ color: text1.activeFocus ? "pink" : "gray"
+ TextInput
+ {
+ id: text1
+ objectName: "text1"
+ anchors.fill: parent
+ text: "Enter text"
+ }
+ }
+ Rectangle {
+ width: 150
+ height: 50
+ color: text2.activeFocus ? "yellow" : "lightgreen"
+ TextInput
+ {
+ id: text2
+ objectName: "text2"
+ anchors.fill: parent
+ text: "Enter text"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quickwidgets/qquickwidget/data/button.qml b/tests/auto/quickwidgets/qquickwidget/data/button.qml
new file mode 100644
index 0000000000..30698908d7
--- /dev/null
+++ b/tests/auto/quickwidgets/qquickwidget/data/button.qml
@@ -0,0 +1,27 @@
+import QtQuick
+import QtQuick.Controls.Basic
+
+Item {
+ width: 100
+ height: 100
+ visible: true
+
+ property bool wasPressed: false
+ property bool wasReleased: false
+ property bool wasClicked: false
+
+ Popup {
+ closePolicy: Popup.NoAutoClose
+ visible: true
+
+ Button {
+ objectName: "button"
+ text: "TAP ME"
+ anchors.fill: parent
+
+ onPressed: wasPressed = true
+ onReleased: wasReleased = true
+ onClicked: wasClicked = true
+ }
+ }
+}
diff --git a/tests/auto/quickwidgets/qquickwidget/data/controls.qml b/tests/auto/quickwidgets/qquickwidget/data/controls.qml
new file mode 100644
index 0000000000..3e415f33da
--- /dev/null
+++ b/tests/auto/quickwidgets/qquickwidget/data/controls.qml
@@ -0,0 +1,23 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Rectangle {
+ id: root
+ ColumnLayout {
+ anchors.fill: parent
+ ComboBox {
+ }
+ Button {
+ text: "Button"
+ }
+ CheckBox {
+ text: "CheckBox"
+ }
+ RadioButton {
+ text: "RadioButton"
+ }
+ TextField {
+ }
+ }
+}
diff --git a/tests/auto/quickwidgets/qquickwidget/data/mouse.qml b/tests/auto/quickwidgets/qquickwidget/data/mouse.qml
index 5d1c6e8443..25a7329a08 100644
--- a/tests/auto/quickwidgets/qquickwidget/data/mouse.qml
+++ b/tests/auto/quickwidgets/qquickwidget/data/mouse.qml
@@ -7,8 +7,10 @@ Rectangle {
property bool wasClicked: false
property bool wasDoubleClicked: false
property bool wasMoved: false
+ color: ma.pressed ? "wheat" : "lightsteelblue"
MouseArea {
+ id: ma
anchors.fill: parent
hoverEnabled: true
onClicked: wasClicked = true
diff --git a/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp b/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
index 6ae0dc12ac..54673b70ce 100644
--- a/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
+++ b/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
@@ -29,12 +29,15 @@
#include <qtest.h>
#include <qtesttouch.h>
#include <QtTest/QSignalSpy>
+#include <QtTest/private/qtesthelpers_p.h>
#include <QtQml/qqmlcomponent.h>
#include <QtQml/qqmlcontext.h>
#include <QtQuick/qquickview.h>
#include <QtQuick/qquickitem.h>
#include <QtQuick/private/qquickitem_p.h>
-#include "../../shared/util.h"
+#include <QtQuick/private/qquickmousearea_p.h>
+#include <QtQuickTemplates2/private/qquickbutton_p.h>
+#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtGui/QWindow>
#include <QtGui/QScreen>
#include <QtGui/QImage>
@@ -48,6 +51,10 @@
#include <QtQuickWidgets/QQuickWidget>
+#if QT_CONFIG(graphicsview)
+# include <QtWidgets/QGraphicsView>
+# include <QtWidgets/QGraphicsProxyWidget>
+#endif
Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
class MouseRecordingQQWidget : public QQuickWidget
@@ -81,17 +88,18 @@ public:
class MouseRecordingItem : public QQuickItem
{
public:
- MouseRecordingItem(bool acceptTouch, QQuickItem *parent = nullptr)
+ MouseRecordingItem(bool acceptTouch, bool acceptTouchPress, QQuickItem *parent = nullptr)
: QQuickItem(parent)
- , m_acceptTouch(acceptTouch)
+ , m_acceptTouchPress(acceptTouchPress)
{
setSize(QSizeF(300, 300));
setAcceptedMouseButtons(Qt::LeftButton);
+ setAcceptTouchEvents(acceptTouch);
}
protected:
void touchEvent(QTouchEvent* event) override {
- event->setAccepted(m_acceptTouch);
+ event->setAccepted(m_acceptTouchPress);
m_touchEvents << event->type();
qCDebug(lcTests) << "accepted?" << event->isAccepted() << event;
}
@@ -113,7 +121,7 @@ public:
QList<QEvent::Type> m_touchEvents;
private:
- bool m_acceptTouch;
+ bool m_acceptTouchPress;
};
class tst_qquickwidget : public QQmlDataTest
@@ -142,8 +150,16 @@ private slots:
void mouseEventWindowPos();
void synthMouseFromTouch_data();
void synthMouseFromTouch();
+ void touchTapMouseArea();
+ void touchTapButton();
+ void touchMultipleWidgets();
void tabKey();
void resizeOverlay();
+ void controls();
+ void focusOnClick();
+#if QT_CONFIG(graphicsview)
+ void focusOnClickInProxyWidget();
+#endif
private:
QPointingDevice *device = QTest::createTouchDevice();
@@ -151,6 +167,7 @@ private:
};
tst_qquickwidget::tst_qquickwidget()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGLRhi);
}
@@ -438,6 +455,9 @@ void tst_qquickwidget::grabBeforeShow()
void tst_qquickwidget::reparentToNewWindow()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("This test crashes on Android (see QTBUG-100173)");
+#endif
QWidget window1;
QWidget window2;
@@ -533,6 +553,9 @@ void tst_qquickwidget::shortcuts()
void tst_qquickwidget::enterLeave()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Android has no cursor");
+#endif
QQuickWidget view;
view.setSource(testFileUrl("enterleave.qml"));
@@ -608,7 +631,7 @@ void tst_qquickwidget::synthMouseFromTouch()
QWidget window;
window.setAttribute(Qt::WA_AcceptTouchEvents);
QScopedPointer<MouseRecordingQQWidget> childView(new MouseRecordingQQWidget(&window));
- MouseRecordingItem *item = new MouseRecordingItem(acceptTouch, nullptr);
+ MouseRecordingItem *item = new MouseRecordingItem(!synthMouse, acceptTouch, nullptr);
childView->setContent(QUrl(), nullptr, item);
window.resize(300, 300);
childView->resize(300, 300);
@@ -623,13 +646,106 @@ void tst_qquickwidget::synthMouseFromTouch()
QTest::touchEvent(&window, device).move(0, p2, &window);
QTest::touchEvent(&window, device).release(0, p2, &window);
- QCOMPARE(item->m_touchEvents.count(), !synthMouse && !acceptTouch ? 1 : 3);
- QCOMPARE(item->m_mouseEvents.count(), (acceptTouch || !synthMouse) ? 0 : 3);
+ qCDebug(lcTests) << item->m_touchEvents << item->m_mouseEvents;
+ QCOMPARE(item->m_touchEvents.count(), synthMouse ? 0 : (acceptTouch ? 3 : 1));
+ QCOMPARE(item->m_mouseEvents.count(), synthMouse ? 3 : 0);
QCOMPARE(childView->m_mouseEvents.count(), 0);
for (const auto &ev : item->m_mouseEvents)
QCOMPARE(ev, Qt::MouseEventSynthesizedByQt);
}
+void tst_qquickwidget::touchTapMouseArea()
+{
+ QWidget window;
+ window.resize(100, 100);
+ window.setObjectName("window widget");
+ window.setAttribute(Qt::WA_AcceptTouchEvents);
+ QVERIFY(QCoreApplication::testAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents));
+ QQuickWidget *quick = new QQuickWidget(&window);
+ quick->setSource(testFileUrl("mouse.qml"));
+ quick->move(50, 50);
+ quick->setObjectName("quick widget");
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+ QQuickItem *rootItem = quick->rootObject();
+ QVERIFY(rootItem);
+ QQuickMouseArea *ma = rootItem->findChild<QQuickMouseArea *>();
+ QVERIFY(ma);
+
+ QPoint p1 = QPoint(70, 70);
+ QTest::touchEvent(&window, device).press(0, p1, &window);
+ QTRY_COMPARE(ma->pressed(), true);
+ QTest::touchEvent(&window, device).move(0, p1, &window);
+ QTest::touchEvent(&window, device).release(0, p1, &window);
+ QTRY_COMPARE(ma->pressed(), false);
+ QVERIFY(rootItem->property("wasClicked").toBool());
+}
+
+void tst_qquickwidget::touchTapButton()
+{
+ QWidget window;
+ QQuickWidget *quick = new QQuickWidget;
+ quick->setSource(testFileUrl("button.qml"));
+
+ QHBoxLayout hbox;
+ hbox.addWidget(quick);
+ window.setLayout(&hbox);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+
+ QQuickItem *rootItem = quick->rootObject();
+ QVERIFY(rootItem);
+ QQuickButton *button = rootItem->findChild<QQuickButton *>("button");
+ QVERIFY(button);
+
+ const QPoint point = quick->mapTo(&window, button->mapToScene(button->boundingRect().center()).toPoint());
+ QTest::touchEvent(&window, device).press(0, point, &window).commit();
+ QTRY_VERIFY(rootItem->property("wasPressed").toBool());
+ QTest::touchEvent(&window, device).release(0, point, &window).commit();
+ QTRY_VERIFY(rootItem->property("wasReleased").toBool());
+ QTRY_VERIFY(rootItem->property("wasClicked").toBool());
+}
+
+void tst_qquickwidget::touchMultipleWidgets()
+{
+ QWidget window;
+ QQuickWidget *leftQuick = new QQuickWidget;
+ leftQuick->setSource(testFileUrl("button.qml"));
+ QQuickWidget *rightQuick = new QQuickWidget;
+ rightQuick->setSource(testFileUrl("button.qml"));
+
+ QHBoxLayout hbox;
+ hbox.addWidget(leftQuick);
+ hbox.addWidget(rightQuick);
+ window.setLayout(&hbox);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+
+ QQuickItem *leftRootItem = leftQuick->rootObject();
+ QQuickItem *rightRootItem = rightQuick->rootObject();
+ QVERIFY(leftRootItem);
+ QVERIFY(rightRootItem);
+ QQuickButton *leftButton = leftRootItem->findChild<QQuickButton *>("button");
+ QQuickButton *rightButton = rightRootItem->findChild<QQuickButton *>("button");
+ QVERIFY(leftButton);
+ QVERIFY(rightButton);
+
+ const QPoint leftPoint = leftQuick->mapTo(&window, leftButton->mapToScene(
+ leftButton->boundingRect().center()).toPoint());
+ const QPoint rightPoint = rightQuick->mapTo(&window, rightButton->mapToScene(
+ rightButton->boundingRect().center()).toPoint());
+ QTest::touchEvent(&window, device).press(0, leftPoint, &window).commit();
+ QTRY_VERIFY(leftRootItem->property("wasPressed").toBool());
+ QTest::touchEvent(&window, device).press(1, rightPoint, &window).commit();
+ QTRY_VERIFY(rightRootItem->property("wasPressed").toBool());
+ QTest::touchEvent(&window, device).release(1, rightPoint, &window).commit();
+ QTRY_VERIFY(rightRootItem->property("wasReleased").toBool());
+ QVERIFY(rightRootItem->property("wasClicked").toBool());
+ QTest::touchEvent(&window, device).release(0, leftPoint, &window).commit();
+ QTRY_VERIFY(leftRootItem->property("wasReleased").toBool());
+ QVERIFY(leftRootItem->property("wasClicked").toBool());
+}
+
void tst_qquickwidget::tabKey()
{
if (QGuiApplication::styleHints()->tabFocusBehavior() != Qt::TabFocusAllControls)
@@ -722,7 +838,7 @@ void tst_qquickwidget::resizeOverlay()
overlay->startListening();
widget.resize(200, 200);
- widget.show();
+ QTestPrivate::androidCompatibleShow(&widget);
QCOMPARE(rootItem->width(), 200);
QCOMPARE(rootItem->height(), 200);
QCOMPARE(overlay->width(), rootItem->width());
@@ -735,6 +851,122 @@ void tst_qquickwidget::resizeOverlay()
QCOMPARE(overlay->height(), rootItem->height());
}
+void tst_qquickwidget::controls()
+{
+ // Smoke test for having some basic Quick Controls in a scene in a QQuickWidget.
+ QWidget widget;
+ QVBoxLayout *contentVerticalLayout = new QVBoxLayout(&widget);
+ QQuickWidget *quickWidget = new QQuickWidget(testFileUrl("controls.qml"), &widget);
+ QCOMPARE(quickWidget->status(), QQuickWidget::Ready);
+ quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
+ contentVerticalLayout->addWidget(quickWidget);
+
+ widget.resize(400, 400);
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+
+ QQuickItem *rootItem = qobject_cast<QQuickItem *>(quickWidget->rootObject());
+ QVERIFY(rootItem);
+ QCOMPARE(rootItem->size(), quickWidget->size());
+ QSize oldSize = quickWidget->size();
+
+ // Verify that QTBUG-95937 no longer occurs. (on Windows with the default
+ // native windows style this used to assert in debug builds)
+ widget.resize(300, 300);
+ QTRY_VERIFY(quickWidget->width() < oldSize.width());
+ QTRY_COMPARE(rootItem->size(), quickWidget->size());
+
+ widget.hide();
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+}
+
+void tst_qquickwidget::focusOnClick()
+{
+ QQuickWidget quick;
+ quick.setSource(testFileUrl("FocusOnClick.qml"));
+ quick.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&quick));
+ QQuickItem *rootItem = quick.rootObject();
+ QVERIFY(rootItem);
+ QWindow *window = quick.windowHandle();
+ QVERIFY(window);
+
+ QQuickItem *text1 = rootItem->findChild<QQuickItem *>("text1");
+ QVERIFY(text1);
+ QQuickItem *text2 = rootItem->findChild<QQuickItem *>("text2");
+ QVERIFY(text2);
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(75, 25));
+ QTRY_VERIFY(text1->hasActiveFocus());
+ QVERIFY(!text2->hasActiveFocus());
+
+ QTest::mouseClick(window, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(75, 75));
+ QTRY_VERIFY(text2->hasActiveFocus());
+ QVERIFY(!text1->hasActiveFocus());
+
+}
+
+#if QT_CONFIG(graphicsview)
+void tst_qquickwidget::focusOnClickInProxyWidget()
+{
+ QGraphicsScene scene(0,0,400,400);
+
+ QGraphicsView view1(&scene);
+ view1.setFrameStyle(QFrame::NoFrame);
+ view1.resize(400,400);
+ QTestPrivate::androidCompatibleShow(&view1);
+
+
+
+ QQuickWidget* quick = new QQuickWidget(testFileUrl("FocusOnClick.qml"));
+ quick->resize(300,100);
+ quick->setAttribute(Qt::WA_AcceptTouchEvents);
+ QGraphicsProxyWidget* proxy = scene.addWidget(quick);
+ proxy->setAcceptTouchEvents(true);
+
+ // QTRY_VERIFY(quick->rootObject());
+ QQuickItem *rootItem = quick->rootObject();
+ QVERIFY(rootItem);
+ QQuickItem *text1 = rootItem->findChild<QQuickItem *>("text1");
+ QVERIFY(text1);
+ QQuickItem *text2 = rootItem->findChild<QQuickItem *>("text2");
+ QVERIFY(text2);
+
+ QVERIFY(QTest::qWaitForWindowExposed(&view1));
+ QWindow *window1 = view1.windowHandle();
+ QVERIFY(window1);
+
+ // Click in the QGraphicsView, outside the QuickWidget
+ QTest::mouseClick(window1, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(300, 300));
+ QTRY_VERIFY(!text1->hasActiveFocus());
+ QTRY_VERIFY(!text2->hasActiveFocus());
+
+ // Click on text1
+ QTest::mouseClick(window1, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(75, 25));
+ QTRY_VERIFY(text1->hasActiveFocus());
+ QVERIFY(!text2->hasActiveFocus());
+
+
+ // Now create a second view and repeat, in order to verify that we handle one QQuickItem being in multiple windows
+ QGraphicsView view2(&scene);
+ view2.resize(400,400);
+ QTestPrivate::androidCompatibleShow(&view2);
+
+ QVERIFY(QTest::qWaitForWindowExposed(&view2));
+ QWindow *window2 = view2.windowHandle();
+ QVERIFY(window2);
+
+ QTest::mouseClick(window2, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(300, 300));
+ QTRY_VERIFY(!text1->hasActiveFocus());
+ QTRY_VERIFY(!text2->hasActiveFocus());
+
+ QTest::mouseClick(window2, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(75, 25));
+ QTRY_VERIFY(text1->hasActiveFocus());
+ QVERIFY(!text2->hasActiveFocus());
+}
+#endif
+
QTEST_MAIN(tst_qquickwidget)
#include "tst_qquickwidget.moc"
diff --git a/tests/auto/shared/platforminputcontext.h b/tests/auto/shared/platforminputcontext.h
deleted file mode 100644
index bcb6f52c15..0000000000
--- a/tests/auto/shared/platforminputcontext.h
+++ /dev/null
@@ -1,103 +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 <qpa/qplatforminputcontext.h>
-#include <QtGui/QInputMethod>
-
-class PlatformInputContext : public QPlatformInputContext
-{
-public:
- PlatformInputContext()
- : m_visible(false), m_action(QInputMethod::Click), m_cursorPosition(0),
- m_invokeActionCallCount(0), m_showInputPanelCallCount(0), m_hideInputPanelCallCount(0),
- m_updateCallCount(0), m_direction(Qt::LeftToRight)
- {
- }
-
- void showInputPanel() override
- {
- m_visible = true;
- m_showInputPanelCallCount++;
- }
- void hideInputPanel() override
- {
- m_visible = false;
- m_hideInputPanelCallCount++;
- }
- bool isInputPanelVisible() const override
- {
- return m_visible;
- }
- void invokeAction(QInputMethod::Action action, int cursorPosition) override
- {
- m_invokeActionCallCount++;
- m_action = action;
- m_cursorPosition = cursorPosition;
- }
- void update(Qt::InputMethodQueries) override
- {
- m_updateCallCount++;
- }
-
- QLocale locale() const override
- {
- if (m_direction == Qt::RightToLeft)
- return QLocale(QLocale::Arabic);
- else
- return QLocale(QLocale::English);
- }
-
- Qt::LayoutDirection inputDirection() const override
- {
- return m_direction;
- }
-
- void setInputDirection(Qt::LayoutDirection direction) {
- m_direction = direction;
- emitLocaleChanged();
- emitInputDirectionChanged(inputDirection());
- }
-
- void clear() {
- m_cursorPosition = 0;
- m_invokeActionCallCount = 0;
- m_visible = false;
- m_showInputPanelCallCount = 0;
- m_hideInputPanelCallCount = 0;
- m_updateCallCount = 0;
- }
-
- bool m_visible;
- QInputMethod::Action m_action;
- int m_cursorPosition;
- int m_invokeActionCallCount;
- int m_showInputPanelCallCount;
- int m_hideInputPanelCallCount;
- int m_updateCallCount;
- Qt::LayoutDirection m_direction;
-};
diff --git a/tests/auto/shared/qqmljsastdumper.cpp b/tests/auto/shared/qqmljsastdumper.cpp
deleted file mode 100644
index 9d4d186655..0000000000
--- a/tests/auto/shared/qqmljsastdumper.cpp
+++ /dev/null
@@ -1,1089 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml 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$
-**/
-#include "qqmljsastdumper.h"
-#include <private/qqmljsast_p.h>
-#include <QtCore/QDebug>
-#include <QtCore/QString>
-#include <QtCore/QTextStream>
-
-QT_BEGIN_NAMESPACE
-
-namespace QQmlJS {
-using namespace AST;
-/*!
-\internal
-\enum QQmlJS::DumperOptions
-
-This enum type specifies the options for the AstDumper.
-The values can be combined with the '|' operator, and checked using the '&' operator.
-
-\value None
- Default dumping options
-\value NoLocations
- Does not dump SourceLocations, allowing one to compare equivalent AST
- generated by code formatted differently
-\value NoAnnotations
- Does not dump annotations
-\value DumpNode
- Does dump a <Node></Node> in preVisit/postVisit
-*/
-
-/*!
-\internal
-\class QQmlJS::AstDumper
-\brief Dumps or compares AST in an xml like format, mostly for testing/debugging
-
-Initialize it with a lambda that dumps a string, and configure it with .setX methods.
-If \l{indent} is set to a non zero value the xml is indented by that amount, and
-\l{baseIndent} is the initial indent.
-If \l{emitNode} is true the node tag is emitted in the preVisit/postVisit.
-If \l{emitLocation} is true the SourceLocations are emitted.
-If \l{emitAnnotations} is true annotations are emitted
-
-The implementation has unnecessary roundtrips to QString, but it is supposed to be used
-for debugging purposes...
-
-Probably you will not use the visitor at all but rather the static method diff or
-the qDebug() and ostream operator << that use the visitor...
-
-\fn AstDumper::diff(AST::Node *n1, AST::Node *n2, int nContext, DumperOptions opt, int indent)
-
-\brief compares the two AST::Node n1 and n2 and returns a string describing their first difference
-
-If there are no differences the empty string is returned, so .isEmpty() can be use to check
-for no differences.
-\l{nContext} decides how much context is printed out.
-
-*/
-
-
-QDebug operator<<(QDebug d, AST::Node *n) {
- QDebug noQuote = d.noquote().nospace();
- AstDumper visitor([&noQuote](const QString &s){ noQuote << s; });
- Node::accept(n, &visitor);
- return d;
-}
-
-
-std::ostream &operator<<(std::ostream &stream, AST::Node *n) {
- AstDumper visitor([&stream](const QString &s){ stream << s.toStdString(); });
- Node::accept(n, &visitor);
- return stream;
-}
-
-bool operator & (DumperOptions lhs, DumperOptions rhs) {
- return bool(static_cast<int>(lhs) & static_cast<int>(rhs));
-}
-
-DumperOptions operator | (DumperOptions lhs, DumperOptions rhs) {
- return DumperOptions(static_cast<int>(lhs) | static_cast<int>(rhs));
-}
-
-QString AstDumper::diff(AST::Node *n1, AST::Node *n2, int nContext, DumperOptions opt, int indent) {
- QString s1, s2;
- QTextStream d1(&s1), d2(&s2);
- AstDumper visitor1=AstDumper([&d1](const QString &s){ d1 << s; }, opt, indent);
- AstDumper visitor2=AstDumper([&d2](const QString &s){ d2 << s; }, opt, indent);
- Node::accept(n1, &visitor1);
- Node::accept(n2, &visitor2);
- d1.seek(0);
- d2.seek(0);
- std::vector<QString> preLines(nContext);
- int nLine = 0;
- bool same = true;
- QString l1, l2;
- while (same && !d1.atEnd() && !d2.atEnd()) {
- l1=d1.readLine();
- l2=d2.readLine();
- if (l1 == l2)
- preLines[nLine++ % nContext] = l1;
- else
- same = false;
- }
- QString res;
- QTextStream ss(&res);
- if (!same || !d1.atEnd() || !d2.atEnd()) {
- for (int iline = qMin(nLine, nContext); iline > 0; --iline) {
- ss << QLatin1String(" ") << preLines[(nLine - iline) % nContext] << QLatin1String("\n");
- }
- int iline = 0;
- if (!same) {
- ss << QLatin1String("-") << l1 << QLatin1String("\n");
- ++iline;
- }
- if (same && nContext == 0)
- nContext = 1;
- for (;iline < nContext && !d1.atEnd(); iline ++) {
- l1 = d1.readLine();
- ss << QLatin1String("-") << l1 << QLatin1String("\n");
- }
- iline = 0;
- if (!same) {
- ss << QLatin1String("+") << l2 << QLatin1String("\n");
- ++iline;
- }
- for (;iline < nContext && !d2.atEnd(); iline ++) {
- l2 = d2.readLine();
- ss << QLatin1String("+") << l2 << QLatin1String("\n");
- }
- }
- return res;
-}
-
-QString AstDumper::printNode(Node *n, DumperOptions opt, int indent, int baseIndent)
-{
- QString res;
- QTextStream d(&res);
- AstDumper visitor=AstDumper([&d](const QString &s){ d << s; }, opt, indent, baseIndent);
- Node::accept(n, &visitor);
- return res;
-}
-
-AstDumper::AstDumper(const std::function<void(const QString &)> &dumper, DumperOptions options, int indent, int baseIndent):
- dumper(dumper), options(options), indent(indent), baseIndent(baseIndent) {}
-
-void AstDumper::start(const QString &str) {
- dumper(QString::fromLatin1(" ").repeated(baseIndent));
- dumper(QLatin1String("<"));
- dumper(str);
- dumper(QLatin1String(">\n"));
- baseIndent += indent;
-}
-
-void AstDumper::start(const char *str) {
- start(QLatin1String(str));
-}
-
-void AstDumper::stop(const QString &str) {
- baseIndent -= indent;
- dumper(QString::fromLatin1(" ").repeated(baseIndent));
- dumper(QLatin1String("</"));
- dumper(str);
- dumper(QLatin1String(">\n"));
-}
-
-void AstDumper::stop(const char *str) {
- stop(QLatin1String(str));
-}
-
-QString AstDumper::qs(const QString &s) {
- QString res(s);
- return QLatin1String("\"") + res
- .replace(QLatin1String("\\"), QLatin1String("\\\\"))
- .replace(QLatin1String("\""), QLatin1String("\\\"")) + QLatin1String("\"");
-}
-
-QString AstDumper::qs(const char *s) {
- return qs(QLatin1String(s));
-}
-
-QString AstDumper::qs(QStringView s) {
- return qs(s.toString());
-}
-
-QString AstDumper::loc(const SourceLocation &s) {
- if (noLocations() || !s.isValid())
- return QLatin1String("\"\"");
- else {
- return QLatin1String("\"off:%1 len:%2 l:%3 c:%4\"").arg(QString::number(s.offset), QString::number(s.length), QString::number(s.startLine), QString::number(s.startColumn));
- }
-}
-
-QString AstDumper::boolStr(bool v) { return (v ? qs("true"): qs("false")); }
-
-bool AstDumper::preVisit(Node *) { if (dumpNode()) start("Node"); return true; }
-
-void AstDumper::postVisit(Node *) { if (dumpNode()) stop("Node"); }
-
-bool AstDumper::visit(UiProgram *) { start("UiProgram"); return true; }
-
-bool AstDumper::visit(UiHeaderItemList *) { start("UiHeaderItemList"); return true; }
-
-bool AstDumper::visit(UiPragma *el) {
- start(QLatin1String("UiPragma name=%1 pragmaToken=%2 semicolonToken=%3")
- .arg(qs(el->name), loc(el->pragmaToken), loc(el->semicolonToken)));
- return true;
-}
-
-bool AstDumper::visit(UiImport *el)
-{
- start(QLatin1String("UiImport fileName=%1 importId=%2 importToken=%3 fileNameToken=%4 asToken=%5 importIdToken=%6 semicolonToken=%7")
- .arg(qs(el->fileName), qs(el->importId), loc(el->importToken), loc(el->fileNameToken), loc(el->asToken), loc(el->importIdToken), loc(el->semicolonToken)));
- return true;
-}
-
-bool AstDumper::visit(UiPublicMember *el) {
- auto boolToStr = [](bool b) { return b ? "true" : "false"; };
- QString typeStr = ((el->type == UiPublicMember::Signal) ? QLatin1String("Signal") :
- (el->type == UiPublicMember::Property) ? QLatin1String("Property") : QStringLiteral("Unexpected(%1)").arg(el->type));
- start(QLatin1String("UiPublicMember type=%1 typeModifier=%2 name=%3 isDefaultMember=%4 isReadonlyMember=%5 isRequired=%6 "
- "defaultToken=%7 readonlyToken=%8 propertyToken=%9 requiredToken=%10 typeModifierToken=%11 typeToken=%12 "
- "identifierToken=%13 colonToken=%14 semicolonToken=%15")
- .arg(qs(typeStr), qs(el->typeModifier), qs(el->name),
- boolToStr(el->isDefaultMember), boolToStr(el->isReadonlyMember), boolToStr(el->isRequired),
- loc(el->defaultToken), loc(el->readonlyToken), loc(el->propertyToken),
- loc(el->requiredToken), loc(el->typeModifierToken), loc(el->typeToken),
- loc(el->identifierToken), loc(el->colonToken), loc(el->semicolonToken)
- ));
- if (!noAnnotations()) // put annotations inside the node they refer to
- Node::accept(el->annotations, this);
- Node::accept(el->memberType, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiSourceElement *el) {
- start(QLatin1String("UiSourceElement"));
- if (!noAnnotations()) // put annotations inside the node they refer to
- Node::accept(el->annotations, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiObjectDefinition *el) {
- start("UiObjectDefinition");
- if (!noAnnotations()) // put annotations inside the node they refer to
- Node::accept(el->annotations, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiObjectInitializer *el) {
- start(QLatin1String("UiObjectInitializer lbraceToken=%1 rbraceToken=%2")
- .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
- return true;
-}
-
-bool AstDumper::visit(AST::UiObjectBinding *el) {
- start(QLatin1String("UiObjectBinding colonToken=%1 hasOnToken=%2")
- .arg(loc(el->colonToken), boolStr(el->hasOnToken)));
- if (!noAnnotations()) // put annotations inside the node they refer to
- Node::accept(el->annotations, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiScriptBinding *el) {
- start(QLatin1String("UiScriptBinding colonToken=%1")
- .arg(loc(el->colonToken)));
- if (!noAnnotations()) // put annotations inside the node they refer to
- Node::accept(el->annotations, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiArrayBinding *el) {
- start(QLatin1String("UiArrayBinding colonToken=%1 lbracketToken=%2 rbracketToken=%3")
- .arg(loc(el->colonToken), loc(el->lbracketToken), loc(el->rbracketToken)));
- if (!noAnnotations()) // put annotations inside the node they refer to
- Node::accept(el->annotations, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiParameterList *el) {
- start(QLatin1String("UiArrayBinding name=%1 commaToken=%2 propertyTypeToken=%3 identifierToken=%4 colonToken=%5")
- .arg(qs(el->name), loc(el->commaToken), loc(el->propertyTypeToken), loc(el->identifierToken), loc(el->colonToken)));
- Node::accept(el->type, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiObjectMemberList *) { start("UiObjectMemberList"); return true; }
-
-bool AstDumper::visit(AST::UiArrayMemberList *el) {
- start(QLatin1String("UiArrayMemberList commaToken=%1")
- .arg(loc(el->commaToken)));
- return true;
-}
-
-bool AstDumper::visit(AST::UiQualifiedId *el) {
- start(QLatin1String("UiQualifiedId name=%1 identifierToken=%2")
- .arg(qs(el->name), loc(el->identifierToken)));
- Node::accept(el->next, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiEnumDeclaration *el) {
- start(QLatin1String("UiEnumDeclaration enumToken=%1 rbraceToken=%2 name=%3")
- .arg(loc(el->enumToken), loc(el->rbraceToken), qs(el->name)));
- if (!noAnnotations()) // put annotations inside the node they refer to
- Node::accept(el->annotations, this);
- return true;
-}
-
-bool AstDumper::visit(AST::UiEnumMemberList *el) {
- start(QLatin1String("UiEnumMemberList member=%1 value=%2 memberToken=%3 valueToken=%4")
- .arg(qs(el->member), qs(QString::number(el->value)), loc(el->memberToken), loc(el->valueToken)));
- return true;
-}
-
-bool AstDumper::visit(AST::UiVersionSpecifier *el) {
- start(QLatin1String("UiVersionSpecifier majorVersion=%1 minorVersion=%2 majorToken=%3 minorToken=%4")
- .arg(qs(QString::number(el->version.majorVersion())),
- qs(QString::number(el->version.minorVersion())),
- loc(el->majorToken), loc(el->minorToken)));
- return true;
-}
-
-bool AstDumper::visit(AST::UiInlineComponent *el) {
- start(QLatin1String("UiInlineComponent name=%1 componentToken=%2")
- .arg(qs(el->name), loc(el->componentToken)));
- if (!noAnnotations()) // put annotations inside the node they refer to
- Node::accept(el->annotations, this);
- return true;
-}
-
-bool AstDumper::visit(UiRequired *el)
-{
- start(QLatin1String("UiRequired name=%1 requiredToken=%2 semicolonToken=%3")
- .arg(qs(el->name), loc(el->requiredToken), loc(el->semicolonToken)));
- return true;
-}
-
-bool AstDumper::visit(UiAnnotation *)
-{
- start(QLatin1String("UiAnnotation"));
- return true;
-}
-
-bool AstDumper::visit(UiAnnotationList *)
-{
- start(QLatin1String("UiAnnotationList"));
- return true;
-}
-
-void AstDumper::endVisit(AST::UiProgram *) { stop("UiProgram"); }
-
-void AstDumper::endVisit(AST::UiImport *el) {
- Node::accept(el->version, this);
- stop("UiImport");
-}
-
-void AstDumper::endVisit(AST::UiHeaderItemList *) { stop("UiHeaderItemList"); }
-
-void AstDumper::endVisit(AST::UiPragma *) { stop("UiPragma"); }
-
-void AstDumper::endVisit(AST::UiPublicMember *el) {
- Node::accept(el->parameters, this);
- stop("UiPublicMember");
-}
-
-void AstDumper::endVisit(AST::UiSourceElement *) { stop("UiSourceElement"); }
-void AstDumper::endVisit(AST::UiObjectDefinition *) { stop("UiObjectDefinition"); }
-void AstDumper::endVisit(AST::UiObjectInitializer *) { stop("UiObjectInitializer"); }
-void AstDumper::endVisit(AST::UiObjectBinding *) { stop("UiObjectBinding"); }
-void AstDumper::endVisit(AST::UiScriptBinding *) { stop("UiScriptBinding"); }
-void AstDumper::endVisit(AST::UiArrayBinding *) { stop("UiArrayBinding"); }
-void AstDumper::endVisit(AST::UiParameterList *el) {
- stop("UiParameterList");
- Node::accept(el->next, this); // put other args at the same level as this one...
-}
-void AstDumper::endVisit(AST::UiObjectMemberList *) { stop("UiObjectMemberList"); }
-void AstDumper::endVisit(AST::UiArrayMemberList *) { stop("UiArrayMemberList"); }
-void AstDumper::endVisit(AST::UiQualifiedId *) { stop("UiQualifiedId"); }
-void AstDumper::endVisit(AST::UiEnumDeclaration *) { stop("UiEnumDeclaration"); }
-void AstDumper::endVisit(AST::UiEnumMemberList *el) {
- stop("UiEnumMemberList");
- Node::accept(el->next, this); // put other enum members at the same level as this one...
-}
-void AstDumper::endVisit(AST::UiVersionSpecifier *) { stop("UiVersionSpecifier"); }
-void AstDumper::endVisit(AST::UiInlineComponent *) { stop("UiInlineComponent"); }
-void AstDumper::endVisit(UiRequired *) { stop("UiRequired"); }
-void AstDumper::endVisit(UiAnnotation *) { stop("UiAnnotation"); }
-void AstDumper::endVisit(UiAnnotationList *) { stop("UiAnnotationList"); }
-
-// QQmlJS
-bool AstDumper::visit(AST::TypeExpression *el) {
- Q_UNUSED(el);
- start("TypeExpression");
- return true;
-}
-void AstDumper::endVisit(AST::TypeExpression *) { stop("TypeExpression"); }
-
-bool AstDumper::visit(AST::ThisExpression *el) {
- start(QLatin1String("ThisExpression thisToken=%1")
- .arg(loc(el->thisToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ThisExpression *) { stop("ThisExpression"); }
-
-bool AstDumper::visit(AST::IdentifierExpression *el) {
- start(QLatin1String("IdentifierExpression name=%1 identiferToken=%2")
- .arg(qs(el->name), loc(el->identifierToken)));
- return true;
-}
-void AstDumper::endVisit(AST::IdentifierExpression *) { stop("IdentifierExpression"); }
-
-bool AstDumper::visit(AST::NullExpression *el) {
- start(QLatin1String("NullExpression nullToken=%1")
- .arg(loc(el->nullToken)));
- return true;
-}
-void AstDumper::endVisit(AST::NullExpression *) { stop("NullExpression"); }
-
-bool AstDumper::visit(AST::TrueLiteral *el) {
- start(QLatin1String("TrueLiteral trueToken=%1")
- .arg(loc(el->trueToken)));
- return true;
-}
-void AstDumper::endVisit(AST::TrueLiteral *) { stop("TrueLiteral"); }
-
-bool AstDumper::visit(AST::FalseLiteral *el) {
- start(QLatin1String("FalseLiteral falseToken=%1")
- .arg(loc(el->falseToken)));
- return true;
-}
-void AstDumper::endVisit(AST::FalseLiteral *) { stop("FalseLiteral"); }
-
-bool AstDumper::visit(AST::SuperLiteral *el) {
- start(QLatin1String("SuperLiteral superToken=%1")
- .arg(loc(el->superToken)));
- return true;
-}
-void AstDumper::endVisit(AST::SuperLiteral *) { stop("SuperLiteral"); }
-
-bool AstDumper::visit(AST::StringLiteral *el) {
- start(QLatin1String("StringLiteral value=%1 literalToken=%2")
- .arg(qs(el->value), loc(el->literalToken)));
- return true;
-}
-void AstDumper::endVisit(AST::StringLiteral *) { stop("StringLiteral"); }
-
-bool AstDumper::visit(AST::TemplateLiteral *el) {
- start(QLatin1String("TemplateLiteral value=%1 rawValue=%2 literalToken=%3")
- .arg(qs(el->value), qs(el->rawValue), loc(el->literalToken)));
- Node::accept(el->expression, this);
- return true;
-}
-void AstDumper::endVisit(AST::TemplateLiteral *) { stop("TemplateLiteral"); }
-
-bool AstDumper::visit(AST::NumericLiteral *el) {
- start(QLatin1String("NumericLiteral value=%1 literalToken=%2")
- .arg(qs(QString::number(el->value)), loc(el->literalToken)));
- return true;
-}
-void AstDumper::endVisit(AST::NumericLiteral *) { stop("NumericLiteral"); }
-
-bool AstDumper::visit(AST::RegExpLiteral *el) {
- start(QLatin1String("RegExpLiteral pattern=%1 flags=%2 literalToken=%3")
- .arg(qs(el->pattern), qs(QString::number(el->flags, 16)), loc(el->literalToken)));
- return true;
-}
-void AstDumper::endVisit(AST::RegExpLiteral *) { stop("RegExpLiteral"); }
-
-bool AstDumper::visit(AST::ArrayPattern *el) {
- start(QLatin1String("ArrayPattern lbracketToken=%1, commaToken=%2, rbracketToken=%3 parseMode=%4")
- .arg(loc(el->lbracketToken),loc(el->commaToken),loc(el->rbracketToken), qs(QString::number(el->parseMode, 16))));
- return true;
-}
-void AstDumper::endVisit(AST::ArrayPattern *) { stop("ArrayPattern"); }
-
-bool AstDumper::visit(AST::ObjectPattern *el) {
- start(QLatin1String("ObjectPattern lbraceToken=%1 rbraceToken=%2 parseMode=%3")
- .arg(loc(el->lbraceToken), loc(el->rbraceToken), qs(QString::number(el->parseMode, 16))));
- return true;
-}
-void AstDumper::endVisit(AST::ObjectPattern *) { stop("ObjectPattern"); }
-
-bool AstDumper::visit(AST::PatternElementList *) { start("PatternElementList"); return true; }
-void AstDumper::endVisit(AST::PatternElementList *) { stop("PatternElementList"); }
-
-bool AstDumper::visit(AST::PatternPropertyList *) { start("PatternPropertyList"); return true; }
-void AstDumper::endVisit(AST::PatternPropertyList *) { stop("PatternPropertyList"); }
-
-bool AstDumper::visit(AST::PatternElement *el) {
- start(QLatin1String("PatternElement identifierToken=%1 bindingIdentifier=%2 type=%3 scope=%4 isForDeclaration=%5")
- .arg(loc(el->identifierToken), qs(el->bindingIdentifier), qs(QString::number(el->type, 16)),
- qs(QString::number(static_cast<int>(el->scope), 16)), boolStr(el->isForDeclaration)));
- return true;
-}
-void AstDumper::endVisit(AST::PatternElement *) { stop("PatternElement"); }
-
-bool AstDumper::visit(AST::PatternProperty *el) {
- start(QLatin1String("PatternProperty identifierToken=%1 bindingIdentifier=%2 type=%3 scope=%4 isForDeclaration=%5 colonToken=%6")
- .arg(loc(el->identifierToken), qs(el->bindingIdentifier), qs(QString::number(el->type, 16)),
- qs(QString::number(static_cast<int>(el->scope), 16)), boolStr(el->isForDeclaration), loc(el->colonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::PatternProperty *) { stop("PatternProperty"); }
-
-bool AstDumper::visit(AST::Elision *el) {
- start(QLatin1String("Elision commaToken=%1")
- .arg(loc(el->commaToken)));
- return true;
-}
-void AstDumper::endVisit(AST::Elision *el) {
- stop("Elision");
- Node::accept(el->next, this); // emit other elisions at the same level
-}
-
-bool AstDumper::visit(AST::NestedExpression *el) {
- start(QLatin1String("NestedExpression lparenToken=%1 rparenToken=%2")
- .arg(loc(el->lparenToken), loc(el->rparenToken)));
- return true;
-}
-void AstDumper::endVisit(AST::NestedExpression *) { stop("NestedExpression"); }
-
-bool AstDumper::visit(AST::IdentifierPropertyName *el) {
- start(QLatin1String("IdentifierPropertyName id=%1 propertyNameToken=%2")
- .arg(qs(el->id), loc(el->propertyNameToken)));
- return true;
-}
-void AstDumper::endVisit(AST::IdentifierPropertyName *) { stop("IdentifierPropertyName"); }
-
-bool AstDumper::visit(AST::StringLiteralPropertyName *el) {
- start(QLatin1String("StringLiteralPropertyName id=%1 propertyNameToken=%2")
- .arg(qs(el->id), loc(el->propertyNameToken)));
- return true;
-}
-void AstDumper::endVisit(AST::StringLiteralPropertyName *) { stop("StringLiteralPropertyName"); }
-
-bool AstDumper::visit(AST::NumericLiteralPropertyName *el) {
- start(QLatin1String("NumericLiteralPropertyName id=%1 propertyNameToken=%2")
- .arg(qs(QString::number(el->id)),loc(el->propertyNameToken)));
- return true;
-}
-void AstDumper::endVisit(AST::NumericLiteralPropertyName *) { stop("NumericLiteralPropertyName"); }
-
-bool AstDumper::visit(AST::ComputedPropertyName *) {
- start(QLatin1String("ComputedPropertyName"));
- return true;
-}
-void AstDumper::endVisit(AST::ComputedPropertyName *) { stop("ComputedPropertyName"); }
-
-bool AstDumper::visit(AST::ArrayMemberExpression *el) {
- start(QLatin1String("ArrayMemberExpression lbraketToken=%1 rbraketToken=%2")
- .arg(loc(el->lbracketToken), loc(el->rbracketToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ArrayMemberExpression *) { stop("ArrayMemberExpression"); }
-
-bool AstDumper::visit(AST::FieldMemberExpression *el) {
- start(QLatin1String("FieldMemberExpression name=%1 dotToken=%2 identifierToken=%3")
- .arg(qs(el->name), loc(el->dotToken), loc(el->identifierToken)));
- return true;
-}
-void AstDumper::endVisit(AST::FieldMemberExpression *) { stop("FieldMemberExpression"); }
-
-bool AstDumper::visit(AST::TaggedTemplate *) {
- start(QLatin1String("TaggedTemplate"));
- return true;
-}
-void AstDumper::endVisit(AST::TaggedTemplate *) { stop("TaggedTemplate"); }
-
-bool AstDumper::visit(AST::NewMemberExpression *el) {
- start(QLatin1String("NewMemberExpression newToken=%1 lparenToken=%2 rparenToken=%3")
- .arg(loc(el->newToken), loc(el->lparenToken), loc(el->rparenToken)));
- return true;
-}
-void AstDumper::endVisit(AST::NewMemberExpression *) { stop("NewMemberExpression"); }
-
-bool AstDumper::visit(AST::NewExpression *el) {
- start(QLatin1String("NewExpression newToken=%1")
- .arg(loc(el->newToken)));
- return true;
-}
-void AstDumper::endVisit(AST::NewExpression *) { stop("NewExpression"); }
-
-bool AstDumper::visit(AST::CallExpression *el) {
- start(QLatin1String("CallExpression lparenToken=%1 rparenToken=%2")
- .arg(loc(el->lparenToken), loc(el->rparenToken)));
- return true;
-}
-void AstDumper::endVisit(AST::CallExpression *) { stop("CallExpression"); }
-
-bool AstDumper::visit(AST::ArgumentList *el) {
- start(QLatin1String("ArgumentList commaToken=%1 isSpreadElement=%2")
- .arg(loc(el->commaToken), boolStr(el->isSpreadElement)));
- return true;
-}
-void AstDumper::endVisit(AST::ArgumentList *) { stop("ArgumentList"); }
-
-bool AstDumper::visit(AST::PostIncrementExpression *el) {
- start(QLatin1String("PostIncrementExpression incrementToken=%1")
- .arg(loc(el->incrementToken)));
- return true;
-}
-void AstDumper::endVisit(AST::PostIncrementExpression *) { stop("PostIncrementExpression"); }
-
-bool AstDumper::visit(AST::PostDecrementExpression *el) {
- start(QLatin1String("PostDecrementExpression decrementToken=%1")
- .arg(loc(el->decrementToken)));
- return true;
-}
-void AstDumper::endVisit(AST::PostDecrementExpression *) { stop("PostDecrementExpression"); }
-
-bool AstDumper::visit(AST::DeleteExpression *el) {
- start(QLatin1String("DeleteExpression deleteToken=%1")
- .arg(loc(el->deleteToken)));
- return true;
-}
-void AstDumper::endVisit(AST::DeleteExpression *) { stop("DeleteExpression"); }
-
-bool AstDumper::visit(AST::VoidExpression *el) {
- start(QLatin1String("VoidExpression voidToken=%1")
- .arg(loc(el->voidToken)));
- return true;
-}
-void AstDumper::endVisit(AST::VoidExpression *) { stop("VoidExpression"); }
-
-bool AstDumper::visit(AST::TypeOfExpression *el) {
- start(QLatin1String("TypeOfExpression typeofToken=%1")
- .arg(loc(el->typeofToken)));
- return true;
-}
-void AstDumper::endVisit(AST::TypeOfExpression *) { stop("TypeOfExpression"); }
-
-bool AstDumper::visit(AST::PreIncrementExpression *el) {
- start(QLatin1String("PreIncrementExpression incrementToken=%1")
- .arg(loc(el->incrementToken)));
- return true;
-}
-void AstDumper::endVisit(AST::PreIncrementExpression *) { stop("PreIncrementExpression"); }
-
-bool AstDumper::visit(AST::PreDecrementExpression *el) {
- start(QLatin1String("PreDecrementExpression decrementToken=%1")
- .arg(loc(el->decrementToken)));
- return true;
-}
-void AstDumper::endVisit(AST::PreDecrementExpression *) { stop("PreDecrementExpression"); }
-
-bool AstDumper::visit(AST::UnaryPlusExpression *el) {
- start(QLatin1String("UnaryPlusExpression plusToken=%1")
- .arg(loc(el->plusToken)));
- return true;
-}
-void AstDumper::endVisit(AST::UnaryPlusExpression *) { stop("UnaryPlusExpression"); }
-
-bool AstDumper::visit(AST::UnaryMinusExpression *el) {
- start(QLatin1String("UnaryMinusExpression minusToken=%1")
- .arg(loc(el->minusToken)));
- return true;
-}
-void AstDumper::endVisit(AST::UnaryMinusExpression *) { stop("UnaryMinusExpression"); }
-
-bool AstDumper::visit(AST::TildeExpression *el) {
- start(QLatin1String("TildeExpression tildeToken=%1")
- .arg(loc(el->tildeToken)));
- return true;
-}
-void AstDumper::endVisit(AST::TildeExpression *) { stop("TildeExpression"); }
-
-bool AstDumper::visit(AST::NotExpression *el) {
- start(QLatin1String("NotExpression notToken=%1")
- .arg(loc(el->notToken)));
- return true;
-}
-void AstDumper::endVisit(AST::NotExpression *) { stop("NotExpression"); }
-
-bool AstDumper::visit(AST::BinaryExpression *el) {
- start(QLatin1String("BinaryExpression op=%1 operatorToken=%2")
- .arg(qs(QString::number(el->op,16)), loc(el->operatorToken)));
- return true;
-}
-void AstDumper::endVisit(AST::BinaryExpression *) { stop("BinaryExpression"); }
-
-bool AstDumper::visit(AST::ConditionalExpression *el) {
- start(QLatin1String("ConditionalExpression questionToken=%1 colonToken=%2")
- .arg(loc(el->questionToken), loc(el->colonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ConditionalExpression *) { stop("ConditionalExpression"); }
-
-bool AstDumper::visit(AST::Expression *el) {
- start(QLatin1String("Expression commaToken=%1")
- .arg(loc(el->commaToken)));
- return true;
-}
-void AstDumper::endVisit(AST::Expression *) { stop("Expression"); }
-
-bool AstDumper::visit(AST::Block *el) {
- start(QLatin1String("Block lbraceToken=%1 rbraceToken=%2")
- .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
- return true;
-}
-void AstDumper::endVisit(AST::Block *) { stop("Block"); }
-
-bool AstDumper::visit(AST::StatementList *) {
- start(QLatin1String("StatementList"));
- return true;
-}
-void AstDumper::endVisit(AST::StatementList *) { stop("StatementList"); }
-
-bool AstDumper::visit(AST::VariableStatement *el) {
- start(QLatin1String("VariableStatement declarationKindToken=%1")
- .arg(loc(el->declarationKindToken)));
- return true;
-}
-void AstDumper::endVisit(AST::VariableStatement *) { stop("VariableStatement"); }
-
-bool AstDumper::visit(AST::VariableDeclarationList *el) {
- start(QLatin1String("VariableDeclarationList commaToken=%1")
- .arg(loc(el->commaToken)));
- return true;
-}
-void AstDumper::endVisit(AST::VariableDeclarationList *) { stop("VariableDeclarationList"); }
-
-bool AstDumper::visit(AST::EmptyStatement *el) {
- start(QLatin1String("EmptyStatement semicolonToken=%1")
- .arg(loc(el->semicolonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::EmptyStatement *) { stop("EmptyStatement"); }
-
-bool AstDumper::visit(AST::ExpressionStatement *el) {
- start(QLatin1String("ExpressionStatement semicolonToken=%1")
- .arg(loc(el->semicolonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ExpressionStatement *) { stop("ExpressionStatement"); }
-
-bool AstDumper::visit(AST::IfStatement *el) {
- start(QLatin1String("IfStatement ifToken=%1 lparenToken=%2 rparenToken=%3 elseToken=%4")
- .arg(loc(el->ifToken), loc(el->lparenToken), loc(el->rparenToken), loc(el->elseToken)));
- return true;
-}
-void AstDumper::endVisit(AST::IfStatement *) { stop("IfStatement"); }
-
-bool AstDumper::visit(AST::DoWhileStatement *el) {
- start(QLatin1String("DoWhileStatement doToken=%1 whileToken=%2 lparenToken=%3 rparenToken=%4 semicolonToken=%5")
- .arg(loc(el->doToken), loc(el->whileToken), loc(el->lparenToken), loc(el->rparenToken), loc(el->semicolonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::DoWhileStatement *) { stop("DoWhileStatement"); }
-
-bool AstDumper::visit(AST::WhileStatement *el) {
- start(QLatin1String("WhileStatement whileToken=%1 lparenToken=%2 rparenToken=%3")
- .arg(loc(el->whileToken), loc(el->lparenToken), loc(el->rparenToken)));
- return true;
-}
-void AstDumper::endVisit(AST::WhileStatement *) { stop("WhileStatement"); }
-
-bool AstDumper::visit(AST::ForStatement *el) {
- start(QLatin1String("ForStatement forToken=%1 lparenToken=%2 firstSemicolonToken=%3 secondSemicolonToken=%4 rparenToken=%5")
- .arg(loc(el->forToken), loc(el->lparenToken), loc(el->firstSemicolonToken), loc(el->secondSemicolonToken), loc(el->rparenToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ForStatement *) { stop("ForStatement"); }
-
-bool AstDumper::visit(AST::ForEachStatement *el) {
- start(QLatin1String("ForEachStatement forToken=%1 lparenToken=%2 inOfToken=%3 rparenToken=%4 type=%5")
- .arg(loc(el->forToken), loc(el->lparenToken), loc(el->inOfToken), loc(el->rparenToken), qs(QString::number(static_cast<int>(el->type), 16))));
- return true;
-}
-void AstDumper::endVisit(AST::ForEachStatement *) { stop("ForEachStatement"); }
-
-bool AstDumper::visit(AST::ContinueStatement *el) {
- start(QLatin1String("ContinueStatement label=%1 continueToken=%2 identifierToken=%3 semicolonToken=%4")
- .arg(qs(el->label), loc(el->continueToken), loc(el->identifierToken), loc(el->semicolonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ContinueStatement *) { stop("ContinueStatement"); }
-
-bool AstDumper::visit(AST::BreakStatement *el) {
- start(QLatin1String("BreakStatement label=%1 breakToken=%2 identifierToken=%3 semicolonToken=%4")
- .arg(qs(el->label), loc(el->breakToken), loc(el->identifierToken), loc(el->semicolonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::BreakStatement *) { stop("BreakStatement"); }
-
-bool AstDumper::visit(AST::ReturnStatement *el) {
- start(QLatin1String("ReturnStatement returnToken=%1 semicolonToken=%2")
- .arg(loc(el->returnToken), loc(el->semicolonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ReturnStatement *) { stop("ReturnStatement"); }
-
-bool AstDumper::visit(AST::YieldExpression *el) {
- start(QLatin1String("YieldExpression isYieldStar=%1 yieldToken=%2")
- .arg(boolStr(el->isYieldStar), loc(el->yieldToken)));
- return true;
-}
-void AstDumper::endVisit(AST::YieldExpression *) { stop("YieldExpression"); }
-
-bool AstDumper::visit(AST::WithStatement *el) {
- start(QLatin1String("WithStatement withToken=%1 lparenToken=%2 rparenToken=%3")
- .arg(loc(el->withToken), loc(el->lparenToken), loc(el->rparenToken)));
- return true;
-}
-void AstDumper::endVisit(AST::WithStatement *) { stop("WithStatement"); }
-
-bool AstDumper::visit(AST::SwitchStatement *el) {
- start(QLatin1String("SwitchStatement switchToken=%1 lparenToken=%2 rparenToken=%3")
- .arg(loc(el->switchToken), loc(el->lparenToken), loc(el->rparenToken)));
- return true;
-}
-void AstDumper::endVisit(AST::SwitchStatement *) { stop("SwitchStatement"); }
-
-bool AstDumper::visit(AST::CaseBlock *el) {
- start(QLatin1String("CaseBlock lbraceToken=%1 rbraceToken=%2")
- .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
- return true;
-}
-void AstDumper::endVisit(AST::CaseBlock *) { stop("CaseBlock"); }
-
-bool AstDumper::visit(AST::CaseClauses *) {
- start(QLatin1String("CaseClauses"));
- return true;
-}
-void AstDumper::endVisit(AST::CaseClauses *) { stop("CaseClauses"); }
-
-bool AstDumper::visit(AST::CaseClause *el) {
- start(QLatin1String("CaseClause caseToken=%1 colonToken=%2")
- .arg(loc(el->caseToken), loc(el->colonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::CaseClause *) { stop("CaseClause"); }
-
-bool AstDumper::visit(AST::DefaultClause *el) {
- start(QLatin1String("DefaultClause defaultToken=%1 colonToken=%2")
- .arg(loc(el->defaultToken), loc(el->colonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::DefaultClause *) { stop("DefaultClause"); }
-
-bool AstDumper::visit(AST::LabelledStatement *el) {
- start(QLatin1String("LabelledStatement label=%1 identifierToken=%2 colonToken=%3")
- .arg(qs(el->label), loc(el->identifierToken), loc(el->colonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::LabelledStatement *) { stop("LabelledStatement"); }
-
-bool AstDumper::visit(AST::ThrowStatement *el) {
- start(QLatin1String("ThrowStatement throwToken=%1 semicolonToken=%2")
- .arg(loc(el->throwToken), loc(el->semicolonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ThrowStatement *) { stop("ThrowStatement"); }
-
-bool AstDumper::visit(AST::TryStatement *el) {
- start(QLatin1String("TryStatement tryToken=%1")
- .arg(loc(el->tryToken)));
- return true;
-}
-void AstDumper::endVisit(AST::TryStatement *) { stop("TryStatement"); }
-
-bool AstDumper::visit(AST::Catch *el) {
- start(QLatin1String("Catch catchToken=%1 lparenToken=%2 identifierToken=%3 rparenToken=%4")
- .arg(loc(el->catchToken), loc(el->lparenToken), loc(el->identifierToken), loc(el->rparenToken)));
- return true;
-}
-void AstDumper::endVisit(AST::Catch *) { stop("Catch"); }
-
-bool AstDumper::visit(AST::Finally *el) {
- start(QLatin1String("Finally finallyToken=%1")
- .arg(loc(el->finallyToken)));
- return true;
-}
-void AstDumper::endVisit(AST::Finally *) { stop("Finally"); }
-
-bool AstDumper::visit(AST::FunctionDeclaration *el) {
- start(QLatin1String("FunctionDeclaration name=%1 isArrowFunction=%2 isGenerator=%3 functionToken=%4 "
- "identifierToken=%5 lparenToken=%6 rparenToken=%7 lbraceToken=%8 rbraceToken=%9")
- .arg(qs(el->name), boolStr(el->isArrowFunction), boolStr(el->isGenerator), loc(el->functionToken),
- loc(el->identifierToken), loc(el->lparenToken), loc(el->rparenToken), loc(el->lbraceToken),
- loc(el->rbraceToken)));
- return true;
-}
-void AstDumper::endVisit(AST::FunctionDeclaration *) { stop("FunctionDeclaration"); }
-
-bool AstDumper::visit(AST::FunctionExpression *el) {
- start(QLatin1String("FunctionExpression name=%1 isArrowFunction=%2 isGenerator=%3 functionToken=%4 "
- "identifierToken=%5 lparenToken=%6 rparenToken=%7 lbraceToken=%8 rbraceToken=%9")
- .arg(qs(el->name), boolStr(el->isArrowFunction), boolStr(el->isGenerator), loc(el->functionToken),
- loc(el->identifierToken), loc(el->lparenToken), loc(el->rparenToken), loc(el->lbraceToken),
- loc(el->rbraceToken)));
- return true;
-}
-void AstDumper::endVisit(AST::FunctionExpression *) { stop("FunctionExpression"); }
-
-bool AstDumper::visit(AST::FormalParameterList *) {
- start(QLatin1String("FormalParameterList"));
- return true;
-}
-void AstDumper::endVisit(AST::FormalParameterList *) { stop("FormalParameterList"); }
-
-bool AstDumper::visit(AST::ClassExpression *el) {
- start(QLatin1String("ClassExpression name=%1 classToken=%2 identifierToken=%3 lbraceToken=%4 rbraceToken=%5")
- .arg(qs(el->name), loc(el->classToken), loc(el->identifierToken), loc(el->lbraceToken), loc(el->rbraceToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ClassExpression *) { stop("ClassExpression"); }
-
-bool AstDumper::visit(AST::ClassDeclaration *el) {
- start(QLatin1String("ClassDeclaration name=%1 classToken=%2 identifierToken=%3 lbraceToken=%4 rbraceToken=%5")
- .arg(qs(el->name), loc(el->classToken), loc(el->identifierToken), loc(el->lbraceToken), loc(el->rbraceToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ClassDeclaration *) { stop("ClassDeclaration"); }
-
-bool AstDumper::visit(AST::ClassElementList *el) {
- start(QLatin1String("ClassElementList isStatic=%1")
- .arg(boolStr(el->isStatic)));
- return true;
-}
-void AstDumper::endVisit(AST::ClassElementList *) { stop("ClassElementList"); }
-
-bool AstDumper::visit(AST::Program *) {
- start(QLatin1String("Program"));
- return true;
-}
-void AstDumper::endVisit(AST::Program *) { stop("Program"); }
-
-bool AstDumper::visit(AST::NameSpaceImport *el) {
- start(QLatin1String("NameSpaceImport starToken=%1 importedBindingToken=%2 importedBinding=%3")
- .arg(loc(el->starToken), loc(el->importedBindingToken), qs(el->importedBinding)));
- return true;
-}
-void AstDumper::endVisit(AST::NameSpaceImport *) { stop("NameSpaceImport"); }
-
-bool AstDumper::visit(AST::ImportSpecifier *el) {
- start(QLatin1String("ImportSpecifier identifierToken=%1 importedBindingToken=%2 identifier=%3 importedBinding=%4")
- .arg(loc(el->identifierToken), loc(el->importedBindingToken), qs(el->identifier), qs(el->importedBinding)));
- return true;
-}
-void AstDumper::endVisit(AST::ImportSpecifier *) { stop("ImportSpecifier"); }
-
-bool AstDumper::visit(AST::ImportsList *el) {
- start(QLatin1String("ImportsList importSpecifierToken=%1")
- .arg(loc(el->importSpecifierToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ImportsList *) { stop("ImportsList"); }
-
-bool AstDumper::visit(AST::NamedImports *el) {
- start(QLatin1String("NamedImports leftBraceToken=%1 rightBraceToken=%2")
- .arg(loc(el->leftBraceToken), loc(el->rightBraceToken)));
- return true;
-}
-void AstDumper::endVisit(AST::NamedImports *) { stop("NamedImports"); }
-
-bool AstDumper::visit(AST::FromClause *el) {
- start(QLatin1String("FromClause fromToken=%1 moduleSpecifierToken=%2 moduleSpecifier=%3")
- .arg(loc(el->fromToken), loc(el->moduleSpecifierToken), qs(el->moduleSpecifier)));
- return true;
-}
-void AstDumper::endVisit(AST::FromClause *) { stop("FromClause"); }
-
-bool AstDumper::visit(AST::ImportClause *el) {
- start(QLatin1String("ImportClause importedDefaultBindingToken=%1 importedDefaultBinding=%2")
- .arg(loc(el->importedDefaultBindingToken), qs(el->importedDefaultBinding)));
- return true;
-}
-void AstDumper::endVisit(AST::ImportClause *) { stop("ImportClause"); }
-
-bool AstDumper::visit(AST::ImportDeclaration *el) {
- start(QLatin1String("ImportDeclaration importToken=%1 moduleSpecifierToken=%2 moduleSpecifier=%3")
- .arg(loc(el->importToken), loc(el->moduleSpecifierToken), qs(el->moduleSpecifier)));
- return true;
-}
-void AstDumper::endVisit(AST::ImportDeclaration *) { stop("ImportDeclaration"); }
-
-bool AstDumper::visit(AST::ExportSpecifier *el) {
- start(QLatin1String("ExportSpecifier identifierToken=%1 exportedIdentifierToken=%2 identifier=%3 exportedIdentifier=%4")
- .arg(loc(el->identifierToken), loc(el->exportedIdentifierToken), qs(el->identifier), qs(el->exportedIdentifier)));
- return true;
-}
-void AstDumper::endVisit(AST::ExportSpecifier *) { stop("ExportSpecifier"); }
-
-bool AstDumper::visit(AST::ExportsList *) {
- start(QLatin1String("ExportsList"));
- return true;
-}
-void AstDumper::endVisit(AST::ExportsList *) { stop("ExportsList"); }
-
-bool AstDumper::visit(AST::ExportClause *el) {
- start(QLatin1String("ExportClause leftBraceToken=%1 rightBraceToken=%2")
- .arg(loc(el->leftBraceToken), loc(el->rightBraceToken)));
- return true;
-}
-void AstDumper::endVisit(AST::ExportClause *) { stop("ExportClause"); }
-
-bool AstDumper::visit(AST::ExportDeclaration *el) {
- start(QLatin1String("ExportDeclaration exportToken=%1 exportAll=%2 exportDefault=%3")
- .arg(loc(el->exportToken), boolStr(el->exportsAll()), boolStr(el->exportDefault)));
- return true;
-}
-void AstDumper::endVisit(AST::ExportDeclaration *) { stop("ExportDeclaration"); }
-
-bool AstDumper::visit(AST::ESModule *) {
- start(QLatin1String("ESModule"));
- return true;
-}
-void AstDumper::endVisit(AST::ESModule *) { stop("ESModule"); }
-
-bool AstDumper::visit(AST::DebuggerStatement *el) {
- start(QLatin1String("DebuggerStatement debuggerToken=%1 semicolonToken=%2")
- .arg(loc(el->debuggerToken), loc(el->semicolonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::DebuggerStatement *) { stop("DebuggerStatement"); }
-
-bool AstDumper::visit(AST::Type *) {
- start(QLatin1String("Type"));
- return true;
-}
-void AstDumper::endVisit(AST::Type *) { stop("Type"); }
-
-bool AstDumper::visit(AST::TypeArgumentList *) {
- start(QLatin1String("TypeArgumentList"));
- return true;
-}
-void AstDumper::endVisit(AST::TypeArgumentList *) { stop("TypeArgumentList"); }
-
-bool AstDumper::visit(AST::TypeAnnotation *el) {
- start(QLatin1String("TypeAnnotation colonToken=%1")
- .arg(loc(el->colonToken)));
- return true;
-}
-void AstDumper::endVisit(AST::TypeAnnotation *) { stop("TypeAnnotation"); }
-
-void AstDumper::throwRecursionDepthError()
-{
- qDebug() << "Maximum statement or expression depth exceeded in AstDumper";
-}
-
-bool AstDumper::dumpNode() {
- return options & DumperOptions::DumpNode;
-}
-
-bool AstDumper::noLocations() {
- return options & DumperOptions::NoLocations;
-}
-
-bool AstDumper::noAnnotations() {
- return options & DumperOptions::NoAnnotations;
-}
-
-} // end namespace QQmlJS
-
-QT_END_NAMESPACE
diff --git a/tests/auto/shared/qqmljsastdumper.h b/tests/auto/shared/qqmljsastdumper.h
deleted file mode 100644
index 839dd99942..0000000000
--- a/tests/auto/shared/qqmljsastdumper.h
+++ /dev/null
@@ -1,449 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml 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$
-**/
-#ifndef ASTDUMPER_H
-#define ASTDUMPER_H
-
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <private/qqmljsglobal_p.h>
-#include <private/qqmljsastvisitor_p.h>
-#include <QtCore/QString>
-#include <functional>
-#include <ostream>
-
-QT_BEGIN_NAMESPACE
-class QDebug;
-
-namespace QQmlJS {
-
-enum class DumperOptions {
- None=0,
- NoLocations=0x1,
- NoAnnotations=0x2,
- DumpNode=0x4
-};
-bool operator & (DumperOptions lhs, DumperOptions rhs);
-DumperOptions operator | (DumperOptions lhs, DumperOptions rhs);
-
-// no export, currently just a supporting file...
-class AstDumper: public AST::BaseVisitor
-{
-public:
- static QString printNode2(AST::Node *);
-
- static QString diff(AST::Node *n1, AST::Node *n2, int nContext=3, DumperOptions opt=DumperOptions::None, int indent=0);
- static QString printNode(AST::Node *n, DumperOptions opt=DumperOptions::None, int indent=1, int baseIndent=0);
-
- AstDumper(const std::function <void (const QString &)> &dumper, DumperOptions options=DumperOptions::None,
- int indent=1, int baseIndent=0);
-
- void start(const QString &str);
- void start(const char *str);
- void stop(const QString &str);
- void stop(const char *str);
-
- QString qs(const QString &s);
- QString qs(const char *s);
- QString qs(QStringView s);
-
- QString loc(const SourceLocation &s);
-
- QString boolStr(bool v);
-
- bool preVisit(AST::Node *el) override;
- void postVisit(AST::Node *el) override;
-
- // Ui
- bool visit(AST::UiProgram *el) override;
- bool visit(AST::UiHeaderItemList *) override;
- bool visit(AST::UiPragma *el) override;
- bool visit(AST::UiImport *el) override;
- bool visit(AST::UiPublicMember *el) override;
- bool visit(AST::UiSourceElement *) override;
- bool visit(AST::UiObjectDefinition *) override;
- bool visit(AST::UiObjectInitializer *) override;
- bool visit(AST::UiObjectBinding *) override;
- bool visit(AST::UiScriptBinding *) override;
- bool visit(AST::UiArrayBinding *) override;
- bool visit(AST::UiParameterList *) override;
- bool visit(AST::UiObjectMemberList *) override;
- bool visit(AST::UiArrayMemberList *) override;
- bool visit(AST::UiQualifiedId *) override;
- bool visit(AST::UiEnumDeclaration *) override;
- bool visit(AST::UiEnumMemberList *) override;
- bool visit(AST::UiVersionSpecifier *) override;
- bool visit(AST::UiInlineComponent *) override;
- bool visit(AST::UiRequired *) override;
- bool visit(AST::UiAnnotation *) override;
- bool visit(AST::UiAnnotationList *) override;
-
- void endVisit(AST::UiProgram *) override;
- void endVisit(AST::UiImport *) override;
- void endVisit(AST::UiHeaderItemList *) override;
- void endVisit(AST::UiPragma *) override;
- void endVisit(AST::UiPublicMember *) override;
- void endVisit(AST::UiSourceElement *) override;
- void endVisit(AST::UiObjectDefinition *) override;
- void endVisit(AST::UiObjectInitializer *) override;
- void endVisit(AST::UiObjectBinding *) override;
- void endVisit(AST::UiScriptBinding *) override;
- void endVisit(AST::UiArrayBinding *) override;
- void endVisit(AST::UiParameterList *) override;
- void endVisit(AST::UiObjectMemberList *) override;
- void endVisit(AST::UiArrayMemberList *) override;
- void endVisit(AST::UiQualifiedId *) override;
- void endVisit(AST::UiEnumDeclaration *) override;
- void endVisit(AST::UiEnumMemberList *) override;
- void endVisit(AST::UiVersionSpecifier *) override;
- void endVisit(AST::UiInlineComponent *) override;
- void endVisit(AST::UiRequired *) override;
- void endVisit(AST::UiAnnotation *) override;
- void endVisit(AST::UiAnnotationList *) override;
-
- // QQmlJS
- bool visit(AST::TypeExpression *) override;
- void endVisit(AST::TypeExpression *) override;
-
- bool visit(AST::ThisExpression *) override;
- void endVisit(AST::ThisExpression *) override;
-
- bool visit(AST::IdentifierExpression *) override;
- void endVisit(AST::IdentifierExpression *) override;
-
- bool visit(AST::NullExpression *) override;
- void endVisit(AST::NullExpression *) override;
-
- bool visit(AST::TrueLiteral *) override;
- void endVisit(AST::TrueLiteral *) override;
-
- bool visit(AST::FalseLiteral *) override;
- void endVisit(AST::FalseLiteral *) override;
-
- bool visit(AST::SuperLiteral *) override;
- void endVisit(AST::SuperLiteral *) override;
-
- bool visit(AST::StringLiteral *) override;
- void endVisit(AST::StringLiteral *) override;
-
- bool visit(AST::TemplateLiteral *) override;
- void endVisit(AST::TemplateLiteral *) override;
-
- bool visit(AST::NumericLiteral *) override;
- void endVisit(AST::NumericLiteral *) override;
-
- bool visit(AST::RegExpLiteral *) override;
- void endVisit(AST::RegExpLiteral *) override;
-
- bool visit(AST::ArrayPattern *) override;
- void endVisit(AST::ArrayPattern *) override;
-
- bool visit(AST::ObjectPattern *) override;
- void endVisit(AST::ObjectPattern *) override;
-
- bool visit(AST::PatternElementList *) override;
- void endVisit(AST::PatternElementList *) override;
-
- bool visit(AST::PatternPropertyList *) override;
- void endVisit(AST::PatternPropertyList *) override;
-
- bool visit(AST::PatternElement *) override;
- void endVisit(AST::PatternElement *) override;
-
- bool visit(AST::PatternProperty *) override;
- void endVisit(AST::PatternProperty *) override;
-
- bool visit(AST::Elision *) override;
- void endVisit(AST::Elision *) override;
-
- bool visit(AST::NestedExpression *) override;
- void endVisit(AST::NestedExpression *) override;
-
- bool visit(AST::IdentifierPropertyName *) override;
- void endVisit(AST::IdentifierPropertyName *) override;
-
- bool visit(AST::StringLiteralPropertyName *) override;
- void endVisit(AST::StringLiteralPropertyName *) override;
-
- bool visit(AST::NumericLiteralPropertyName *) override;
- void endVisit(AST::NumericLiteralPropertyName *) override;
-
- bool visit(AST::ComputedPropertyName *) override;
- void endVisit(AST::ComputedPropertyName *) override;
-
- bool visit(AST::ArrayMemberExpression *) override;
- void endVisit(AST::ArrayMemberExpression *) override;
-
- bool visit(AST::FieldMemberExpression *) override;
- void endVisit(AST::FieldMemberExpression *) override;
-
- bool visit(AST::TaggedTemplate *) override;
- void endVisit(AST::TaggedTemplate *) override;
-
- bool visit(AST::NewMemberExpression *) override;
- void endVisit(AST::NewMemberExpression *) override;
-
- bool visit(AST::NewExpression *) override;
- void endVisit(AST::NewExpression *) override;
-
- bool visit(AST::CallExpression *) override;
- void endVisit(AST::CallExpression *) override;
-
- bool visit(AST::ArgumentList *) override;
- void endVisit(AST::ArgumentList *) override;
-
- bool visit(AST::PostIncrementExpression *) override;
- void endVisit(AST::PostIncrementExpression *) override;
-
- bool visit(AST::PostDecrementExpression *) override;
- void endVisit(AST::PostDecrementExpression *) override;
-
- bool visit(AST::DeleteExpression *) override;
- void endVisit(AST::DeleteExpression *) override;
-
- bool visit(AST::VoidExpression *) override;
- void endVisit(AST::VoidExpression *) override;
-
- bool visit(AST::TypeOfExpression *) override;
- void endVisit(AST::TypeOfExpression *) override;
-
- bool visit(AST::PreIncrementExpression *) override;
- void endVisit(AST::PreIncrementExpression *) override;
-
- bool visit(AST::PreDecrementExpression *) override;
- void endVisit(AST::PreDecrementExpression *) override;
-
- bool visit(AST::UnaryPlusExpression *) override;
- void endVisit(AST::UnaryPlusExpression *) override;
-
- bool visit(AST::UnaryMinusExpression *) override;
- void endVisit(AST::UnaryMinusExpression *) override;
-
- bool visit(AST::TildeExpression *) override;
- void endVisit(AST::TildeExpression *) override;
-
- bool visit(AST::NotExpression *) override;
- void endVisit(AST::NotExpression *) override;
-
- bool visit(AST::BinaryExpression *) override;
- void endVisit(AST::BinaryExpression *) override;
-
- bool visit(AST::ConditionalExpression *) override;
- void endVisit(AST::ConditionalExpression *) override;
-
- bool visit(AST::Expression *) override;
- void endVisit(AST::Expression *) override;
-
- bool visit(AST::Block *) override;
- void endVisit(AST::Block *) override;
-
- bool visit(AST::StatementList *) override;
- void endVisit(AST::StatementList *) override;
-
- bool visit(AST::VariableStatement *) override;
- void endVisit(AST::VariableStatement *) override;
-
- bool visit(AST::VariableDeclarationList *) override;
- void endVisit(AST::VariableDeclarationList *) override;
-
- bool visit(AST::EmptyStatement *) override;
- void endVisit(AST::EmptyStatement *) override;
-
- bool visit(AST::ExpressionStatement *) override;
- void endVisit(AST::ExpressionStatement *) override;
-
- bool visit(AST::IfStatement *) override;
- void endVisit(AST::IfStatement *) override;
-
- bool visit(AST::DoWhileStatement *) override;
- void endVisit(AST::DoWhileStatement *) override;
-
- bool visit(AST::WhileStatement *) override;
- void endVisit(AST::WhileStatement *) override;
-
- bool visit(AST::ForStatement *) override;
- void endVisit(AST::ForStatement *) override;
-
- bool visit(AST::ForEachStatement *) override;
- void endVisit(AST::ForEachStatement *) override;
-
- bool visit(AST::ContinueStatement *) override;
- void endVisit(AST::ContinueStatement *) override;
-
- bool visit(AST::BreakStatement *) override;
- void endVisit(AST::BreakStatement *) override;
-
- bool visit(AST::ReturnStatement *) override;
- void endVisit(AST::ReturnStatement *) override;
-
- bool visit(AST::YieldExpression *) override;
- void endVisit(AST::YieldExpression *) override;
-
- bool visit(AST::WithStatement *) override;
- void endVisit(AST::WithStatement *) override;
-
- bool visit(AST::SwitchStatement *) override;
- void endVisit(AST::SwitchStatement *) override;
-
- bool visit(AST::CaseBlock *) override;
- void endVisit(AST::CaseBlock *) override;
-
- bool visit(AST::CaseClauses *) override;
- void endVisit(AST::CaseClauses *) override;
-
- bool visit(AST::CaseClause *) override;
- void endVisit(AST::CaseClause *) override;
-
- bool visit(AST::DefaultClause *) override;
- void endVisit(AST::DefaultClause *) override;
-
- bool visit(AST::LabelledStatement *) override;
- void endVisit(AST::LabelledStatement *) override;
-
- bool visit(AST::ThrowStatement *) override;
- void endVisit(AST::ThrowStatement *) override;
-
- bool visit(AST::TryStatement *) override;
- void endVisit(AST::TryStatement *) override;
-
- bool visit(AST::Catch *) override;
- void endVisit(AST::Catch *) override;
-
- bool visit(AST::Finally *) override;
- void endVisit(AST::Finally *) override;
-
- bool visit(AST::FunctionDeclaration *) override;
- void endVisit(AST::FunctionDeclaration *) override;
-
- bool visit(AST::FunctionExpression *) override;
- void endVisit(AST::FunctionExpression *) override;
-
- bool visit(AST::FormalParameterList *) override;
- void endVisit(AST::FormalParameterList *) override;
-
- bool visit(AST::ClassExpression *) override;
- void endVisit(AST::ClassExpression *) override;
-
- bool visit(AST::ClassDeclaration *) override;
- void endVisit(AST::ClassDeclaration *) override;
-
- bool visit(AST::ClassElementList *) override;
- void endVisit(AST::ClassElementList *) override;
-
- bool visit(AST::Program *) override;
- void endVisit(AST::Program *) override;
-
- bool visit(AST::NameSpaceImport *) override;
- void endVisit(AST::NameSpaceImport *) override;
-
- bool visit(AST::ImportSpecifier *) override;
- void endVisit(AST::ImportSpecifier *) override;
-
- bool visit(AST::ImportsList *) override;
- void endVisit(AST::ImportsList *) override;
-
- bool visit(AST::NamedImports *) override;
- void endVisit(AST::NamedImports *) override;
-
- bool visit(AST::FromClause *) override;
- void endVisit(AST::FromClause *) override;
-
- bool visit(AST::ImportClause *) override;
- void endVisit(AST::ImportClause *) override;
-
- bool visit(AST::ImportDeclaration *) override;
- void endVisit(AST::ImportDeclaration *) override;
-
- bool visit(AST::ExportSpecifier *) override;
- void endVisit(AST::ExportSpecifier *) override;
-
- bool visit(AST::ExportsList *) override;
- void endVisit(AST::ExportsList *) override;
-
- bool visit(AST::ExportClause *) override;
- void endVisit(AST::ExportClause *) override;
-
- bool visit(AST::ExportDeclaration *) override;
- void endVisit(AST::ExportDeclaration *) override;
-
- bool visit(AST::ESModule *) override;
- void endVisit(AST::ESModule *) override;
-
- bool visit(AST::DebuggerStatement *) override;
- void endVisit(AST::DebuggerStatement *) override;
-
- bool visit(AST::Type *) override;
- void endVisit(AST::Type *) override;
-
- bool visit(AST::TypeArgumentList *) override;
- void endVisit(AST::TypeArgumentList *) override;
-
- bool visit(AST::TypeAnnotation *) override;
- void endVisit(AST::TypeAnnotation *) override;
-
- void throwRecursionDepthError() override;
-
-private:
- // attributes
- std::function <void (const QString &)> dumper;
- DumperOptions options = DumperOptions::None;
- int indent = 0;
- int baseIndent = 0;
- bool dumpNode();
- bool noLocations();
- bool noAnnotations();
-};
-
-QDebug operator<<(QDebug d, AST::Node *n);
-
-std::ostream &operator<<(std::ostream &stream, AST::Node *n);
-
-} // namespace AST
-
-QT_END_NAMESPACE
-
-#endif // ASTDUMPER_H
diff --git a/tests/auto/shared/testhttpserver.cpp b/tests/auto/shared/testhttpserver.cpp
deleted file mode 100644
index f4347f183f..0000000000
--- a/tests/auto/shared/testhttpserver.cpp
+++ /dev/null
@@ -1,451 +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 "testhttpserver.h"
-#include <QTcpSocket>
-#include <QDebug>
-#include <QFile>
-#include <QTimer>
-#include <QTest>
-#include <QQmlFile>
-
-/*!
-\internal
-\class TestHTTPServer
-\brief provides a very, very basic HTTP server for testing.
-
-Inside the test case, an instance of TestHTTPServer should be created, with the
-appropriate port to listen on. The server will listen on the localhost interface.
-
-Directories to serve can then be added to server, which will be added as "roots".
-Each root can be added as a Normal, Delay or Disconnect root. Requests for files
-within a Normal root are returned immediately. Request for files within a Delay
-root are delayed for 500ms, and then served. Requests for files within a Disconnect
-directory cause the server to disconnect immediately. A request for a file that isn't
-found in any root will return a 404 error.
-
-If you have the following directory structure:
-
-\code
-disconnect/disconnectTest.qml
-files/main.qml
-files/Button.qml
-files/content/WebView.qml
-slowFiles/slowMain.qml
-\endcode
-it can be added like this:
-\code
-TestHTTPServer server;
-QVERIFY2(server.listen(14445), qPrintable(server.errorString()));
-server.serveDirectory("disconnect", TestHTTPServer::Disconnect);
-server.serveDirectory("files");
-server.serveDirectory("slowFiles", TestHTTPServer::Delay);
-\endcode
-
-The following request urls will then result in the appropriate action:
-\table
-\header \li URL \li Action
-\row \li http://localhost:14445/disconnectTest.qml \li Disconnection
-\row \li http://localhost:14445/main.qml \li main.qml returned immediately
-\row \li http://localhost:14445/Button.qml \li Button.qml returned immediately
-\row \li http://localhost:14445/content/WebView.qml \li content/WebView.qml returned immediately
-\row \li http://localhost:14445/slowMain.qml \li slowMain.qml returned after 500ms
-\endtable
-*/
-
-static QUrl localHostUrl(quint16 port)
-{
- QUrl url;
- url.setScheme(QStringLiteral("http"));
- url.setHost(QStringLiteral("127.0.0.1"));
- url.setPort(port);
- return url;
-}
-
-TestHTTPServer::TestHTTPServer()
- : m_state(AwaitingHeader)
-{
- QObject::connect(&m_server, &QTcpServer::newConnection, this, &TestHTTPServer::newConnection);
-}
-
-bool TestHTTPServer::listen()
-{
- return m_server.listen(QHostAddress::LocalHost, 0);
-}
-
-QUrl TestHTTPServer::baseUrl() const
-{
- return localHostUrl(m_server.serverPort());
-}
-
-quint16 TestHTTPServer::port() const
-{
- return m_server.serverPort();
-}
-
-QUrl TestHTTPServer::url(const QString &documentPath) const
-{
- return baseUrl().resolved(documentPath);
-}
-
-QString TestHTTPServer::urlString(const QString &documentPath) const
-{
- return url(documentPath).toString();
-}
-
-QString TestHTTPServer::errorString() const
-{
- return m_server.errorString();
-}
-
-bool TestHTTPServer::serveDirectory(const QString &dir, Mode mode)
-{
- m_directories.append(qMakePair(dir, mode));
- return true;
-}
-
-/*
- Add an alias, so that if filename is requested and does not exist,
- alias may be returned.
-*/
-void TestHTTPServer::addAlias(const QString &filename, const QString &alias)
-{
- m_aliases.insert(filename, alias);
-}
-
-void TestHTTPServer::addRedirect(const QString &filename, const QString &redirectName)
-{
- m_redirects.insert(filename, redirectName);
-}
-
-void TestHTTPServer::registerFileNameForContentSubstitution(const QString &fileName)
-{
- m_contentSubstitutedFileNames.insert(fileName);
-}
-
-bool TestHTTPServer::wait(const QUrl &expect, const QUrl &reply, const QUrl &body)
-{
- m_state = AwaitingHeader;
- m_data.clear();
-
- QFile expectFile(QQmlFile::urlToLocalFileOrQrc(expect));
- if (!expectFile.open(QIODevice::ReadOnly))
- return false;
-
- QFile replyFile(QQmlFile::urlToLocalFileOrQrc(reply));
- if (!replyFile.open(QIODevice::ReadOnly))
- return false;
-
- m_bodyData = QByteArray();
- if (body.isValid()) {
- QFile bodyFile(QQmlFile::urlToLocalFileOrQrc(body));
- if (!bodyFile.open(QIODevice::ReadOnly))
- return false;
- m_bodyData = bodyFile.readAll();
- }
-
- const QByteArray serverHostUrl
- = QByteArrayLiteral("127.0.0.1:")+ QByteArray::number(m_server.serverPort());
-
- QByteArray line;
- bool headers_done = false;
- while (!(line = expectFile.readLine()).isEmpty()) {
- line.replace('\r', "");
- if (line.at(0) == '\n') {
- headers_done = true;
- continue;
- }
- if (headers_done) {
- m_waitData.body.append(line);
- } else if (line.endsWith("{{Ignore}}\n")) {
- m_waitData.headerPrefixes.append(line.left(line.length() - strlen("{{Ignore}}\n")));
- } else {
- line.replace("{{ServerHostUrl}}", serverHostUrl);
- m_waitData.headerExactMatches.append(line);
- }
- }
-
- m_replyData = replyFile.readAll();
-
- if (!m_replyData.endsWith('\n'))
- m_replyData.append('\n');
- m_replyData.append("Content-length: ");
- m_replyData.append(QByteArray::number(m_bodyData.length()));
- m_replyData.append("\n\n");
-
- for (int ii = 0; ii < m_replyData.count(); ++ii) {
- if (m_replyData.at(ii) == '\n' && (!ii || m_replyData.at(ii - 1) != '\r')) {
- m_replyData.insert(ii, '\r');
- ++ii;
- }
- }
- m_replyData.append(m_bodyData);
-
- return true;
-}
-
-bool TestHTTPServer::hasFailed() const
-{
- return m_state == Failed;
-}
-
-void TestHTTPServer::newConnection()
-{
- QTcpSocket *socket = m_server.nextPendingConnection();
- if (!socket)
- return;
-
- if (!m_directories.isEmpty())
- m_dataCache.insert(socket, QByteArray());
-
- QObject::connect(socket, &QAbstractSocket::disconnected, this, &TestHTTPServer::disconnected);
- QObject::connect(socket, &QIODevice::readyRead, this, &TestHTTPServer::readyRead);
-}
-
-void TestHTTPServer::disconnected()
-{
- QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
- if (!socket)
- return;
-
- m_dataCache.remove(socket);
- for (int ii = 0; ii < m_toSend.count(); ++ii) {
- if (m_toSend.at(ii).first == socket) {
- m_toSend.removeAt(ii);
- --ii;
- }
- }
- socket->disconnect();
- socket->deleteLater();
-}
-
-void TestHTTPServer::readyRead()
-{
- QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
- if (!socket || socket->state() == QTcpSocket::ClosingState)
- return;
-
- if (!m_directories.isEmpty()) {
- serveGET(socket, socket->readAll());
- return;
- }
-
- if (m_state == Failed || (m_waitData.body.isEmpty() && m_waitData.headerExactMatches.count() == 0)) {
- qWarning() << "TestHTTPServer: Unexpected data" << socket->readAll();
- return;
- }
-
- if (m_state == AwaitingHeader) {
- QByteArray line;
- while (!(line = socket->readLine()).isEmpty()) {
- line.replace('\r', "");
- if (line.at(0) == '\n') {
- m_state = AwaitingData;
- m_data += socket->readAll();
- break;
- } else {
- bool prefixFound = false;
- for (const QByteArray &prefix : m_waitData.headerPrefixes) {
- if (line.startsWith(prefix)) {
- prefixFound = true;
- break;
- }
- }
-
- if (!prefixFound && !m_waitData.headerExactMatches.contains(line)) {
- qWarning() << "TestHTTPServer: Unexpected header:" << line
- << "\nExpected exact headers: " << m_waitData.headerExactMatches
- << "\nExpected header prefixes: " << m_waitData.headerPrefixes;
- m_state = Failed;
- socket->disconnectFromHost();
- return;
- }
- }
- }
- } else {
- m_data += socket->readAll();
- }
-
- if (!m_data.isEmpty() || m_waitData.body.isEmpty()) {
- if (m_waitData.body != m_data) {
- qWarning() << "TestHTTPServer: Unexpected data" << m_data << "\nExpected: " << m_waitData.body;
- m_state = Failed;
- } else {
- socket->write(m_replyData);
- }
- socket->disconnectFromHost();
- }
-}
-
-bool TestHTTPServer::reply(QTcpSocket *socket, const QByteArray &fileNameIn)
-{
- const QString fileName = QLatin1String(fileNameIn);
- if (m_redirects.contains(fileName)) {
- const QByteArray response
- = "HTTP/1.1 302 Found\r\nContent-length: 0\r\nContent-type: text/html; charset=UTF-8\r\nLocation: "
- + m_redirects.value(fileName).toUtf8() + "\r\n\r\n";
- socket->write(response);
- return true;
- }
-
- for (int ii = 0; ii < m_directories.count(); ++ii) {
- const QString &dir = m_directories.at(ii).first;
- const Mode mode = m_directories.at(ii).second;
-
- QString dirFile = dir + QLatin1Char('/') + fileName;
-
- if (!QFile::exists(dirFile)) {
- const QHash<QString, QString>::const_iterator it = m_aliases.constFind(fileName);
- if (it != m_aliases.constEnd())
- dirFile = dir + QLatin1Char('/') + it.value();
- }
-
- QFile file(dirFile);
- if (file.open(QIODevice::ReadOnly)) {
-
- if (mode == Disconnect)
- return true;
-
- QByteArray data = file.readAll();
- if (m_contentSubstitutedFileNames.contains(QLatin1Char('/') + fileName))
- data.replace(QByteArrayLiteral("{{ServerBaseUrl}}"), baseUrl().toString().toUtf8());
-
- QByteArray response
- = "HTTP/1.0 200 OK\r\nContent-type: text/html; charset=UTF-8\r\nContent-length: ";
- response += QByteArray::number(data.count());
- response += "\r\n\r\n";
- response += data;
-
- if (mode == Delay) {
- m_toSend.append(qMakePair(socket, response));
- QTimer::singleShot(500, this, &TestHTTPServer::sendOne);
- return false;
- } else {
- socket->write(response);
- return true;
- }
- }
- }
-
- socket->write("HTTP/1.0 404 Not found\r\nContent-type: text/html; charset=UTF-8\r\n\r\n");
-
- return true;
-}
-
-void TestHTTPServer::sendDelayedItem()
-{
- sendOne();
-}
-
-void TestHTTPServer::sendOne()
-{
- if (!m_toSend.isEmpty()) {
- m_toSend.first().first->write(m_toSend.first().second);
- m_toSend.first().first->close();
- m_toSend.removeFirst();
- }
-}
-
-void TestHTTPServer::serveGET(QTcpSocket *socket, const QByteArray &data)
-{
- const QHash<QTcpSocket *, QByteArray>::iterator it = m_dataCache.find(socket);
- if (it == m_dataCache.end())
- return;
-
- QByteArray &total = it.value();
- total.append(data);
-
- if (total.contains("\n\r\n")) {
- bool close = true;
- if (total.startsWith("GET /")) {
- const int space = total.indexOf(' ', 4);
- if (space != -1)
- close = reply(socket, total.mid(5, space - 5));
- }
- m_dataCache.erase(it);
- if (close)
- socket->disconnectFromHost();
- }
-}
-
-ThreadedTestHTTPServer::ThreadedTestHTTPServer(const QString &dir, TestHTTPServer::Mode mode) :
- m_port(0)
-{
- m_dirs[dir] = mode;
- start();
-}
-
-ThreadedTestHTTPServer::ThreadedTestHTTPServer(const QHash<QString, TestHTTPServer::Mode> &dirs) :
- m_dirs(dirs), m_port(0)
-{
- start();
-}
-
-ThreadedTestHTTPServer::~ThreadedTestHTTPServer()
-{
- quit();
- wait();
-}
-
-QUrl ThreadedTestHTTPServer::baseUrl() const
-{
- return localHostUrl(m_port);
-}
-
-QUrl ThreadedTestHTTPServer::url(const QString &documentPath) const
-{
- return baseUrl().resolved(documentPath);
-}
-
-QString ThreadedTestHTTPServer::urlString(const QString &documentPath) const
-{
- return url(documentPath).toString();
-}
-
-void ThreadedTestHTTPServer::run()
-{
- TestHTTPServer server;
- {
- QMutexLocker locker(&m_mutex);
- QVERIFY2(server.listen(), qPrintable(server.errorString()));
- m_port = server.port();
- for (QHash<QString, TestHTTPServer::Mode>::ConstIterator i = m_dirs.constBegin();
- i != m_dirs.constEnd(); ++i) {
- server.serveDirectory(i.key(), i.value());
- }
- m_condition.wakeAll();
- }
- exec();
-}
-
-void ThreadedTestHTTPServer::start()
-{
- QMutexLocker locker(&m_mutex);
- QThread::start();
- m_condition.wait(&m_mutex);
-}
diff --git a/tests/auto/shared/testhttpserver.h b/tests/auto/shared/testhttpserver.h
deleted file mode 100644
index 42cc50e028..0000000000
--- a/tests/auto/shared/testhttpserver.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** 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 TESTHTTPSERVER_H
-#define TESTHTTPSERVER_H
-
-#include <QTcpServer>
-#include <QUrl>
-#include <QPair>
-#include <QThread>
-#include <QMutex>
-#include <QWaitCondition>
-
-class TestHTTPServer : public QObject
-{
- Q_OBJECT
-public:
- TestHTTPServer();
-
- bool listen();
- quint16 port() const;
- QUrl baseUrl() const;
- QUrl url(const QString &documentPath) const;
- QString urlString(const QString &documentPath) const;
- QString errorString() const;
-
- enum Mode { Normal, Delay, Disconnect };
- bool serveDirectory(const QString &, Mode = Normal);
-
- bool wait(const QUrl &expect, const QUrl &reply, const QUrl &body);
- bool hasFailed() const;
-
- void addAlias(const QString &filename, const QString &aliasName);
- void addRedirect(const QString &filename, const QString &redirectName);
-
- void registerFileNameForContentSubstitution(const QString &fileName);
-
- // In Delay mode, each item needs one call to this function to be sent
- void sendDelayedItem();
-
-private slots:
- void newConnection();
- void disconnected();
- void readyRead();
- void sendOne();
-
-private:
- enum State {
- AwaitingHeader,
- AwaitingData,
- Failed
- };
-
- void serveGET(QTcpSocket *, const QByteArray &);
- bool reply(QTcpSocket *, const QByteArray &);
-
- QList<QPair<QString, Mode> > m_directories;
- QHash<QTcpSocket *, QByteArray> m_dataCache;
- QList<QPair<QTcpSocket *, QByteArray> > m_toSend;
- QSet<QString> m_contentSubstitutedFileNames;
-
- struct WaitData {
- QList<QByteArray> headerExactMatches;
- QList<QByteArray> headerPrefixes;
- QByteArray body;
- } m_waitData;
- QByteArray m_replyData;
- QByteArray m_bodyData;
- QByteArray m_data;
- State m_state;
-
- QHash<QString, QString> m_aliases;
- QHash<QString, QString> m_redirects;
-
- QTcpServer m_server;
-};
-
-class ThreadedTestHTTPServer : public QThread
-{
- Q_OBJECT
-public:
- ThreadedTestHTTPServer(const QString &dir, TestHTTPServer::Mode mode = TestHTTPServer::Normal);
- ThreadedTestHTTPServer(const QHash<QString, TestHTTPServer::Mode> &dirs);
- ~ThreadedTestHTTPServer();
-
- QUrl baseUrl() const;
- QUrl url(const QString &documentPath) const;
- QString urlString(const QString &documentPath) const;
-
-protected:
- void run() override;
-
-private:
- void start();
-
- QHash<QString, TestHTTPServer::Mode> m_dirs;
- quint16 m_port;
- QMutex m_mutex;
- QWaitCondition m_condition;
-};
-
-#endif // TESTHTTPSERVER_H
-
diff --git a/tests/auto/shared/util.cpp b/tests/auto/shared/util.cpp
deleted file mode 100644
index 96876428f6..0000000000
--- a/tests/auto/shared/util.cpp
+++ /dev/null
@@ -1,103 +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 "util.h"
-
-#include <QtCore/QDebug>
-#include <QtCore/QMutexLocker>
-
-QQmlDataTest *QQmlDataTest::m_instance = 0;
-
-QQmlDataTest::QQmlDataTest() :
-#ifdef QT_TESTCASE_BUILDDIR
- m_dataDirectory(QTest::qFindTestData("data", QT_QMLTEST_DATADIR, 0, QT_TESTCASE_BUILDDIR)),
-#else
- m_dataDirectory(QTest::qFindTestData("data", QT_QMLTEST_DATADIR, 0)),
-#endif
-
- m_dataDirectoryUrl(m_dataDirectory.startsWith(QLatin1Char(':'))
- ? QUrl(QLatin1String("qrc") + m_dataDirectory)
- : QUrl::fromLocalFile(m_dataDirectory + QLatin1Char('/')))
-{
- m_instance = this;
-}
-
-QQmlDataTest::~QQmlDataTest()
-{
- m_instance = 0;
-}
-
-void QQmlDataTest::initTestCase()
-{
- QVERIFY2(!m_dataDirectory.isEmpty(), "'data' directory not found");
- m_directory = QFileInfo(m_dataDirectory).absolutePath();
- if (m_dataDirectoryUrl.scheme() != QLatin1String("qrc"))
- QVERIFY2(QDir::setCurrent(m_directory), qPrintable(QLatin1String("Could not chdir to ") + m_directory));
-}
-
-QString QQmlDataTest::testFile(const QString &fileName) const
-{
- if (m_directory.isEmpty())
- qFatal("QQmlDataTest::initTestCase() not called.");
- QString result = m_dataDirectory;
- result += QLatin1Char('/');
- result += fileName;
- return result;
-}
-
-Q_GLOBAL_STATIC(QMutex, qQmlTestMessageHandlerMutex)
-
-QQmlTestMessageHandler *QQmlTestMessageHandler::m_instance = 0;
-
-void QQmlTestMessageHandler::messageHandler(QtMsgType, const QMessageLogContext &context, const QString &message)
-{
- QMutexLocker locker(qQmlTestMessageHandlerMutex());
- if (QQmlTestMessageHandler::m_instance) {
- if (QQmlTestMessageHandler::m_instance->m_includeCategories)
- QQmlTestMessageHandler::m_instance->m_messages.push_back(QString("%1: %2").arg(context.category, message));
- else
- QQmlTestMessageHandler::m_instance->m_messages.push_back(message);
- }
-}
-
-QQmlTestMessageHandler::QQmlTestMessageHandler()
-{
- QMutexLocker locker(qQmlTestMessageHandlerMutex());
- Q_ASSERT(!QQmlTestMessageHandler::m_instance);
- QQmlTestMessageHandler::m_instance = this;
- m_oldHandler = qInstallMessageHandler(messageHandler);
- m_includeCategories = false;
-}
-
-QQmlTestMessageHandler::~QQmlTestMessageHandler()
-{
- QMutexLocker locker(qQmlTestMessageHandlerMutex());
- Q_ASSERT(QQmlTestMessageHandler::m_instance);
- qInstallMessageHandler(m_oldHandler);
- QQmlTestMessageHandler::m_instance = 0;
-}
diff --git a/tests/auto/shared/util.h b/tests/auto/shared/util.h
deleted file mode 100644
index 2088258378..0000000000
--- a/tests/auto/shared/util.h
+++ /dev/null
@@ -1,100 +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$
-**
-****************************************************************************/
-
-#ifndef QQMLTESTUTILS_H
-#define QQMLTESTUTILS_H
-
-#include <QtCore/QDir>
-#include <QtCore/QUrl>
-#include <QtCore/QCoreApplication>
-#include <QtCore/QStringList>
-#include <QtTest/QTest>
-
-/* Base class for tests with data that are located in a "data" subfolder. */
-
-class QQmlDataTest : public QObject
-{
- Q_OBJECT
-public:
- QQmlDataTest();
- virtual ~QQmlDataTest();
-
- QString testFile(const QString &fileName) const;
- inline QString testFile(const char *fileName) const
- { return testFile(QLatin1String(fileName)); }
- inline QUrl testFileUrl(const QString &fileName) const
- {
- const QString fn = testFile(fileName);
- return fn.startsWith(QLatin1Char(':'))
- ? QUrl(QLatin1String("qrc") + fn)
- : QUrl::fromLocalFile(fn);
- }
- inline QUrl testFileUrl(const char *fileName) const
- { return testFileUrl(QLatin1String(fileName)); }
-
- inline QString dataDirectory() const { return m_dataDirectory; }
- inline QUrl dataDirectoryUrl() const { return m_dataDirectoryUrl; }
- inline QString directory() const { return m_directory; }
-
- static inline QQmlDataTest *instance() { return m_instance; }
-
-public slots:
- virtual void initTestCase();
-
-private:
- static QQmlDataTest *m_instance;
-
- const QString m_dataDirectory;
- const QUrl m_dataDirectoryUrl;
- QString m_directory;
-};
-
-class QQmlTestMessageHandler
-{
- Q_DISABLE_COPY(QQmlTestMessageHandler)
-public:
- QQmlTestMessageHandler();
- ~QQmlTestMessageHandler();
-
- const QStringList &messages() const { return m_messages; }
- const QString messageString() const { return m_messages.join(QLatin1Char('\n')); }
-
- void clear() { m_messages.clear(); }
-
- void setIncludeCategoriesEnabled(bool enabled) { m_includeCategories = enabled; }
-
-private:
- static void messageHandler(QtMsgType, const QMessageLogContext &context, const QString &message);
-
- static QQmlTestMessageHandler *m_instance;
- QStringList m_messages;
- QtMessageHandler m_oldHandler;
- bool m_includeCategories;
-};
-
-#endif // QQMLTESTUTILS_H