Как убедиться, что Qt Widget.repaint завершил работу? - PullRequest
0 голосов
/ 04 ноября 2011

У меня сейчас проблема с каркасом графического представления 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() другой функцией и использовать сигнал и вызов слота, но он все еще не удался. Я хочу знать, есть ли способ приостановить программу, пока экран не будет обновлен.

1 Ответ

0 голосов
/ 04 ноября 2011

A QGraphicsView имеет немного больше, чем большинство QWidget подклассов, и я не достаточно знаком с ним, чтобы сказать, что происходит наверняка, но я могу рискнуть предположить, что ваша проблема связана с фактомчто сцена фактически отображается в виджете порта просмотра.Возможно, вызов viewport->repaint() даст вам результаты, которые вы ищете?

Кроме того, если вам действительно не нужно использовать веб-камеру в этом сценарии, вы можете позвонить ::render() на вашей сцене и передать ее QImage, который вы можете сохранить непосредственно в файл.

...