门户
书籍
教程
论坛
问答
下载
签到
个人空间
帐号
自动登录
找回密码
密码
登录
立即注册
账号
自动登录
找回密码
密码
登录
立即注册
请绘制轨迹完成人机验证
由vaptcha提供技术支持
登录
注册
搜索
搜索
搜索
热搜
qml
quick
串口
输入中文
数据库
arm
百度地图
qt聊天
QT安装
安装
多窗口
中文乱码
聊天
局域网
鼠标
QT
图片
乱码
rs485通讯
多线程
android
多文档编辑器
本版
用户
本版
用户
【HUX】问题互助平台
博客
动态
好友
帖子
收藏
道具
勋章
任务
淘帖
动态
日志
相册
分享
记录
留言板
群组
门户
导读
排行榜
设置
我的收藏
退出
Qt开源社区
›
精华区(请在“有问必答”发帖)
›
有问必答
›
数据处理
›
QT多线程和UI界面交互问题
发布主题
返回列表
QT多线程和UI界面交互问题
3
回复
1248
查看
[复制链接]
qter999
当前离线
积分
8
qter999
累计签到:2 天
连续签到:1 天
来源:
2022-9-19 17:34:55
显示全部楼层
|
阅读模式
1
Qter豆
需求是这样的:
我有一批文本数据,一行一个,成千上万个,可以导入到程序里,需要用多线程循环处理直到处理完毕
我希望线程处理的时候,把状态变化和最终结果显示到程序界面上(期望是listview)
比如,状态有,第一步,第二步,...,最终结果有成功,失败,异常,...
可是qt不能在其他线程,修改UI界面,要怎么来弄这个通讯合理一点呢?
(是不是只有跨线程的信号和槽,这样会不会有效率问题?每次状态更新,都要反应到界面上)
之前用vc,一般做法是:
1,先导入文本到listview,状态置空
2,启动多个线程
3,多个线程,加锁,从listview读取状态为空的条目内容,同时把状态更改为非空
4,重复从listview读取,直到没有更多内容
这种方式,就是不单独存储数据,完全依赖listview的的数据。
QT想实现这个需求,最合理的办法是什么呢?
我来回答
回复
使用道具
举报
十里八乡俊后生
当前离线
积分
110
十里八乡俊后生
累计签到:93 天
连续签到:1 天
2022-9-20 11:33:44
显示全部楼层
只有看的没有回答得人,淦,我刚学2个月,这问题我真不会
回复
使用道具
举报
crazylq
当前离线
积分
1171
crazylq
累计签到:1024 天
连续签到:1 天
2022-9-22 22:30:27
显示全部楼层
线程中读取处理数据,每次处理完成发送信号到主线程,主线程绑定该信号到对应的槽函数,槽函数刷新 listView 界面即可.
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
立即注册
x
回复
使用道具
举报
cclon
当前离线
积分
11
cclon
累计签到:5 天
连续签到:2 天
2022-10-17 18:24:53
显示全部楼层
楼上说的对,为了避免界面卡死,你肯定是在工作线程里处理文件读取(文件可能很大),然后把处理的结果通过信号通知界面的槽函数。
这里应该自己实现一个model类。具体可以参考QSqlQueryModel。
另外,在读取文件时需要加速机制,如分页查询、文件映射,可以做到加快处理且使用较少的内存。
回复
使用道具
举报
返回列表
发表新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满)
我知道了