1

我正在尝试通过带有 QAbstractTableModel 子类的 QTableView 显示一个大表(带有标题、作曲家等的播放列表......所以我不能使用 QListWidget)。您必须覆盖检索数据的调用如下所示:

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;

每次对每个单元格调用此函数(由 index.row() 和 index.colum() 指定)。将 1:1 转换为 HTML/Ajax 甚至会降低本地网络的性能。

那么我在这里有什么选择呢?这一定是可能的,因为 QSqlQueryModel 存在并且它们必须有相同的问题。谷歌搜索 Ajax/QAbstractTableModel 的组合根本没有返回任何结果。

有任何想法吗?

PS:为了半回答自己,查看 QT-Sourcessrc/sql/models/qsqlquerymodel.cpp揭示了答案。这是可能的,但我想知道是否有人知道开箱即用的解决方案。

4

1 回答 1

1

简而言之,是的,您将希望通过查看源代码QSqlQueryModel或某些派生词来利用所学的概念。可以认为,在示例中,d它实际上是包含数据的真正模型存储(在他们的情况下,它包含带有数据和索引的 SQL 查询,用于确定是否必须进行提取),并且QSqlQueryModel它只是充当代理类在它之上与 Qt 的模型/视图概念集成。

我们在办公室也有类似的情况,逐个单元格地查询数据会导致效率低下。因此,我们创建了一个类,可以有效地处理网络上的所有请求并将其抽象出来。然后我们使用一个非常简单的QAbstractTableModel派生类与真正的模型类交互,以提供 Qt 需要的数据。它工作得很好。

只需确保当您接收或删除数据时,您分别在beginInsertRows/endInsertRowsbeginRemoveRows/之间正确操作模型数据endRemoveRows

于 2012-07-26T02:42:22.347 回答