QT-QML调用IOS原生通讯录
来源:互联网 发布:上海浦东软件协会朱 编辑:程序博客网 时间:2024/05/18 06:27
参考了几个大神的文档后,根据自己这边的需要,觉得大家可能也有可能会需要就整理了这篇文章。
主要分为三大步骤:
链接ios原生库
编写C++类调用ios原生通讯录
qml调用封装的C++类(调通讯录的类)
链接ios原生库
在QT工程pro配置文件中加上如下代码:
这里得特别注意的是,你要调用的ios原生函数或方法是出自哪个类库的,一定要全部添加进去,要不编译就会提示找不到你写的ios函数或方法,另外要讲你写的mm文件路径添加进去
ios{ LIBS += -framework Foundation -framework UIKit -framework Contacts -framework ContactsUI OBJECTIVE_SOURCES += \ SamsonQt_IOS.mm}
编写C++类调用ios原生通讯录
.h 文件中*这里是c++头文件,由于是配合qml使用,所以信号槽你得换个思路,也就是c++类要给qml返回一个收到结果的信号,而qml调用c++则相当qml发了一个打开的信号给c++类,c++这边就是接收打开这个信号的槽,这个槽里面在去打开ios原生的东西* #include <QObject>#include <QString>class SamsonQt_IOS : public QObject{ Q_OBJECTpublic: static SamsonQt_IOS *s_contactsPicker;signals:// void contactSelected(const QString nameString); void returnContactInfo(QString imgpath);public slots: void show(void);// void contactSelected(const QString nameString);};#endif // SAMSONQT_IOS_H.mm *这里其实相当于写ios原生代码,没有做过ios原生的童鞋,可以网上百度ios的对应代码就可以了。这里相当在mm里面吧ios对应的头文件与实现文件放在了一起。*#import <Foundation/Foundation.h>#import <Contacts/Contacts.h>#import <ContactsUI/ContactsUI.h>#import <UIKit/UIKit.h>#import <ContactsUI/CNContactPickerViewController.h>@interface ViewController : UIViewController<CNContactPickerDelegate,CNContactViewControllerDelegate>{ CNContactPickerViewController *picker;}@end@implementation ViewController-(void)showContactPicker{ picker = [[CNContactPickerViewController alloc] init]; [picker setDelegate:(id)self]; UIViewController *rootCtrl = [UIApplication sharedApplication].keyWindow.rootViewController; [rootCtrl presentViewController:picker animated:YES completion:nil];}-(void)contactPickerDidCancel:(CNContactPickerViewController *)picker{ NSLog(@"取消选择联系人");}-(void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{ NSString *lastname = contact.familyName; NSString *firstname = contact.givenName; NSString *fullNameStr = [NSString stringWithFormat:@"%@%@",lastname,firstname]; NSLog(@"%@",fullNameStr);//重点在这里:将原生代理返回的值转换为对应qt里面的值,这里是将nsstring 转换为了Qstring,具体如何操作,可查看qtapi或度娘.转换好以后,就是发送收到结果的信号给需要的地方了。其实和qt的c++使用没什么区别 QString fullName = QString::fromNSString(fullNameStr);// emit SamsonQt_IOS::s_contactsPicker->contactSelected(fullName); emit SamsonQt_IOS::s_contactsPicker->returnContactInfo(fullName); SamsonQt_IOS::s_contactsPicker = NULL;}@end//这里可千万不要忘记是c++类,需要加上构造函数或实例,并且实现其槽方法,这里同时也是打开ios原生的信号。SamsonQt_IOS *SamsonQt_IOS::s_contactsPicker = NULL;void SamsonQt_IOS::show(void){ SamsonQt_IOS::s_contactsPicker = this; 这里是用id强转后充当原生controller来使用,更深入的原理,大家可以自行研究。 void *context = [[ViewController alloc]init]; [(id)context showContactPicker];}
文章到这里就结束了。有可能还有一些人会不明白,具体的需要大家对跨平台调用的原理弄明白弄懂,这样才会更加容易上手一些。源码地址在下面,可以下载后自己多运行多读代码来自己体会。谢谢。
下载地址:http://download.csdn.net/detail/samson_shu/9790918
0 0
- QT-QML调用IOS原生通讯录
- qt 中调用QML
- Qt-QML-QML调用C++类
- iOS调用本地通讯录
- IOS通讯录内容调用
- ios调用系统通讯录
- ios 调用系统通讯录
- iOS 调用通讯录信息
- ios 调用通讯录
- Qt:QML:不同目录qml模块的调用
- react调用原生iOS方法
- Qt QML
- iOS 获取通讯录以及调用系统通讯录UI
- Qt实例分析——QML调用C++方法, C++调用QML
- QT (QML)for IOS 设置ios设备的 StatusBarStyle
- ios中调用本地通讯录和相册
- iOS开发--调用系统通讯录界面
- iOS调用系统通讯录获取姓名电话号码
- 记录错误Error:java.lang.RuntimeException: Some file crunching failed, see logs for details
- PCL自定义点类型
- 测试文章
- redis实现分布式锁
- SynaptiCAD.Product.Suite.v14.19c
- QT-QML调用IOS原生通讯录
- 第二十四讲项目一分段函数求值
- 求两个有序数组A和B的第k大的数——Java
- Mysql避免重复插入记录
- Kirill the Gardener 3 URAL 2072
- 后台得到时间戳到jsp中转换为日期显示
- Windows文件夹管理:删除重建问题
- Flume实战采集文件内容存入HDFS
- springmvc form中 commandName和modelAttribute的疑问