往QStandarItemModel插入数据的正确姿势

我是需求

现实需求是,我在使用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,活该被踹出来;现在你是已经解开腰带才进去的,谁能动你。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值