Qt for winrt结合Winrt API开发

Qt  for  winrt开发的程序即是windows应用商店程序,可以转换成vs2013能加载的项目,随即可以调用winrt api控制系统设备、资源。

Vs2013加载了Qt项目后,还需配置项目属性使用windows运行时库扩展,随后才能调用winrt  api。

一、调用摄像头

要调用摄像头可用到Windows::Media::Capture::CameraCaptureUI类,该类会显示出系统自带的摄像头界面,既可以拍照也可以录像。注意它有很多命名空间,想直接用该类要引用它的命名空间。如:

using namespace Windows::UI::Xaml;

using namespace Windows::UI::Xaml::Controls;

using namespace Windows::UI::Xaml::Navigation;

using namespace Windows::UI::Xaml::Media::Imaging;

using namespace Windows::Media::Capture;

using namespace Windows::Storage;

或者转到它的定义,会看到对象浏览器,可找到各种各样的类以及它的成员和功能描述。

1. 拍照

try

{

CameraCaptureUI^ dialog = ref new CameraCaptureUI();

dialog->PhotoSettings->CroppedAspectRatio = Size(16, 9);

concurrency::task<StorageFile^> (dialog->CaptureFileAsync(CameraCaptureUIMode::Photo)).then([this] (StorageFile^ file)

{

if (nullptr != file)

{

concurrency::task<Streams::IRandomAccessStream^> (file->OpenAsync(FileAccessMode::Read)).then([this] (Streams::IRandomAccessStream^ stream)

{

BitmapImage^ bitmapImage = ref new BitmapImage();

bitmapImage->SetSource(stream);

this->CapturedPhoto->Source = bitmapImage;

ResetButton->Visibility = Windows::UI::Xaml::Visibility::Visible;

rootPage->NotifyUser("", NotifyType::StatusMessage);

});

// Store the path in Application Data

appSettings->Insert("capturedPhoto", PropertyValue::CreateString(file->Path));

}

else

{

rootPage->NotifyUser("No photo captured", NotifyType::ErrorMessage);

}

});

}

catch (Platform::Exception^ ex)

{

rootPage->NotifyUser(ex->Message, NotifyType::ErrorMessage);

}

其中StorageFile类表示捕获的对象,它的Path成员变量表示其绝对存储路径,但Path的类型是Platform::String,要转化成QString可进行如下操作。

QString strPath = QString::fromWCharArray(file->Path->Data());

各字符类型转换可看下图:

2、录像

try

{

CameraCaptureUI^ dialog = ref new CameraCaptureUI();

dialog->VideoSettings->Format = CameraCaptureUIVideoFormat::Mp4;

concurrency::task<StorageFile^>(dialog->CaptureFileAsync(CameraCaptureUIMode::Video)).then([this] (StorageFile^ file)

{

if (file != nullptr)

{

concurrency::task<Streams::IRandomAccessStream^> (file->OpenAsync(FileAccessMode::Read)).then([this] (Streams::IRandomAccessStream^ stream)

{

CapturedVideo->SetSource(stream, "video/mp4");

ResetButton->Visibility = Windows::UI::Xaml::Visibility::Visible;

rootPage->NotifyUser("", NotifyType::StatusMessage);

});

// Store the path in Application Data

appSettings->Insert("capturedVideo", PropertyValue::CreateString(file->Path));

}

else

{

rootPage->NotifyUser("No video captured", NotifyType::ErrorMessage);

}

});

}

catch (Platform::Exception^ ex)

{

rootPage->NotifyUser(ex->Message, NotifyType::ErrorMessage);

}

二、启动其它程序

Windows::System::Launcher可以启动与指定的文件或URL相关联的默认程序。如打开网址:

auto uri = ref new Windows::Foundation::Uri("http://www.bing.com");

Windows::System::Launcher::LaunchUriAsync(uri);

打开文件:

auto installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;

concurrency::task<Windows::Storage::StorageFile^> getFileOperation(installFolder->GetFileAsync("images\\test.png"));

getFileOperation.then([](Windows::Storage::StorageFile^ file)

{

if (file != nullptr)

{

// Launch the retrieved file

concurrency::task<bool> launchFileOperation(Windows::System::Launcher::LaunchFileAsync(file));

launchFileOperation.then([](bool success)

{

if (success)

{

// File launched

}

else

{

// File launch failed

}

});

}

else

{

// Could not find file

}

});

通过修改注册表下HKEY_CLASSES_ROOT下的键值可指定打开特定文件和协议的默认程序。

1.设置程序为打开文件的默认程序

在HKEY_CLASSES_ROOT下新建一个项,类似”.bat”,即打开文件的类型,设置键“Default”(“默认”)的值为batfile。然后再新建一项batfile,其下可新建子项DefaultIcon、shell,前者的“Default”键值指定文件的图标。Shell下可新建项edit、open、print,表示打开方式,它们下面有子项command,command的Default键值指定默认程序(如”C:WindowsNotepad.exe” “%1”)。如下图:

在上面的基础上还可以添加右键,如:

在shell主键之下,新建主键xxf(名任意),置其默认值为:“徐喜峰的文本编辑器”,再在xxf主键之下新建主键command,置其默认值为”C:WindowsNotepad.exe” “%1”。

2. 设置打开协议的默认程序

如网址http://www.sfgsdg.com,http即是协议。HKEY_CLASSES_ROOT下有子项http。它的结构如下:

只要它有键URL Protocol即表示是协议,不用赋值。它的子项shell\\open\\command的键值Default即是指定的程序。

如新建一协议rulerfile:

打开协议rulerfile://www.sdvsdf.com即是打开程序App2.exe,“www.sdvsdf.com”是传入的参数。

3. 示例代码

QSettings *Reg = new QSettings("HKEY_CLASSES_ROOT\\.mp3", QSettings::NativeFormat);

QString currentValue = Reg->value("Default").toString();

if (currentValue.isEmpty() ||

currentValue != "MyMusic.mp3")

{

QMessageBox::information(NULL,"information","Unregistered or Uncorrect");

Reg->setValue("Default", "MyMusic.mp3");

QSettings *iconReg = new QSettings("HKEY_CLASSES_ROOT\\MyMusic.mp3\\DefaultIcon", QSettings::NativeFormat);

iconReg->setValue("Default",  QString(qApp->argv()[0]) + ",0");   //将当前运行的程序图标置入

delete iconReg;

QSettings *programReg = new QSettings("HKEY_CLASSES_ROOT\\MyMusic.mp3\\shell\\open\\command", QSettings::NativeFormat);

programReg->setValue("Default", QString(qApp->argv()[0]) + " %1"); //将当前运行的程序路径置入

delete programReg;

}

delete Reg;

如果设置失败则可能是权限问题,用管理员权限运行或修改用户的注册表权限即可。

Qt for winrt结合Winrt API开发相关推荐

  1. QT+高德地图Web服务API开发—静态地图开发Demo。QT组件提升、QT鼠标事件处理、Qt图片显示与移动、QT网络操作

    说明 在本次项目中,我们使用QT开发框架,高德地图Web服务地图API,完成一个项目Demo,进行一次对QT.对编程的学习. 本系类文章所包含内容包括: 1.QT组件提升 2.QT鼠标事件处理 3.Q ...

  2. 让Qt Creator支持Windows Phone 8开发

    让Qt Creator支持Windows Phone 8开发 近期QtCreator3.2出了.修复了一些Bug.比上一个版本号3.1.2要好了一些. 因为在上一个版本号(Qt for WinRT自带 ...

  3. Qt Quick 3D介绍:Qt Quick的高级3D API

    目录 我们的目标是什么?为什么提出另一个3D解决方案? 统一图形技术 直观易用的API Qt Quick的统一工具 一流的素材优化管道 跨平台性能和兼容性 Qt Quick 3D到底是什么? 您能用Q ...

  4. 基于Qt大恒工业相机二次开发demo-C++

    目录 1.新建工程 2.文件及属性配置 2.1文件拷贝 2.2VS项目属性配置 2.2.1包含目录和库目录添加 2.2.2附加依赖项添加 3.添加基于官方mfc代码改写的CGXBitmap类 3.1添 ...

  5. python api开发用什么框架_python api框架

    关于 python api框架的搜索结果 问题 哪种python框架仅适合于api 我是Python的新手,并希望使用python构建其余的完整Web服务.由于某些依赖性,无法使用任何其他脚本语言. ...

  6. 基于MuPDF和Qt的PDF阅读器的开发

    基于MuPDF和Qt的PDF阅读器的开发 一.引言 设备上要渲染显示PDF文档,类似Adobe Reader.福昕阅读器等软件.如何去实现?Handling PDF这篇文档讨论介绍了在Qt应用程序中各 ...

  7. python机械臂api_使用高斯机械臂的API开发

    对应不同的使用者,高斯机械臂提供以下几种开发方式: 使用Blockly开发 此种方式是使用 Studio 内置的编辑器来操作机械臂,适用于编程初学者,可以通过此种方式了解编程的基本概念,学习循环.条件 ...

  8. 报表引擎API开发入门— EJB程序数据源

    2019独角兽企业重金招聘Python工程师标准>>> 我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用 ...

  9. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

最新文章

  1. 「GAN」如何生动有趣地对GAN进行可视化?Google的GAN Lab请了解
  2. CSS之固定定位、相对定位、绝对定位
  3. 记计算机三级网络技术考试经历(附题库)
  4. OpenCV—形态学运算定义与实现
  5. C#完整执行存储过程的代码加实例
  6. 达观杯文本智能处理(1)
  7. 拓端tecdat|Matlab马尔可夫区制转换动态回归模型估计GDP增长率
  8. Python数据库编程
  9. 马里兰帕克分校计算机研士排名,2020年马里兰大学帕克分校QS世界排名
  10. 计算机应用基础南丁格尔,关于单元基础训练的习题
  11. 关于Servlet的两种配置Web.xml文件配置或者使用(@WebServlet(name = ,urlPatterns = ))配置问题——WebServlet注解
  12. 扬帆际海—开网店怎么引流推广?
  13. 组合游戏 - SG函数和SG定理
  14. 【自动化测试】自动化测试框架那些事儿
  15. 计时:赚一百块钱需要多长时间?
  16. 女人本性的47个心理阴暗面 承受力差的谨慎阅读
  17. 开关电源LC滤波器设计
  18. 智慧城市视频监控平台组成
  19. JAVA视频学习笔记-马士兵(七)
  20. Android第三方QQ登录、获取个人信息、分享实现

热门文章

  1. Unity3D常用的生命周期函数
  2. office2016和Visio2016安装冲突的解决办法(后附安装包链接)
  3. Java数组初始化, 冒泡排序, 查找
  4. 有零基础开始学习python的小伙伴吗?学起来难吗?
  5. 从头开始训练一个依存分析器
  6. vue+netty+redis微信猜数对战小游戏
  7. 计算机应用基础任务教化2010,【计算机应用论文】茶文化下的计算机应用基础课程改革(共5535字)...
  8. The Moon and Sixpence摘抄
  9. Win10安装YOLOv3.0
  10. 台式机fiddler手机抓包