我正在将 Android Qt 5.7 应用程序移植到 Qt 6.8。 该应用程序使用 QML 相机模块来拍摄一些照片,并且还使用覆盖几乎所有视口的“隐形按钮”来强制相机重新对焦。
在 Qt 5.7 中实现此目的的相关代码是:
// Tap-Focus operation
CameraInvisibleButton {
id: focusTapArea
anchors.top: parent.top
anchors.left: parent.left
width: parent.width
height: parent.height - 2*captureButton.height
visible: camera.cameraStatus == Camera.ActiveStatus && camera.focus.isFocusModeSupported(Camera.FocusAuto)
opacity: 0
onClicked: {
console.info("focusTap clicked. Camera lockStatus:", camera.lockStatus)
if (camera.lockStatus == Camera.Searching)
return;
camera.unlock();
camera.searchAndLock();
}
}
上述代码片段的相关函数(camera.unlock() / lock() / searchAndLock())现已过时。 Qt-6 的文档提到:
在支持它的硬件上,QCamera 允许您调整焦点和变焦。这还包括?诸如用于特写工作的“宏”模式(例如读取条形码或识别字母)或“触摸聚焦”等功能 - 指示硬件尝试聚焦的图像中有趣的区域。 https://doc.qt.io/qt-6/qml-qtmultimedia-camera.html#focusPoint-prop
...但是没有例子说明如何实现“触摸对焦”操作。 你有什么想法吗?
PS:我对聚焦于特定的点击点不感兴趣,我只是想强制相机重新聚焦到其默认焦点。
通过反复试验,我们发现需要一个
toggleFocus()
函数。在某些平台上,unlock()
会触发重新聚焦;对其他人来说,searchAndLock()
确实如此。我们训练用户执行某个操作(例如点击并按住)来调用此函数,并在失败时重复。
function toggleFocus() {
if (camera.lockStatus !== Camera.Unlocked) {
camera.unlock();
else {
camera.searchAndLock();
}
}