我有一个父级窗口小部件P,它是一个图形场景的窗口小部件,正在绘制一些大尺寸的图片(QImage),因此其绘画功能调用起来很昂贵。

现在,我想添加一个小部件C,它以10Hz的频率进行更新,并且我希望将图形场景部件作为其父部件。

C确实按预期出现在P小部件的左上角。
但是我发现C的10Hz更新也触发了P的10Hz更新,并占用了大量CPU。

我该如何预防? C不需要任何方式都是透明的。

最佳答案

不幸的是,您不能阻止10Hz的子更新以10Hz的频率触发父更新。您可以做的就是使渲染尽可能高效。

因此,您必须使用像素图来绘制P。每次在paint事件中绘制QImage时,都会因使用QImage而受到惩罚。你的paintevent应该是

void QWidget::paintEvent(QPaintEvent * event)
{
  if(somethingHasChanged())
     updatePixmap();
  drawSavedPixmap();
}


即使您有保存的QImage,这仍然成立。

09-05 22:48