Qt - 需要递归重绘,如何?
Posted
技术标签:
【中文标题】Qt - 需要递归重绘,如何?【英文标题】:Qt - Recursive repaint needed, how? 【发布时间】:2012-07-21 21:25:43 【问题描述】:我有以下代码:
paintGL()
if(mouse_was_clicked)
... do the color picking with openGL to identify a clicked element
... !!! now I need to call again paintGL() to switch the selected element from the
old one to the new one but I can't create a recursive cycle!
else
... normal code to draw the scene and the selected element in red ...
正如线条所暗示的,我需要一种方法来再次调用绘制事件。有没有办法在不产生潜在活锁的情况下实现这一点?比如推迟一个新的绘画活动?
【问题讨论】:
没有深入了解你在做什么......你能不能设置一个标志,以便当它再次出现时你可以假标志并防止递归? 【参考方案1】:如果您的paintGL()
中的控制流程如此简单,只需确保在每种情况下都执行当前位于else
块中的内容:
void MyWidget::paintGL()
if(mouse_was_clicked)
... do the color picking with openGL to identify a clicked element
... normal code to draw the scene and the selected element in red ...
【讨论】:
【参考方案2】:很难说清楚你在这里做什么。
如果您在paintGL 检测到鼠标按钮被点击时尝试设置显示小部件(颜色选择器),则您混淆了您的事件。您应该为处理鼠标单击进行单独的操作,该操作设置标志/变量并触发重绘。 IE,将鼠标事件处理移出重绘回调。
我很容易在这里误解了您的问题,但是……如果是这样,我深表歉意。
不过,作为一般规则,如果您发现自己需要在 QT 中进行递归重绘,那么您可能是在与系统对抗,而不是与系统一起工作。
【讨论】:
不完全是我想要的(简单得多),但感谢您的帮助和 +1 的努力以上是关于Qt - 需要递归重绘,如何?的主要内容,如果未能解决你的问题,请参考以下文章