找回密码
 立即注册
收起左侧

QT多线程和UI界面交互问题

3
回复
1740
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2022-9-19 17:34:55 显示全部楼层 |阅读模式
1Qter豆
需求是这样的:
我有一批文本数据,一行一个,成千上万个,可以导入到程序里,需要用多线程循环处理直到处理完毕
我希望线程处理的时候,把状态变化和最终结果显示到程序界面上(期望是listview)
比如,状态有,第一步,第二步,...,最终结果有成功,失败,异常,...

可是qt不能在其他线程,修改UI界面,要怎么来弄这个通讯合理一点呢?
(是不是只有跨线程的信号和槽,这样会不会有效率问题?每次状态更新,都要反应到界面上)

之前用vc,一般做法是:
1,先导入文本到listview,状态置空
2,启动多个线程
3,多个线程,加锁,从listview读取状态为空的条目内容,同时把状态更改为非空
4,重复从listview读取,直到没有更多内容

这种方式,就是不单独存储数据,完全依赖listview的的数据。

QT想实现这个需求,最合理的办法是什么呢?


回复

使用道具 举报

累计签到:93 天
连续签到:1 天
2022-9-20 11:33:44 显示全部楼层
只有看的没有回答得人,淦,我刚学2个月,这问题我真不会
回复

使用道具 举报

累计签到:1100 天
连续签到:1 天
2022-9-22 22:30:27 显示全部楼层
线程中读取处理数据,每次处理完成发送信号到主线程,主线程绑定该信号到对应的槽函数,槽函数刷新 listView 界面即可.


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:5 天
连续签到:2 天
2022-10-17 18:24:53 显示全部楼层
楼上说的对,为了避免界面卡死,你肯定是在工作线程里处理文件读取(文件可能很大),然后把处理的结果通过信号通知界面的槽函数。
这里应该自己实现一个model类。具体可以参考QSqlQueryModel。
另外,在读取文件时需要加速机制,如分页查询、文件映射,可以做到加快处理且使用较少的内存。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了