小编Art*_*m E的帖子

QTableView +自定义TableModel +延迟加载

我需要将大量数据集加载到QTableView中.数据集在内存中不低于700Mb,我不想将其全部加载到内存中.

由于两个原因,QSqlQueryModel对我来说并不理想 - 它不可编辑,并且不是真正按需加载(因为将整个数据提取到内存中).

我想得到什么

  • 我想只将部分数据存储在内存中.仅用于显示和快速滚动的缓冲区.
  • 模型应该是可编辑的
  • 它应该是低内存消耗
  • 应该没有冻结

我是如何解决这个问题的(我的代码的简单模型)

  1. 自定义QTableView(tableView)
  2. 自定义TableModel(型号)
  3. 模型包装.(包装)

模型包装器从数据库中选择行数,并将此值设置为模型.现在模型可以回答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)

qt

6
推荐指数
1
解决办法
1652
查看次数

CSS:如何在内部圆角?

这里是border-radius属性圆盒子的角落.但是如何在块内圆角,比如减去圆圈?

像这里:http://malsup.com/jquery/corner/

卷曲设置

css css3

3
推荐指数
1
解决办法
9015
查看次数

虚拟树视图。如何修改子列的宽度?

我的朋友正在使用 VirtualTreeView 在 Delphi 中工作,并且有下一个问题:他有两列,第一列中的每一行都有数据和子项。是否可以不更改第一列宽度来设置最大子列宽度?

任务

传奇:

  • 圆圈是节点
  • 矩形是文本(根节点的黑色矩形是两列)

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

delphi virtualtreeview tvirtualstringtree

3
推荐指数
1
解决办法
1274
查看次数

标签 统计

css ×1

css3 ×1

delphi ×1

qt ×1

tvirtualstringtree ×1

virtualtreeview ×1