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

update();不执行paintEvent();

4
回复
5890
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2020-3-10 19:58:23 显示全部楼层 |阅读模式
1Qter豆
请教qt问题: 在mainwidget里面我new两个A对象, B对象, A,B对象接受回调函数数据, 一个接视频, 一个接频谱, 两个对象都update(), 用paintEvent刷新界面…然后其中一个对象就update();失效了,再也不进去paintEvent().而这两个对象开始几分钟都可以正常运行渲染的,,但是过几分钟后,有一个对象update就失效,再也不进自己的paintEvent了。
这两个对象调用update速度很快,,基本是10ms~30ms就调用...

最佳答案

查看完整内容

跨线程刷新界面是不安全的。您可以试试我的方法,看是否有效。欢迎加群讨论。820981857。加群时,请说明,编程爱好者。
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2020-3-10 19:58:24 显示全部楼层
ollen 发表于 2020-3-11 10:22
背景:回调函数的启动线程在控件对象创建的, 不是在mainwidget创建的线程.
前提:我之前回调是能顺利的进 ...

跨线程刷新界面是不安全的。您可以试试我的方法,看是否有效。欢迎加群讨论。820981857。加群时,请说明,编程爱好者。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2020-3-10 20:01:22 显示全部楼层
我猜想update()会不会在同一个主线程存在竞争, 有一个对象高速的调用update()使得抵用速度调用慢的对象update进去paintEvent进入失败

点评

如果回调不在主线程中(估计不在主线程),可以试试在回调中使用QApplication::postEvent()发送消息给主窗口,主窗口收到消息后,调用update()。  详情 回复 发表于 2020-3-10 23:51
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2020-3-10 23:51:49 显示全部楼层
ollen 发表于 2020-3-10 20:01
我猜想update()会不会在同一个主线程存在竞争, 有一个对象高速的调用update()使得抵用速度调用慢的对象upda ...

如果回调不在主线程中(估计不在主线程),可以试试在回调中使用QApplication::postEvent()发送消息给主窗口,主窗口收到消息后,调用update()。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2020-3-11 10:22:05 显示全部楼层
baizy77 发表于 2020-3-10 23:51
如果回调不在主线程中(估计不在主线程),可以试试在回调中使用QApplication::postEvent()发送消息给主 ...

背景:回调函数的启动线程在控件对象创建的, 不是在mainwidget创建的线程.
前提:我之前回调是能顺利的进入painEvent, 时间一长, 就再也进不去painEvent, update呼叫无反应, 手动刷新界面, painEvent会被动刷
场景:回调数据我都能接到,, 但是接到数据后, 我想去update , update()不进入本类的paintEvent(). 每次update, paintEvnet不执行, 我知道update不是每次都能启动paintEvent, 但我这情况是,根本就不启动paintEvent了..

点评

跨线程刷新界面是不安全的。您可以试试我的方法,看是否有效。欢迎加群讨论。820981857。加群时,请说明,编程爱好者。  详情 回复 发表于 2020-3-11 11:54
回复

使用道具 举报

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

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