【问题标题】:How to make sure Qt Widget.repaint has finished running?如何确保 Qt Widget.repaint 已完成运行?
【发布时间】:2011-11-03 22:28:27
【问题描述】:

我目前遇到了 Qt 图形视图框架的问题,即我想清除我的 QGraphicScene 背景颜色,然后运行一个函数来拍摄网络摄像头图片。到目前为止,当我使用 QWidget.repaint 时,屏幕仅在大约 1 秒后重新绘制,然后相机功能已被调用,并且捕获的图像始终处于关闭状态。这是我的代码目前的样子。

//Scene is a QGraphicScene
//View is a QGraphicView
//Camera is a camera object
Scene.setBackgroundBrush(Qt::Blue)
View.repaint()
Camera.Capture()

我尝试用另一个函数包装repaint() 调用并使用信号和槽调用,但它仍然失败。我想知道是否有办法暂停程序直到屏幕刷新。

【问题讨论】:

  • Camera.Capture() 是否真的会触发外部网络摄像头为您的屏幕拍照?
  • 是的。 Camera.Capture() 函数触发外部网络摄像头为我的屏幕拍照。但问题是我从网络摄像头捕获的内容与我期望屏幕显示的内容不同。

标签: c++ c qt graphics computer-vision


【解决方案1】:

QGraphicsView 比大多数 QWidget 子类要多一些,我对它还不够熟悉,无法确定发生了什么,但我可能会大胆猜测您的问题与以下事实有关场景实际上被渲染到视口小部件上。或许致电viewport->repaint() 会给您想要的结果?

此外,除非您确实需要在这种情况下使用网络摄像头,否则您可以在场景中调用 ::render() 并将其传递给您可以直接保存到文件中的 QImage

【讨论】:

  • 在这种情况下,我绝对需要使用网络摄像头。我正在制作的程序的重点是使用应用程序的虚拟场景来去除相机捕获的背景。我也尝试过 viewport->repaint() 但屏幕渲染仍然落后。
猜你喜欢
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
相关资源
最近更新 更多