BB这次嵌入式,因为看错题,以为App需要自己做,然后又从来没有开发过Android App,又不熟悉Java,学习+开发的时间最多又只有一天,咋办呢?最后蒟蒻选择了QtQuick做成了跨平台App,从学习到开发用了不到一天的时间,说明入门学习成本不高,实现还ok。 本文不会给出整个项目代码,只记录一些特定功能的实现。 Introduction本文主要介绍了蒟蒻使用QtQuick制作通过蓝牙连接蓝牙模块App中的核心步骤,包括了QtQuick Control的Material样式设置、使用Loader的页面切换、QtBluetooth的使用,定时器的使用。 蒟蒻写的应该有许多bug,建议各位dalao还是要看看Qt官方文档 orz 另外写完本文会有一段时间不会更新的,要综合训练了暂时不啃新点 Hint本节记录了一些在开发过程中遇到的坑点。 编译到Windows下运行:
编译到Android下运行:
与Qt自身有关的:
Environment
FunctionsMaterial Design样式 Material Design样式QtQuick Control的版本至少为2 在pro文件中加入 QT += quickcontrols2 在main.cpp文件中加入 QQuickStyle::setStyle("Material"); 在ApplicationWindow中加入,就可以指定主题了 Material.theme: Material.Light Loader页面切换 如果在桌面端开发,程序小的话页面切换其实不是刚需,但是因为这次要照顾Android,所以需要进行页面切换。 实现页面切换只需要改变 Loader.source 即可。Loader { 因为Loader切换时,位于source的qml中的组件会全部GG,所以程序小的话可以开一个全局的qml,然后在里面放Loader和各种全局组件。项目大的话应该有更好的方法,时间紧迫没研究过。 QtBluetooth 要连接蓝牙设备需要用到 BluetoothDiscoveryModel 用于搜索蓝牙设备,BluetoothSocket 用于蓝牙设备间的连接、数据传输等。项目中 BluetoothDiscoveryModel 的代码如下。其中discoveryMode 为BluetoothDiscoveryModel.DeviceDiscovery 是搜索设备,为BluetoothDiscoveryModel.FullServiceDiscovery 或BluetoothDiscoveryModel.MinimalServiceDiscovery 为搜素蓝牙服务。由于 BluetoothDiscoveryModel.DeviceDiscovery 可以申请位置权限,实现蓝牙搜索,而蒟蒻又不会手写申请权限,所以蒟蒻的策略是先使用BluetoothDiscoveryModel.DeviceDiscovery ,待到按钮触发时才改为BluetoothDiscoveryModel.MinimalServiceDiscovery 。搜索到新设备时,会触发 onServiceDiscovered ,这时蒟蒻的策略是匹配MAC地址,匹配ok就传递给socket。BluetoothDiscoveryModel { 项目中 BluetoothSocket 的代码如下。当连接时,会触发BluetoothSocket.Connected ,此时再把BluetoothDiscoveryModel 关了,不传递时就关闭是因为还未连接,关闭会有bug出现!当断开时,会触发 BluetoothSocket.Unconnected 。目标设备发送内容,会触发 onStringDataChanged ;要向目标设备发送内容,只需要更改socket.stringData 的内容即可。BluetoothSocket { 定时器Timer 需要使用定时器是因为长按按钮需要不断向设备发送消息,而Qt无法处理。这时候可以改成,按下按钮时打开定时器,松开按钮时停止定时器。 项目中一个定时器的代码如下所示。 triggeredOnStart 为一打开就生效,repeat 为是否重复,onTriggered 为每次需要做的内容。Timer { ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:HouZAJ Stack,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |