簡體   English   中英

啟用/禁用攝像頭(QML 攝像頭)

[英]Enable / disable camera (QML Camera)

我在camera.qml 中有qml 相機小部件。 qml 組件是從放置在后台堆棧小部件上的 Qt 小部件“WidgetCamera”加載的。 小部件在創建時就已啟動相機設備。

如何使相機僅在小部件顯示在前景中時啟動。 反之亦然,當小部件進入后台時如何釋放相機?

相機.qml

Item {
    width: 640
    height: 360

    Camera {
        id: camera
    }

    VideoOutput {
        source: camera
        anchors.fill: parent
    }
}

小工具相機.h

class WidgetCamera : public QWidget
{
    Q_OBJECT
    public:
    WidgetCamera() {
       QQuickWidget *qw= new QQuickWidget;
       qw->setSource(QUrl("qrc:///camera.qml"));
       // ...
    }
}

主窗口.h

class MainWindow : QMainWindow
{
    Q_OBJECT
    public:
    MainWindow() {
    QStackedWidget *sw = new QStackedWidget;
    sw->addWidget(new QWidget());
    sw->addWidget(new WidgetCamera());

    // ...

    }
}

QML 相機類型具有可直接在 QML 內部訪問的start()stop()方法。 但是為了能夠從 C++ 端隨意打開/關閉相機,您應該首先將其作為 MainWindow 類中的成員引入,例如像這樣:

#include "widgetCamera.h"

class MainWindow : QMainWindow
{
    Q_OBJECT
    private:
        WidgetCamera* _cameraWidget;

public:
    MainWindow() {
        QStackedWidget *sw = new QStackedWidget;
        sw->addWidget(new QWidget());
        _cameraWidget = new WidgetCamera();
        sw->addWidget(_cameraWidget);
        // PS: Make sure you free your instances correctly, too

        // ...

    }

}

現在,在您的 WidgetCamera 類中,您還應該引入一個成員變量來更快地訪問實際的 QML 小部件,類似於上述。 讓我們堅持你已經給它的“qw”。

然后,確保將 objectNames 提供給要訪問的所有 QML 子級(在本例中,我們需要相機),如下所示:

Item {
    width: 640
    height: 360

    Camera {
        id: camera
        objectName: "theCamera"
    }

    VideoOutput {
        source: camera
        anchors.fill: parent
    }
}

一旦你有了它,你需要一個功能來啟用/禁用相機的捕獲,這可以像這樣完成:

void WidgetCamera::disableCapture() {
    QObject* qmlCamera = qw->findChild<QObject*>("theCamera");
    QCamera* camera = qvariant_cast<QCamera*>(qmlCamera->property("mediaObject"));
    camera->stop();
}

現在,很明顯,其中很多都可以改進和優化(例如使實際的 c++ QCamera 成為 WidgetCamera 的成員等),但這應該可以幫助您入門。

至於何時要調用該函數來啟用/禁用相機,這完全取決於您。

暫無
暫無

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

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