Я пытаюсь визуализировать QJsonArray (среди многих других типов) и пытаюсь получить данные элемента, которые не являются простыми типами. Например, вложенные массивы.
класс qJsonArray_SyntheticProvider: def __init__(self, valobj, Internal_dict): self.valobj = валобж защита num_children(self): пытаться: s = self.valobj.EvaluateExpression("size()").GetValueAsUnsigned(0) вернуть с кроме: вернуть 0; защита get_child_index(сам,имя): пытаться: return int(name.lstrip('[').rstrip(']')) кроме: возврат Нет защита get_child_at_index(сам,индекс): если индекс < 0: возврат Нет если индекс >= self.num_children(): возврат Нет если не self.valobj.IsValid(): возврат Нет пытаться: element_type = self.valobj.EvaluateExpression("at(%d).type()" % index).GetValueAsUnsigned(0) если тип_элемента == 1: element = self.valobj.EvaluateExpression("at(%d).toBool(false)" % index) элиф element_type == 2: element = self.valobj.EvaluateExpression("at(%d).toDouble(0)" % index) элиф element_type == 3: element = self.valobj.EvaluateExpression("at(%d).toString()" % index) элиф element_type == 4: # не работает -> тип массива element = self.valobj.EvaluateExpression("at(%d).toArray()" % index) элиф element_type == 5: # не работает -> тип объекта element = self.valobj.EvaluateExpression("at(%d).toObject()" % index) еще: возврат Нет возврат (self.valobj .CreateValueFromData("[%d]" % индекс, element.GetData(), element.GetType())) кроме: возврат Нет пример кода на C++:
QJsonArray arr; arr.push_back(1); arr.push_back("тест"); QJsonArraynested_arr; вложенный_arr.push_back(3); arr.push_back(nested_arr); Есть ли более простой способ сделать это? Я не уверен, что EvaluateExpression — правильный переход, но я не знаю, как получить данные другим способом.
Результат (обратите внимание, что третий элемент отображается как пустой массив):

пс. это также происходит с пользовательскими типами (не Qt), у которых нет поля, а есть только свойство getSomething().
редактировать: это поставщик сводных данных:
def qjsonarray_summary(значение, не используется): num_elements = value.EvaluateExpression("size()").GetValueAsUnsigned(0) return "(%d elements)" % num_elements