diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index f1c432ce64a..95a1280c8e1 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -1997,7 +1997,49 @@ qdumpHelper_QVariants_F = [ def qdump__QVariant(d, value): - (data, typeStuff) = d.split('8sI', value) + if d.qtVersion() >= 0x060000: + qdumpHelper__QVariant6(d, value) + else: + qdumpHelper__QVariant45(d, value) + +def qdumpHelper__QVariant6(d, value): + data, typeStuff = d.split('24sp', value) + packedType = typeStuff >> 2 + metaTypeInterface = typeStuff - (typeStuff & 3) + + if metaTypeInterface == 0: + qdumpHelper_QVariant_0(d, value) + return + + revision, alignment, size, flags, variantType, metaObjectPtr, name = \ + d.split('HHIIIpp', metaTypeInterface) + + # Well-known simple type. + if variantType <= 6: + qdumpHelper_QVariants_A[variantType](d, value) + return None + + # Extended Core type (Qt 5+) + if variantType >= 31 and variantType <= 38: + qdumpHelper_QVariants_D[variantType - 31](d, value) + return None + + typeName = d.extractCString(name).decode('utf8') + isShared = bool(typeStuff & 0x1) + + if isShared: + # indirectly stored items (QRectF, ...) + ptr = d.extractPointer(value) + _, data = d.split('8s{%s}' % typeName, ptr) + d.putItem(data) + else: + d.putItem(d.createValue(data, typeName)) + + d.putBetterType('%sQVariant (%s)' % (d.qtNamespace(), typeName)) + + +def qdumpHelper__QVariant45(d, value): + data, typeStuff = d.split('8sI', value) variantType = typeStuff & 0x3fffffff isShared = bool(typeStuff & 0x40000000) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index e16cd7f1610..d0f76a352b5 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -4003,7 +4003,7 @@ void tst_Dumpers::dumper_data() //+ Check("this.@1.@1", "[@QObject]", "\"This is thread #3\"", "@QObject"); - QTest::newRow("QVariant") + QTest::newRow("QVariant1") << Data("#include \n" "#include \n" "#include \n" @@ -4017,9 +4017,7 @@ void tst_Dumpers::dumper_data() "QVariant v0;\n\n" - "QVariant::Type t1 = QVariant::String;\n" - "QVariant v1 = QVariant(t1, (void*)0);\n" - //"*(QString*)v1.data() = QString(\"Some string\");\n\n" + "QVariant v1 = QVariant(QString(\"A string\"));\n" "MyType my;\n" "my[1] = (QStringList() << \"Hello\");\n" @@ -4033,7 +4031,7 @@ void tst_Dumpers::dumper_data() "list << 1 << 2 << 3;\n" "QVariant v3 = QVariant::fromValue(list);", - "&my, &v0, &v1, &v2, &t, &s, &list, &v3, &t1") + "&my, &v0, &v1, &v2, &t, &s, &list, &v3") + CoreProfile()