前言:
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)测试,其他平台未测试,感兴趣的小伙伴可以测试下其他平台