首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从QThread使用QCamera/QCameraInfo

从QThread使用QCamera/QCameraInfo
EN

Stack Overflow用户
提问于 2018-03-20 16:14:20
回答 1查看 371关注 0票数 1

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

在photoprocessor.cpp中

代码语言:javascript
复制
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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#include "camera.h"

Camera::Camera()
{

}

void Camera::GetAvailableCameras()
{  
    QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
    emit CameraCountSignal(cameras.size());
    emit CloseCameraThreadSignal();
    return;
}

当从photoprocessor.cpp运行QCameraInfo::availableCameras()时,它告诉我连接了一个摄像头,这是正确的,但是无论我做什么,线程摄像头对象都无法检测到摄像头,即摄像头的大小为零。

这是怎么回事?

EN

回答 1

Stack Overflow用户

发布于 2019-06-24 10:12:12

一年后,我决定再次讨论这个问题。

我想在我的实际代码中,我创建了一个QCamera对象,当线程被删除时,我错误地删除了,线程结束后,我再也找不到使用QCameraInfo::availableCameras()的相机了。

显式设置新QCamera对象的父级为我修复了此问题,即

代码语言:javascript
复制
QCamera *camera = new QCamera(QCameraInfo);
camera->setParent(this);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49379214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档