当前位置: 首页 > news >正文

macOS上QT打开麦克风和摄像头的权限问题

       同样的代码在Windows上可以轻松操作麦克风和摄像头,特别是用QT这种跨平台的框架。但是对macOS这种权限要求完善的系统还需要进行一些配置,那就是增加Info.plist属性配置文件。如果是之前的早期5.x版本的QTCreator因为使用的是qmake构建系统,估计可以帮忙生成,但是从6.x以后QTCreator已经默认使用CMake了。问题是CMake不会帮忙做太多工作,如果需要用到一些平台上的权限,就需要手动创建Info.plist文件,这当然跟XCode的便利性没法比。

       比较方便的是这个属性文件大多数是固定配置,有一个模板就可以方便编辑了,最方便的就是Info.plist.in文件,这个文件中的很多部分都是占位符,cmake在编译的时候会帮忙做替换填充,生成最终的Info.plist文件,这真是太方便了:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>CFBundleInfoDictionaryVersion</key><string>6.0</string><key>CFBundlePackageType</key><string>APPL</string><key>CFBundleName</key><string>${MACOSX_BUNDLE_BUNDLE_NAME}</string><key>CFBundleIdentifier</key><string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string><key>CFBundleExecutable</key><string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string><key>CFBundleVersion</key><string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string><key>CFBundleShortVersionString</key><string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string><key>CFBundleLongVersionString</key><string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string><key>LSMinimumSystemVersion</key><string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string><key>CFBundleGetInfoString</key><string>${MACOSX_BUNDLE_INFO_STRING}</string><key>NSHumanReadableCopyright</key><string>${MACOSX_BUNDLE_COPYRIGHT}</string><key>CFBundleIconFile</key><string>${MACOSX_BUNDLE_ICON_FILE}</string><key>CFBundleDevelopmentRegion</key><string>English</string><key>NSCameraUsageDescription</key><string>是否同意打开摄像头</string><key>NSMicrophoneUsageDescription</key><string>是否同意打开麦克风</string><key>NSSupportsAutomaticGraphicsSwitching</key><true/>
</dict>
</plist>

只需要简单的复制粘贴真是太方便了。

另外最关键的还需要再CMake中链接Info.plist.in文件:

set_target_properties(QTDemo PROPERTIESMACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
)

做好上面的操作,CMake就可以根据Info.plist.in中的配置生成对应的Info.plist文件,并且和应用打包起来。

在macOS上一般会在程序启动后进行权限判断:

#if QT_CONFIG(permissions)
#include <QPermission>
#endifQCameraPermission cameraPermission;
qApp->requestPermission(cameraPermission, [&show_mainwindow](const QPermission &permission) {// Show UI in any case. If there is no permission, the UI will just// be disabled.if (permission.status() != Qt::PermissionStatus::Granted)qWarning("Camera permission is not granted!");else{show_mainwindow();}});

show_mainwindow() 函数封装了显示主UI的操作。

http://www.lryc.cn/news/332435.html

相关文章:

  • 鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题
  • Spring源码解析上
  • 第九题:最大间隙
  • 【随笔】Git -- 高级命令(中篇)(七)
  • 可视化大屏 - 项目1
  • Collection与数据结构 链表与LinkedList(三):链表精选OJ例题(下)
  • 如何通过C++身份证实名认证接口实现实名认证功能
  • 用html写一个爱心
  • 如何看到 synchronized 背后的“monitor 锁”?
  • 如何建立一个网页模版
  • P8783 [蓝桥杯 2022 省 B] 统计子矩阵
  • 【C++】list介绍
  • 【SQL Server】2. 将数据导入导出到Excel表格当中
  • 基于JAVA+SSM+VUE的前后端分离的大学竞赛管理系统
  • 音频转换工具 Bigasoft FLAC Converter for Mac
  • 洛谷 P4554 小明的游戏
  • 序列化案例实操(统计每一个手机号耗费的总上行流量、总下行流量、总流量)
  • 使用 LLMLingua-2 压缩 GPT-4 和 Claude 提示
  • 编程大牛坚持了 10 年的 10 个编程好习惯
  • QEMU上PAC功能验证与异常解析
  • 简约轻量-失信录系统源码
  • 前端入门系列-HTML-HTML常见标签(注释,标题,段落,换行)
  • 【mysql 第3-10条记录怎么查】
  • 1.Git是用来干嘛的
  • Git安装教程(图文安装)
  • SpringData ElasticSearch - 简化开发,完美适配 Spring 生态
  • 突破!AI机器人拥有嗅觉!仿生嗅觉芯片研究登上Nature子刊
  • 前端接口防止重复请求实现方案
  • 【leetcode面试经典150题】13.除自身以外数组的乘积(C++)
  • 网络编程核心概念解析:IP地址、端口号与网络字节序深度探讨