我需要将大量数据集加载到QTableView中.数据集在内存中不低于700Mb,我不想将其全部加载到内存中.
由于两个原因,QSqlQueryModel对我来说并不理想 - 它不可编辑,并且不是真正按需加载(因为将整个数据提取到内存中).
我想得到什么
我是如何解决这个问题的(我的代码的简单模型)
模型包装器从数据库中选择行数,并将此值设置为模型.现在模型可以回答int rowCount().
为tableView.verticalScrollBar()设置了相同的值.
tableView.verticalScrollBar信号(valueChanged)连接到tableview槽(on_valueChanged)
一些代码
tableView::on_valueChanged(value)
{
wrapper.changeOffset(value);
}
wrapper::changeOffset(value)
{
if (_offset == value){
return;
}
_selectQuery->seek(value);
int endValue = qMin(value + _cacheSize, model->rowCount());
_list.clear();
for(int i = value; i < endValue-1; i++){
_list.append(_selectQuery->record());
}
model->setRecordList(_list);
_offset = value;
model->setOffset(_offset);
Run Code Online (Sandbox Code Playgroud)
}
包装器中的_selectQuery :: changeOffset是用于选择查询结果的PRSqlQuery游标.
我还在模型中实现了几种方法
QVariant SqlRecModel::data(const QModelIndex &index, int role) const
{
int row = index.row() - _offset;
if (row > m_recList.size() || row …Run Code Online (Sandbox Code Playgroud) 我的朋友正在使用 VirtualTreeView 在 Delphi 中工作,并且有下一个问题:他有两列,第一列中的每一行都有数据和子项。是否可以不更改第一列宽度来设置最大子列宽度?

传奇:
现在的样子 - 看看孩子的黑色反应角。它必须如何 - 看红色矩形。