使用QThread中的QCamera / QCameraInfo

时间:2018-03-20 08:14:20

标签: c++ qt camera qthread qcamera

我有一个Camera类,目前只返回连接到计算机的可用摄像机数量。一个Camera对象是我的PhotoProcessor类(QWidget)创建的,然后移动到另一个线程,因为我在检查可用的摄像头时发现了一些轻微的悬挂:

in 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_H

camera.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()时,它表示连接的单个摄像机是正确的,但无论我做什么,线程相机对象都无法检测到摄像机,即摄像机的大小为零。

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

一年后,我决定再次审视此问题。

我认为在我的实际代码中我创建了一个QCamera对象,当删除线程时,我删除不正确,并且在线程完成后,我再也无法使用QCameraInfo :: availableCameras()找到任何摄像机。

设置新QCamera对象的父对象对我来说就是明确解决了此问题,即

QCamera *camera = new QCamera(QCameraInfo);
camera->setParent(this);