簡體   English   中英

從QThread使用QCamera / QCameraInfo

[英]Using QCamera/QCameraInfo from a QThread

我有一個Camera類,此刻僅返回連接到計算機的可用攝像機數量。 在我的PhotoProcessor類(QWidget)中創建了一個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;
}

相機

#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()時,它說連接了一個正確的相機,但是無論我做什么,線程化的Camera對象都無法檢測到相機,即相機的大小為零。

這是怎么回事

一年后,我決定再次討論此問題。

我認為在我的實際代碼中,我創建了一個QCamera對象,當刪除線程時,我刪除不正確,並且在線程完成后,我再也無法使用QCameraInfo :: availableCameras()找到任何攝像機。

設置新QCamera對象的父對象為我明確解決了此問題,即

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM