QTreeView не отображает данные

Я получил QAbstractItemModel для кодирования собственного дерева данных, но QTreeView не отображается.

Большинство ответов, которые я видел на подобные вопросы, были решены из-за неправильного времени жизни переменной, поэтому вот мой код для распределения модели:

ui.tvHierarchy->setModel(
    new MetaHierarchyModel(
        cutOffExtension(
            fileName.toStdString()
        )
    )
);

При построении модель заполняет свой корневой узел данными, а позже загружает больше данных по мере необходимости (через fetchMore).

Я начал выводить каждую вызываемую функцию. Это журнал последовательности вызовов:

columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  1 
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  1 
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  1 
hasChildren( QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  true 
hasChildren( QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  true 
canFetchMore( QModelIndex(-1,-1,0x0,QObject(0x0) ) )) 
    return  false 
rowCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  1 
index( 0 ,  0 ,  QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )  
hasChildren( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )  ) 
    return  true 
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  1 
parent( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )  ) 
    return  QModelIndex(-1,-1,0x0,QObject(0x0) ) 
index( 0 ,  0 ,  QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )  
data( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )  ,  13 ) 
    return  "Metaparticle 1" 
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  1 
parent( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )  ) 
    return  QModelIndex(-1,-1,0x0,QObject(0x0) ) 
index( 0 ,  0 ,  QModelIndex(-1,-1,0x0,QObject(0x0) ) ) 
    return  QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )  
data( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )  ,  13 ) 
    return  "Metaparticle 1" 

Выход roleNames():

QHash((0, "display")(1, "decoration")(2, "edit")(3, "toolTip")(4, "statusTip")(5, "whatsThis")) 

Затем последние четыре строки повторяются вечно (или, по крайней мере, до тех пор, пока я не потеряю терпение). Мне кажется, что корневые данные извлекаются, но они никогда не отображаются. Странно, что последний параметр data, то есть int role, имеет значение 13, которое не определено как какая-либо роль (все же я безоговорочно возвращаю допустимые строки).

Есть ли что-то, что я пропустил при реализации этого?


person Nobody moving away from SE    schedule 31.08.2012    source источник
comment
Как правило, вы хотите быть максимально скупыми при возврате значений из вашей data функции. Если вы посмотрите документацию, вы увидите, что роль 13 равна Qt::SizeHintRole - я полагаю, ваше представление довольно запуталось, когда оно возвращает строку!   -  person Xavier Holt    schedule 31.08.2012
comment
@XavierHolt Вы правы. Я изменил это после того, как это не сработало, когда я возвращался только к DisplayRole и QVariant() else. Предположительно, у меня была другая ошибка тогда, и теперь у меня была эта проблема полностью. Не могли бы вы опубликовать это как ответ, чтобы я мог отметить его правильно?   -  person Nobody moving away from SE    schedule 31.08.2012
comment
Здорово! Рад, что сработало - через минуту дам ответ.   -  person Xavier Holt    schedule 31.08.2012


Ответы (1)


Функция QAbstractItemModel::data должна быть максимально скупа на возвращаемые данные. Убедитесь, что вы возвращаете данные только в том случае, если у вас есть точное совпадение с экранной ролью. и номер столбца. Во всех остальных случаях просто верните недопустимый QVariant (просто вызовите конструктор по умолчанию), и ваше представление виджет заполнит эти недостающие значения разумными значениями по умолчанию.

person Xavier Holt    schedule 31.08.2012