首先谢谢您进来查看这个问题.
我用QtreeWidget 做了一个表格,显示接收的数据,行数在几千到一万行左右.每行约20列左右.另有一个线程,接收客户端传来的数据.并存在一个动态数组里面.每3秒我在主线程将这动态数组的数据更新到Qtreewidget这个表格上面.当数据稍多一点.每次更新很卡. 有什么办法解决吗?谢谢!
别用主线程啊,再开一个子线程更新数据到treeWidget里。还有,如果数据没有做更改操作,那么数据就不需要更新,只是更新哪些被修改的数据就可以了,加一个判定条件进行更新就不会那么卡了。
另外如果是表格的话,建议使用QTableView部件进行显示操作。
把数据刷新到界面上时通过函数QCoreApplication::processEvents()防止界面卡死(该方法不会造成界面卡死,但是数据刷到界面很慢。
如果不是实时显示,可以加载表格前先把TreeWidget通过hide函数隐藏起来,避免更新界面时候的显示消耗CPU资源,在子线程接收客户端传来的数据,就通过信号与槽(connect最后一个参数设置成Qt::BlockingQueuedConnection)通知主线程,让TreeWidget更新界面,更新完所有的数据后再把TreeWidget通过show函数显示出来。
当然,你也可以试试QTreeView,网上说QTreeView性能好些,Model/View显示速度比较快,我没试过
最后,你可以分页显示,将数据分成多页,在每页中添加固定行的数据,这相对来说添加和显示都很快了
这种数据量不大,实时性要求较高的,用view/model模块,model可以在子线程刷新数据,view在主界面显示,以你的数据量,不会卡。