ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-11-06 14:02:34  阅读:385  来源: 互联网

标签:扫码 QR 示例 camreaDevices json camera qml id 摄像头


 前言:

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

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

一、Qt准备

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

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

二、新建qml工程

 

 

 

 

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

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

三、修改pro工程文件

QT += qml multimedia

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

四、新建Home页面

 

 

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

使用设计器修改界面如下

关键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下的运行结果

 

遇到的问题

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

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

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

 本次教程使用的源码

后记:

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

标签:扫码,QR,示例,camreaDevices,json,camera,qml,id,摄像头
来源: https://blog.csdn.net/aggs1990/article/details/121177730

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有