我有一个Camera类,目前只是返回有多少个可用摄像头连接到计算机。在我的PhotoProcessor类(QWidget)中创建了一个Camera对象,然后将其移动到另一个线程,因为我注意到在检查可用的Camera时有一些轻微的挂起:
在photoprocessor.cpp中
void PhotoProcessor::GetAvailableCameras()
{
//Create new camera to go and fetch number of cameras.
Camera *camera_connection = new Camera;
//Create thread and send away.
QThread *thread = new QThread;
camera_connection->moveToThread(thread);
connect(camera_connection, SIGNAL(CameraCountSignal(int)), this, SLOT(CameraCountSlot(int)));
connect(thread, SIGNAL(started()), camera_connection, SLOT(GetAvailableCameras()));
connect(camera_connection, SIGNAL(CloseCameraThreadSignal()), thread, SLOT(quit()));
connect(camera_connection, SIGNAL(CloseCameraThreadSignal()), camera_connection, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
return;
}camera.h
#ifndef CAMERA_H
#define CAMERA_H
#include <QObject>
#include <QCamera>
#include <QCameraInfo>
class Camera : public QObject
{
Q_OBJECT
public:
Camera();
public slots:
void GetAvailableCameras();
signals:
void CameraCountSignal(int);
void CloseCameraThreadSignal();
};
#endif // CAMERA_Hcamera.cpp
#include "camera.h"
Camera::Camera()
{
}
void Camera::GetAvailableCameras()
{
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
emit CameraCountSignal(cameras.size());
emit CloseCameraThreadSignal();
return;
}当从photoprocessor.cpp运行QCameraInfo::availableCameras()时,它告诉我连接了一个摄像头,这是正确的,但是无论我做什么,线程摄像头对象都无法检测到摄像头,即摄像头的大小为零。
这是怎么回事?
发布于 2019-06-24 10:12:12
一年后,我决定再次讨论这个问题。
我想在我的实际代码中,我创建了一个QCamera对象,当线程被删除时,我错误地删除了,线程结束后,我再也找不到使用QCameraInfo::availableCameras()的相机了。
显式设置新QCamera对象的父级为我修复了此问题,即
QCamera *camera = new QCamera(QCameraInfo);
camera->setParent(this);https://stackoverflow.com/questions/49379214
复制相似问题