Quais são as desvantagens de um QAbstractListModel contendo objetos na QML?
Qt oferece a possibilidade de combinar modelos C ++ com QMLe sugere três abordagens nos documentos:
QStringList
QObjectList
QAbstractItemModel
Os dois primeiros são extremamente simples de usar, p.QObjectList
:
// in C++
QList<QObject*> dataList;
dataList.append(new DataObject("Item 1", "red"));
// in QML
ListView {
model: dataList
delegate: Text { text: name }
}
mas ambos vêm com uma forte ressalva:
Nota: Não há como a exibição saber que o conteúdo de uma QList foi alterado. Se a QList mudar, é necessário redefinir o modelo [...]
QAbstractItemModel
é difícil de usar com objetos, porque as propriedades dos objetos não são diretamente expostas e, portanto, mantê-los sincronizados requer bastante esforço.
No entanto, é possível agrupar umQList
em umQAbstractItemModel
e obtenha um modelo super simples. Veja aqui:Implementação 1, Implementação 2
Existe uma razão pela qual o Qt não implementa isso nativamente? Atuação? Problemas de gerenciamento de memória? Parece uma ideia obviamente tão boa e comObjectModel
eles já implementam algo semelhante.