C++ Qt:有效地在父窗口小部件上绘制窗口小部件的正确方法

C++ Qt:有效地在父窗口小部件上绘制窗口小部件的正确方法,c++,qt,widget,C++,Qt,Widget,我有一个父窗口小部件p,它是一个图形场景小部件,正在绘制一些大尺寸的图片,因此调用它的绘制功能非常昂贵 现在我想添加一个小部件C,它自己更新10Hz,我希望它有图形场景部件作为它的父部件 C确实如预期的那样出现在p小部件的左上角。 然而,我发现C的10Hz更新也会触发P的10Hz更新,并使用了大量CPU 我怎样才能防止这种情况?C不需要以任何方式透明。不幸的是,您无法阻止的子更新以10Hz的频率进行,以触发父更新以10Hz的频率进行。您可以做的是尽可能提高渲染效率 因此,您必须使用pixmaps

我有一个父窗口小部件p,它是一个图形场景小部件,正在绘制一些大尺寸的图片,因此调用它的绘制功能非常昂贵

现在我想添加一个小部件C,它自己更新10Hz,我希望它有图形场景部件作为它的父部件

C确实如预期的那样出现在p小部件的左上角。 然而,我发现C的10Hz更新也会触发P的10Hz更新,并使用了大量CPU


我怎样才能防止这种情况?C不需要以任何方式透明。

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

因此,您必须使用pixmaps绘制p。每次在绘制事件中绘制QImage时,您都会受到使用QImage的惩罚。你的绘画活动应该是

void QWidget::paintEvent(QPaintEvent * event)
{
  if(somethingHasChanged())
     updatePixmap();
  drawSavedPixmap();
}
即使你有一个保存的QImage,这仍然有效