【发布时间】:2014-10-12 19:36:29
【问题描述】:
我有一些模型使用QAbstractItemModel 规则来检索和提供表的数据。
我的示例模型有多个列和行。不幸的是,QtQuick 小部件只能处理一列。其他“列”通过角色添加到 QtQuick 小部件中。因此视图中的多个列与模型中的同一列匹配。其他模型列被忽略,如this question and its answer
中所述我在想,为 QML 提供一个在 C++ 端使用的抽象(作为QAbstractProxyModel)应该不会太难,当询问第 N 行时,它会以源模型的列数为模并从生成的实际列中检索数据。这似乎适用于Grid,但不适用于TableView,因为它依赖于TableViewColumn 和角色名称,而不是仅使用连续的行索引。为此,代理模型需要通过角色来区分要从源模型的哪一列检索。
http://qt-project.org/forums/viewthread/41793 的答案中出现的 sn-p 这样做是为了采用 QSqlTableModel,但仍然错过了将许多信号转换为可用的。就像我想象的那样,如果 SQL 源模型会发出 columnsInserted,它应该转换为信号 dataChanged,并为该列选择新角色并更改可用角色名称。 QMLifyProxyModel 似乎更好,但似乎还没有准备好生产并且已经死了 4 年。
根据官方的建议,我们如何才能最好地解决这个问题,以便两个世界流畅地协同工作?为什么 QtQuick 视图不使用 QAbstractItemModel 和 QTableView 已经使用的(行、列)表示法?
【问题讨论】:
标签: c++ qt qml qtquick2 qabstractitemmodel