QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 前言:

qt6出来已经有一段时间了,多媒体模块也发生了很多变化,笔者也是刚刚使用Qt6的摄像头模块。

本次教程,笔者分享下相关内容

一、Qt准备

请阅读的小伙伴自己安装Qt6.2.1,笔者使用的是QtCreator6.0.0

qml各版本间差异较大,通用性有点差。当确定使用指定Qt版本后,不要轻易更换版本

二、新建qml工程

QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 注:在windows下,Qt6.2.1目前不支持MinGW,只能选用VS的编译器

以上操作过程仅供小伙伴参考,请根据实际的QtCreator创建工程

三、修改pro工程文件

QT += qml multimedia

笔者开始编写时,并未添加多媒体模块,仍然可以正常编译并运行。笔者要提醒的是,需要加上这些模块,否则换个平台或编译器就无法正常编译或运行了

四、新建Home页面

QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 

 以上添加上步骤仅供小伙伴们参考

使用设计器修改界面如下

QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

关键UI代码


    //用于显示摄像头数据的取景器
    VideoOutput {
        id: videoOutput
        anchors.fill: parent
        source: camera
    }

 以下Home.qml的代码

HomeForm {
    id:page
    property var camreaDevices

    comboBox.model:ListModel {
        id: model
    }

    MediaDevices {
         id: mediaDevices
    }

    Camera {
        id: camera
    }

    CaptureSession {
        camera: camera
        videoOutput: page.videoOutput
    }

    Connections {
        target: comboBox
        function onCurrentIndexChanged(){//当前的值发生了变化

            camera.cameraDevice = page.camreaDevices[comboBox.currentIndex]
        }
    }

    Connections {
        target: button_start
        function onClicked() {//开启摄像头
            camera.start()
        }
    }

    Connections {
        target: button_stop
        function onClicked() {//关闭摄像头
            camera.stop()
        }
    }

    Component.onCompleted: {
        //初始化摄像头选择框
        camreaDevices = mediaDevices.videoInputs
        for(let i = 0; i < camreaDevices.length; i ++)
        {
            let json = {}
            json["text"] = camreaDevices[i].description
            json["value"] = camreaDevices[i].id
            model.append(json)
            console.debug("qqqqqqqqqqqqqq",JSON.stringify(json),camreaDevices[i])

            if(camreaDevices[i] === mediaDevices.defaultVideoInput)
            {
                comboBox.currentIndex = i
            }
        }

    }
}

 五、调用创建的页面

修改main.qml,关键代码如下

    StackView {
        id: stackView
        initialItem: component_home //初始页面修改为新增加的页面组件
        anchors.fill: parent
    }

//新增页面组件
    Component {
        id: component_home
        Home {
            width: stackView.width
            height: stackView.height
        }
    }

完成以上操作,就可以运行程序了,以下是笔者在win10下的运行结果

QR扫码综合示例教程(十一)Qt6.2.1(qml)摄像头显示

 

遇到的问题

1.cameraDevice的id只能打印看,无法当普通字符串使用

2.cameraDevice的bool isDefault()返回的永远都是false无法正常使用

以上问题应该是Qt6未解决的bug,我们静待官方修改

 本次教程使用的源码

后记:

因时间关系,笔者只在win10下使用VS2019(64位),android(arm8_64)测试,其他平台未测试,感兴趣的小伙伴可以测试下其他平台

上一篇:「JOISC 2021 Day1」饮食区


下一篇:QR扫码综合示例教程(十二)Qt5.15.2(qml)取出视频帧 原始帧