温馨提示:这篇文章已超过402天没有更新,请注意相关的内容是否还可用!
摘要:在macOS系统上,使用QT框架时可能会遇到打开麦克风和摄像头权限的问题。为了顺利访问这些设备,用户需要确保应用程序已获得相应的权限。这通常涉及到在QT应用程序中嵌入特定的代码来处理系统权限请求,并在用户同意后授予访问权限。解决这些问题通常涉及处理用户隐私和系统安全设置,以确保应用程序合规地使用麦克风和摄像头。
同样的代码在Windows上可以轻松操作麦克风和摄像头,特别是用QT这种跨平台的框架。但是对macOS这种权限要求完善的系统还需要进行一些配置,那就是增加Info.plist属性配置文件。如果是之前的早期5.x版本的QTCreator因为使用的是qmake构建系统,估计可以帮忙生成,但是从6.x以后QTCreator已经默认使用CMake了。问题是CMake不会帮忙做太多工作,如果需要用到一些平台上的权限,就需要手动创建Info.plist文件,这当然跟XCode的便利性没法比。

(图片来源网络,侵删)
比较方便的是这个属性文件大多数是固定配置,有一个模板就可以方便编辑了,最方便的就是Info.plist.in文件,这个文件中的很多部分都是占位符,cmake在编译的时候会帮忙做替换填充,生成最终的Info.plist文件,这真是太方便了:
CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleName ${MACOSX_BUNDLE_BUNDLE_NAME} CFBundleIdentifier ${MACOSX_BUNDLE_GUI_IDENTIFIER} CFBundleExecutable ${MACOSX_BUNDLE_EXECUTABLE_NAME} CFBundleVersion ${MACOSX_BUNDLE_BUNDLE_VERSION} CFBundleShortVersionString ${MACOSX_BUNDLE_SHORT_VERSION_STRING} CFBundleLongVersionString ${MACOSX_BUNDLE_LONG_VERSION_STRING} LSMinimumSystemVersion ${CMAKE_OSX_DEPLOYMENT_TARGET} CFBundleGetInfoString ${MACOSX_BUNDLE_INFO_STRING} NSHumanReadableCopyright ${MACOSX_BUNDLE_COPYRIGHT} CFBundleIconFile ${MACOSX_BUNDLE_ICON_FILE} CFBundleDevelopmentRegion English NSCameraUsageDescription 是否同意打开摄像头 NSMicrophoneUsageDescription 是否同意打开麦克风 NSSupportsAutomaticGraphicsSwitching
只需要简单的复制粘贴真是太方便了。

(图片来源网络,侵删)
另外最关键的还需要再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 #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的操作。
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...