Как стать автором
Обновить

Комментарии 6

Непереносимо (в смысле непортабельно). А если вам надо будет запустить это еще и, скажем, на iOS, что делать будете? На связке Widgets+QML это решается гораздо проще, примерно так:

camera.qml
import QtQuick 2.12
import QtMultimedia 5.12

VideoOutput {
    id:           videoOutput
    anchors.fill: parent
    fillMode:     VideoOutput.PreserveAspectCrop
    orientation:  270
    focus:        false

    source: Camera {
        id: camera

        imageCapture.onImageSaved: {
            videoOutput.imageCaptured(path);
        }
    }

    signal imageCaptured(string path)

    function capture() {
        camera.imageCapture.capture();
    }
}


mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    quickView = new QQuickView();
    quickView->setSource(QUrl("qrc:/camera.qml"));

    QObject::connect(quickView->rootObject(), SIGNAL(imageCaptured(const QString&)), this, SLOT(imageCaptured(const QString&)));

    ui->verticalLayout->insertWidget(0, QWidget::createWindowContainer(quickView, this));
}

[...]

void MainWindow::captureButtonClicked()
{
    QMetaObject::invokeMethod(quickView->rootObject(), "capture");
}

void MainWindow::imageCaptured(const QString& path)
{
    qDebug() << path;
}

Я тоже так сделал, тем более что qml можно взять из QtExamples. Вообще был первый опыт внедрения qml, но задача заняла что-то около часа. Так что я думаю применение qml все же удобнее и быстрее, чем JNI

define CAMSHOT_H

Что-то вспомнилось, были у меня фабрики, унаследованные от единой абстрактной фабрики. Материнской, так сказать.


#include "mother-factory.h"

А потом нечаянно выходит Qt версии 6.0 и вся имплементация с использованием AndroidExtras уходит «в топку» костра ненависти и отчаяния, так как andoroidaextras там не поддерживается и, будет ли поддерживаться, еще не известно :(
К моменту, когда появится Qt6.2 или Qt6.4 можно будет адаптировать, убрав AndroidExtras, т.к. самое важное будет перенесено в QtBase. Может ещё что-нибудь появится. Время покажет.
QtAndroidExtras in Qt 6 — QTBUG-84382

Qt 6 вообще ещё рано пользоваться в production, и будет рано как минимум до 6.2. Работу с JNI добавили в 6.1, только из имён классов убрали слово Android (например, вместо QAndroidJniObject теперь просто QJniObject):


https://wiki.qt.io/New_Features_in_Qt_6.1


Extras'ов больше не будет, соответствующий функционал включат в Core или другие "большие" модули.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории