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 PROPERTIES
    MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
)

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

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

#if QT_CONFIG(permissions)
#include <QPermission>
#endif

QCameraPermission 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的操作。

相关推荐

  1. macOSQT打开麦克风摄像头权限问题

    2024-04-02 05:36:03       15 阅读
  2. ffmpeg 同时采集麦克风摄像头并录制文件

    2024-04-02 05:36:03       25 阅读
  3. webRtc麦克风摄像头检测

    2024-04-02 05:36:03       18 阅读
  4. ubuntu打开USB摄像头工具

    2024-04-02 05:36:03       34 阅读
  5. Qt-打开视频文件图片文件判断

    2024-04-02 05:36:03       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 05:36:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 05:36:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 05:36:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 05:36:03       20 阅读

热门阅读

  1. 第22章-路由协议概述

    2024-04-02 05:36:03       13 阅读
  2. 代码随想录算法训练营 Day41 动态规划3

    2024-04-02 05:36:03       13 阅读
  3. 【DevOps工具篇】LDAP GUI管理工具

    2024-04-02 05:36:03       11 阅读
  4. 工作常用Linux命令记录

    2024-04-02 05:36:03       16 阅读
  5. 数据挖掘比赛比较基础的baseline

    2024-04-02 05:36:03       10 阅读
  6. 为您的行业选择最合适的服务器

    2024-04-02 05:36:03       16 阅读