Я не знаком с QCamera
и родственными классами, но lambda
, к которому вы подключаете сигнал QCameraImageCapture::imageCaptured
, выглядит неправильно.Этот сигнал испускается, когда один кадр готов для предварительного просмотра.Однако в вашем lambda
есть ...
while(true){
QByteArray *buf = new QByteArray;
QBuffer *buffer=new QBuffer(buf);
buffer->open(QIODevice::WriteOnly);
img.save(buffer, "BMP");
QPixmap *pixmap = new QPixmap();
pixmap->loadFromData(buffer->buffer());
scene->addPixmap(*pixmap);
delete buf;
delete buffer;
delete pixmap;
QThread::sleep(0.0416);
cap->capture();
}
Этот цикл while
никогда не завершается и блокирует цикл обработки событий Qt
.Также обратите внимание, что фрагмент кода ...
QByteArray *buf = new QByteArray;
QBuffer *buffer=new QBuffer(buf);
buffer->open(QIODevice::WriteOnly);
img.save(buffer, "BMP");
QPixmap *pixmap = new QPixmap();
pixmap->loadFromData(buffer->buffer());
scene->addPixmap(*pixmap);
delete buf;
delete buffer;
delete pixmap;
является избыточным и (если я не ошибаюсь) в основном составляет ...
scene->addPixmap(QPixmap::fromImage(img));
Так что я думаю, что ваш lambda
должно быть больше похоже (не проверено) ...
[=](int id, QImage img)
{
scene->addPixmap(QPixmap::fromImage(img));
}