Debugger: Fix QObject property display with Qt 6

Task-number: QTCREATORBUG-24098
Change-Id: I6e1013fe39208ef6e9ba792e6b2fb745eb5e3108
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-12-03 16:33:02 +01:00
parent ca33079e91
commit eac85f8261
2 changed files with 33 additions and 17 deletions

View File

@@ -1743,13 +1743,6 @@ class DumperBase():
data = array + begin * stepSize
return data, size
def listChildrenGenerator(self, addr, innerType):
stepSize = self.ptrSize()
data, size = self.listData(addr)
for i in range(size):
yield self.createValue(data + i * stepSize, innerType)
#yield self.createValue(data + i * stepSize, 'void*')
def vectorChildrenGenerator(self, value, innerType):
data, size = self.vectorData(value)
for i in range(size):
@@ -2035,6 +2028,9 @@ class DumperBase():
with Children(self):
# Static properties.
for i in range(propertyCount):
if self.qtVersion() >= 0x60000:
t = self.split('IIIII', dataPtr + properties * 4 + 20 * i)
else:
t = self.split('III', dataPtr + properties * 4 + 12 * i)
name = self.metaString(metaObjectPtr, t[0], revision)
if qobject and self.qtPropertyFunc:
@@ -2064,19 +2060,38 @@ class DumperBase():
# Dynamic properties.
if extraData:
def list6Generator(addr, innerType):
data, size = self.listData(addr)
for i in range(size):
yield self.createValue(data + i * innerType.size(), innerType)
def list5Generator(addr, innerType):
data, size = self.listData(addr)
for i in range(size):
yield self.createValue(data + i * ptrSize, innerType)
def vectorGenerator(addr, innerType):
data, size = self.vectorData(addr)
for i in range(size):
yield self.createValue(data + i * innerType.size(), innerType)
byteArrayType = self.createType('@QByteArray')
variantType = self.createType('@QVariant')
if self.qtVersion() >= 0x50600:
values = self.vectorChildrenGenerator(
extraData + 2 * ptrSize, variantType)
if self.qtVersion() >= 0x60000:
values = vectorGenerator(extraData + 3 * ptrSize, variantType)
elif self.qtVersion() >= 0x50600:
values = vectorGenerator(extraData + 2 * ptrSize, variantType)
elif self.qtVersion() >= 0x50000:
values = self.listChildrenGenerator(
extraData + 2 * ptrSize, variantType)
values = list5Generator(extraData + 2 * ptrSize, variantType)
else:
values = self.listChildrenGenerator(
extraData + 2 * ptrSize, variantType.pointer())
names = self.listChildrenGenerator(
extraData + ptrSize, byteArrayType)
values = list5Generator(extraData + 2 * ptrSize,
variantType.pointer())
if self.qtVersion() >= 0x60000:
names = list6Generator(extraData, byteArrayType)
else:
names = list5Generator(extraData + ptrSize, byteArrayType)
for (k, v) in zip(names, values):
with SubItem(self, propertyCount + dynamicPropertyCount):
if not self.isCli:

View File

@@ -3101,6 +3101,7 @@ void tst_Dumpers::dumper_data()
+ Check5("mm", "destroyed", "@QMetaMethod")
+ Check4("mm", "destroyed(QObject*)", "@QMetaMethod")
+ Check("mm.handle", "14", TypeDef("unsigned int", "uint"))
% QtVersion(0, 0x5ffff) // Gone in Qt 6
+ Check("mp", "objectName", "@QMetaProperty");