首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等到QWidget::repaint完成?

如何等到QWidget::repaint完成?
EN

Stack Overflow用户
提问于 2014-08-11 02:35:33
回答 1查看 1.7K关注 0票数 0

我有一个带有QWidget的gui (具体来说,是一个QwtPlot,但我不认为问题是Qwt-specific),我用计时器重新绘制它。也就是说,每100毫秒的QWidget::update就会通过QwtPlot::replot被呼叫。当计时器间隔太小或QwtCurve (QPolygonF)中的样本数太大时,程序会崩溃,通常带有如下错误消息:

QWidget::重新绘制:检测到递归重绘 QPainter::开始:一次只能由一个画家画一个油漆装置。 QPainter::翻译:画家不活跃 QPainter::开始:一次只能由一个画家画一个油漆装置。 QPainter::保存:画家不活动 QPainter::setClipRect:画家不活动 QPainter::保存:画家不活动 QPainter::setRenderHint:画家必须主动设置呈现提示 QPainter::setRenderHint:画家必须主动设置呈现提示 QPainter::还原:不平衡保存/恢复 QPainter::保存:画家不活动 QPainter::setRenderHint:画家必须主动设置呈现提示 QPainter::setRenderHint:画家必须主动设置呈现提示 QPainter::保存:画家不活动 QPainter::setPen:画家不活跃 画家::钢笔:画家不活跃 QPainter::还原:不平衡保存/恢复 QPainter::还原:不平衡保存/恢复 QPainter:拯救:画家不活跃.

“递归重绘”错误的标准原因是如果您在update中调用update或类似的东西,但是我没有对QWidget进行子类,所以在我的代码中从未发生过这种情况。Qwt已经存在了足够长的时间,所以我非常肯定,在代码中没有出现这样的基本错误。这让我想到,update是在上次抽签结束之前被调用的,这就引出了我的问题:是否有一种方法可以确定重绘是否完成,因此,如果最后一次重绘在计时器再次启动时尚未完成,那么跳过给定的重绘吗?

编辑:我使用计时器,因为生成要绘制的数据的计算是在工作线程中完成的。对于这个信号,我使用一个Qt::BlockingQueuedConnection,并保证只从主线程调用重绘的assert()。这就是为什么我不使用QwtPlot的自动重绘功能,如果我尝试,程序就会崩溃。

EN

回答 1

Stack Overflow用户

发布于 2014-08-11 05:30:54

正如Chris所说,update()调用不应导致任何问题。

通过应用程序中的qInstallMsgHandler()安装自定义消息处理程序可能会有所帮助。这样,您就可以在出现警告时获得一个断点,并检查这种情况发生的确切时间/原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25235170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档