Qt for winrt结合Winrt API开发
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开发相关推荐
- QT+高德地图Web服务API开发—静态地图开发Demo。QT组件提升、QT鼠标事件处理、Qt图片显示与移动、QT网络操作
说明 在本次项目中,我们使用QT开发框架,高德地图Web服务地图API,完成一个项目Demo,进行一次对QT.对编程的学习. 本系类文章所包含内容包括: 1.QT组件提升 2.QT鼠标事件处理 3.Q ...
- 让Qt Creator支持Windows Phone 8开发
让Qt Creator支持Windows Phone 8开发 近期QtCreator3.2出了.修复了一些Bug.比上一个版本号3.1.2要好了一些. 因为在上一个版本号(Qt for WinRT自带 ...
- Qt Quick 3D介绍:Qt Quick的高级3D API
目录 我们的目标是什么?为什么提出另一个3D解决方案? 统一图形技术 直观易用的API Qt Quick的统一工具 一流的素材优化管道 跨平台性能和兼容性 Qt Quick 3D到底是什么? 您能用Q ...
- 基于Qt大恒工业相机二次开发demo-C++
目录 1.新建工程 2.文件及属性配置 2.1文件拷贝 2.2VS项目属性配置 2.2.1包含目录和库目录添加 2.2.2附加依赖项添加 3.添加基于官方mfc代码改写的CGXBitmap类 3.1添 ...
- python api开发用什么框架_python api框架
关于 python api框架的搜索结果 问题 哪种python框架仅适合于api 我是Python的新手,并希望使用python构建其余的完整Web服务.由于某些依赖性,无法使用任何其他脚本语言. ...
- 基于MuPDF和Qt的PDF阅读器的开发
基于MuPDF和Qt的PDF阅读器的开发 一.引言 设备上要渲染显示PDF文档,类似Adobe Reader.福昕阅读器等软件.如何去实现?Handling PDF这篇文档讨论介绍了在Qt应用程序中各 ...
- python机械臂api_使用高斯机械臂的API开发
对应不同的使用者,高斯机械臂提供以下几种开发方式: 使用Blockly开发 此种方式是使用 Studio 内置的编辑器来操作机械臂,适用于编程初学者,可以通过此种方式了解编程的基本概念,学习循环.条件 ...
- 报表引擎API开发入门— EJB程序数据源
2019独角兽企业重金招聘Python工程师标准>>> 我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用 ...
- 你也可以玩转Skype -- 基于Skype API开发外壳程序入门
原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...
最新文章
- 「GAN」如何生动有趣地对GAN进行可视化?Google的GAN Lab请了解
- CSS之固定定位、相对定位、绝对定位
- 记计算机三级网络技术考试经历(附题库)
- OpenCV—形态学运算定义与实现
- C#完整执行存储过程的代码加实例
- 达观杯文本智能处理(1)
- 拓端tecdat|Matlab马尔可夫区制转换动态回归模型估计GDP增长率
- Python数据库编程
- 马里兰帕克分校计算机研士排名,2020年马里兰大学帕克分校QS世界排名
- 计算机应用基础南丁格尔,关于单元基础训练的习题
- 关于Servlet的两种配置Web.xml文件配置或者使用(@WebServlet(name = ,urlPatterns = ))配置问题——WebServlet注解
- 扬帆际海—开网店怎么引流推广?
- 组合游戏 - SG函数和SG定理
- 【自动化测试】自动化测试框架那些事儿
- 计时:赚一百块钱需要多长时间?
- 女人本性的47个心理阴暗面 承受力差的谨慎阅读
- 开关电源LC滤波器设计
- 智慧城市视频监控平台组成
- JAVA视频学习笔记-马士兵(七)
- Android第三方QQ登录、获取个人信息、分享实现
热门文章
- Unity3D常用的生命周期函数
- office2016和Visio2016安装冲突的解决办法(后附安装包链接)
- Java数组初始化, 冒泡排序, 查找
- 有零基础开始学习python的小伙伴吗?学起来难吗?
- 从头开始训练一个依存分析器
- vue+netty+redis微信猜数对战小游戏
- 计算机应用基础任务教化2010,【计算机应用论文】茶文化下的计算机应用基础课程改革(共5535字)...
- The Moon and Sixpence摘抄
- Win10安装YOLOv3.0
- 台式机fiddler手机抓包