You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt 6.6.1 Android应用拍照功能实现及QML报错求助

Qt 6.6.1 Android相机功能实现方案

1. 解决QML报错与基础预览实现

Qt 6重构了多媒体模块,旧版直接通过source绑定Camera和VideoOutput的方式已失效,这是你报错的核心原因。需要通过MediaCaptureSession作为中间层关联相机与输出组件,修正后的代码如下:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtMultimedia 6.0

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Camera Demo")

    // 媒体捕获会话,负责连接相机、输出、捕获组件
    MediaCaptureSession {
        id: captureSession
        camera: camera
        videoOutput: videoOutput
    }

    Camera {
        id: camera
        // 指定使用系统默认相机,可切换为其他可用设备
        cameraDevice: CameraDevice.defaultCamera
    }

    VideoOutput {
        id: videoOutput
        anchors.fill: parent
    }

    Component.onCompleted: {
        camera.start()
    }
}

2. 配置Android相机权限

Android系统需明确权限才能访问相机,在项目的AndroidManifest.xml中添加以下内容:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

Qt Creator创建的项目可在「项目设置-AndroidManifest模板」中添加,或直接修改生成的AndroidManifest.xml文件。

3. 动态权限申请(Android 6+)

Android 6及以上版本需动态申请相机权限,可在C++代码中实现:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtAndroid>
#include <QList>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    // 申请相机权限
    QList<QString> permissions;
    permissions << "android.permission.CAMERA";
    QtAndroid::requestPermissions(permissions);

    QQmlApplicationEngine engine;
    const QUrl url(u"qrc:/main.qml"_qs);
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

4. 扩展拍照功能

在基础预览代码上添加ImageCapture组件即可实现拍照:

ImageCapture {
    id: imageCapture
    captureSession: captureSession

    // 拍照完成回调,可处理预览图或保存文件
    onImageCaptured: {
        console.log("照片已捕获,预览图地址:", previewImage)
    }
}

// 拍照按钮
Button {
    text: "拍照"
    anchors.bottom: parent.bottom
    anchors.horizontalCenter: parent.horizontalCenter
    onClicked: imageCapture.capture()
}

内容的提问来源于stack exchange,提问作者Bbird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:01:19