往QStandarItemModel插入数据的正确姿势
2017-01-06 00:32
579 查看
我是需求
现实需求是,我在使用QStandarItem来存储数据,model使用的是QStandarItemModel,但是因为数据量非常大,打开一个View的时候要加载上万个数据,所以,就使用线程往model里插入数据了,下面是插入的部分代码:m_model->appendRow(new QStandardItem()); QModelIndex index = m_model->index(m_model->rowCount() - 1, 0); m_model->setData(index, QVariant(getVariantList(info)), Qt::DisplayRole); m_model->setData(index, QVariant(iconSize()), Qt::SizeHintRole);
不要问我当初为何要这么逗逼,我自己都想不起来了,果然写了神奇代码要注释。。。
下面说问题。
我是问题
线程不断执行上述插入代码的时候,m_model->appendRow(new QStandardItem());实际只是插入一个空项,而View需要根据model的数据以确定在渲染的时候如何提供post、geometry,这样第一个线程插入空项的时候,view开始准备计算geometry巴拉巴拉的了,好了,这时候第二个线程就来插了一腿了,你懂的,没算完又开始下一个了,所以整个视图抖动的很鬼畜。画面太美,还是不上图了。当然出现这个问题,跟我自己的delegate处理有关(我设置了setUniformItemSizes,而且我的delegate会使用item中的size),不是每个人这样操作都有问题,这里要说的就是,在数据处理线程与UI线程交互中,应该要注意类似的问题。
解决办法很简单:
我是解决方案
QStandardItem *item = new QStandardItem; item->setData(QVariant(getVariantList(info)), Qt::DisplayRole); item->setData(QVariant(iconSize()), Qt::SizeHintRole); m_model->appendRow(item);
跟发生问题前的代码区别在哪?额,开始你是占着茅坑不XX,活该被踹出来;现在你是已经解开腰带才进去的,谁能动你。
相关文章推荐
- [导入]奇怪的数据插入异常:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。
- 正确设定mysql的字符集编码的探索---需要向数据库中插入中文数据
- QtQuick折腾结论之model delegate 的正确使用姿势
- SqlBulkCopy 排除错误的数据 插入正确的数据
- Android Model正确使用姿势——AutoValue
- 奇怪的数据插入异常:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。
- 大数据职业规划的N种正确姿势
- Android遍历Cursor所有数据的正确姿势
- 数据类型转换不当导致数据库不能正确插入数据问题
- perl DBI 插入 oracle utf8数据库正确姿势
- 正确利用php向MySQL datetime类型中插入数据
- Android数据库操作-正确的把数据插入到数据库中(2)
- Android数据库操作-正确的把数据插入到数据库中
- 自学成才的数据科学家告诉你5个学习大数据的正确姿势!
- 插入姿势总不正确?暴强“USB”来袭
- 正确利用php向MySQL datetime类型中插入数据
- django model 插入数据方法
- ibatis插入正确但查询不出数据的问题
- java代码显示正确执行,但为何数据未成功插入数据库?原因如下
- 记一次上万条数据的正确插入更新sql语句