最近项目上遇到一个需求要让大量点迹按时序显示在qt scene上面。通过for循环加到会出现所有点加完之后才显示,而且这期间scene上面移动鼠标显示光标位置和放大缩小图层都失效,感觉像是界面卡住了,网上找了很多资料解决强制刷新界面,如:
(209条消息) QT 界面刷新_漫步繁华街的博客-优快云博客_qt界面刷新
但放到我的项目里面都无效。后面发现这位答主的博客:
(209条消息) QT 界面图像循环更新陷入卡死状态解决方式_大黑山修道的博客-优快云博客
在循环体加点后加入语句 QCoreApplication::processEvents();(循环加点里面的代码简化后如下) 最终实现了动态显示点,而且scene界面上的其他功能也可以正常工作。感谢!!!
QGraphicsEllipseItem* ellItem = new QGraphicsEllipseItem;
dataItem.push_back(ellItem);//new 出来的对象传指针,最后可以显示
dataItem[i]->setRect(ll.Lon, ll.Lat, 0.002, 0.002);//点图元
dataItem[i]->setPen(pen);
dataItem[i]->setBrush(QBrush(QColor(0, 0, 0)));
this->scene->addItem((dataItem[i]));
QCoreApplication::processEvents();
i++;