阿里云虚拟主机网站,国内十大mcn公司,网站发布方式 提高,大连 手机网站案例同样的代码在Windows上可以轻松操作麦克风和摄像头#xff0c;特别是用QT这种跨平台的框架。但是对macOS这种权限要求完善的系统还需要进行一些配置#xff0c;那就是增加Info.plist属性配置文件。如果是之前的早期5.x版本的QTCreator因为使用的是qmake构建系统#xff0c;估… 同样的代码在Windows上可以轻松操作麦克风和摄像头特别是用QT这种跨平台的框架。但是对macOS这种权限要求完善的系统还需要进行一些配置那就是增加Info.plist属性配置文件。如果是之前的早期5.x版本的QTCreator因为使用的是qmake构建系统估计可以帮忙生成但是从6.x以后QTCreator已经默认使用CMake了。问题是CMake不会帮忙做太多工作如果需要用到一些平台上的权限就需要手动创建Info.plist文件这当然跟XCode的便利性没法比。 比较方便的是这个属性文件大多数是固定配置有一个模板就可以方便编辑了最方便的就是Info.plist.in文件这个文件中的很多部分都是占位符cmake在编译的时候会帮忙做替换填充生成最终的Info.plist文件这真是太方便了:
?xml version1.0 encodingUTF-8?
!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd
plist version1.0
dictkeyCFBundleInfoDictionaryVersion/keystring6.0/stringkeyCFBundlePackageType/keystringAPPL/stringkeyCFBundleName/keystring${MACOSX_BUNDLE_BUNDLE_NAME}/stringkeyCFBundleIdentifier/keystring${MACOSX_BUNDLE_GUI_IDENTIFIER}/stringkeyCFBundleExecutable/keystring${MACOSX_BUNDLE_EXECUTABLE_NAME}/stringkeyCFBundleVersion/keystring${MACOSX_BUNDLE_BUNDLE_VERSION}/stringkeyCFBundleShortVersionString/keystring${MACOSX_BUNDLE_SHORT_VERSION_STRING}/stringkeyCFBundleLongVersionString/keystring${MACOSX_BUNDLE_LONG_VERSION_STRING}/stringkeyLSMinimumSystemVersion/keystring${CMAKE_OSX_DEPLOYMENT_TARGET}/stringkeyCFBundleGetInfoString/keystring${MACOSX_BUNDLE_INFO_STRING}/stringkeyNSHumanReadableCopyright/keystring${MACOSX_BUNDLE_COPYRIGHT}/stringkeyCFBundleIconFile/keystring${MACOSX_BUNDLE_ICON_FILE}/stringkeyCFBundleDevelopmentRegion/keystringEnglish/stringkeyNSCameraUsageDescription/keystring是否同意打开摄像头/stringkeyNSMicrophoneUsageDescription/keystring是否同意打开麦克风/stringkeyNSSupportsAutomaticGraphicsSwitching/keytrue/
/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的操作。