2012-07-25 47 views
1

我试图通过QTableView与QAbstractTableModel的子类来显示一个大表(带有标题,作曲者等的播放列表...所以我不能使用QListWidget)。你必须重写检索数据的调用看起来是这样的:通过HTML/Ajax为大数据集创建QAbstractTableModel子类?

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

这个函数被调用每一个细胞每次(由index.row()指定& index.colum())。将该1:1翻译成HTML/Ajax甚至会使本地网络性能下降。

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

任何想法? PS:为了半自己回答,看QT-Sources src/sql/models/qsqlquerymodel.cpp揭示了答案。这是可能的,但我想知道如果有人知道一个开箱即用的解决方案。

回答

1

总之是的,你会想通过查看QSqlQueryModel或某些派生的来源来利用你所学的概念。可以认为,在该示例中,d确实是包含数据的真实模型存储(在它们的情况下,它包含具有数据和索引的SQL查询以确定提取是否必须发生)并且QSqlQueryModel只是充当代理类,并与Qt的Model/View概念进行整合。

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

只要确保你收到或删除您正确beginInsertRows/endInsertRowsbeginRemoveRows/endRemoveRows之间操纵模型数据分别数据。

+0

感谢您指引我进入正确的方向。而对于奖金提示,但它是一个只读表。 – ewasser 2012-07-26 19:21:16