QT跨平台开发技术总结

简介: QT跨平台开发技术总结

1、摘要

   在做跨平台(这里指的是嵌入式Linux图形界面应用程序开发)图形界面应用开发中,当资源充足的情况下,我们常常会首选QT来作为开发工具。在现实开发工作中,我们可以需要好几个人来完成整个大型应用程序的开发,例如这是一个带有物联网功能和图形界面的传感器检测嵌入式软件项目。那么在开发中可能会去实现这些功能:


(1)UI程序逻辑开发


(2)传感器程序逻辑开发


(3)联网功能(例如WIFI、LAN)

2、单独开发各自的业务

   使用QT开发这样的程序是可以分开来进行实现的,例如负责UI程序逻辑开发的,他可能是项目总工程师,而传感器程序逻辑开发、联网功能可能交给一些其它的同事,他们的任务就是提供一些类和接口,那么总工程师需要调用他们提供的类和接口来完成整个程序显示和逻辑的交互。


   UI界面交互(不涉及业务逻辑,仅仅是界面跳转切换功能)通常来说是可以在PC端实现的,它的实现不需要与平台有关联,因此它可以直接在PC端实现,不需要有硬件平台介入。


   传感器程序逻辑开发,如果这是一个由串口协议进行封装的,那么它也可以在Window PC端调用QT的串口库进行开发和验证,如果确实需要与相应的硬件平台接口交互,那就没办法了,只能单独实现接口。


   而联网功能,可能就需要硬件平台提供,例如WIFI的连接、断开等业务逻辑,因此这些单独的类和接口的实现和验证可能需要在Linux环境下进行交叉编译,然后运行在硬件平台上进行验证。

3、合并开发业务

   各自的程序开发完了,这时候轮到项目总工需要对UI和其它功能模块进行业务联调,那么请思考一个问题?合并完了,如何保证各自之间的业务依然可以照常进行调试,不受平台影响?有几个比较好的方法:


例如,我们可以用Qt提供的这组宏来实现:

#ifdef _WIN32
#define Sensor_Uart               "COM6"
#define OTA_APP                   "G:\\app"
#define FILE_UDISK_PATH           "G:\\"
#define FILE_LOCAL_PATH           "D:\\Users\\Desktop\\test"
#define WIFI_SSID_FILE_PATH       "D:\\Users\\wifi_ssid.txt";
#else
#define Sensor_Uart               "/dev/ttyS5"
#define OTA_APP                   "/mnt/app"
#define FILE_UDISK_PATH           "/customer/udisk"
#define FILE_LOCAL_PATH           "/customer/gcode"
#define WIFI_SSID_FILE_PATH       "/customer/wifi_ssid.txt";
#endif

当在Window平台下编译时,会用这组参数:

#define Sensor_Uart               "COM6"
#define OTA_APP                   "G:\\app"
#define FILE_UDISK_PATH           "G:\\"
#define FILE_LOCAL_PATH           "D:\\Users\\Desktop\\test"
#define WIFI_SSID_FILE_PATH       "D:\\Users\\wifi_ssid.txt";

当在非Window平台下编译时,会用这组参数:

#define Sensor_Uart               "/dev/ttyS5"
#define OTA_APP                   "/mnt/app"
#define FILE_UDISK_PATH           "/customer/udisk"
#define FILE_LOCAL_PATH           "/customer/gcode"
#define WIFI_SSID_FILE_PATH       "/customer/wifi_ssid.txt";

   这样的话在Linux下进行交叉编译和在Window平台下进行编译的运行方法就分开了。如果提供类和接口的同事是以一个工程的形式进行提供,例如是.pri的形式,那么我们可以在.pro文件中添加一个unix块:

unix {
#wifi
//添加对应的库和文件
include( ./wifi/wifi.pri)
INCLUDEPATH += /usr/local/openssl-1.1.1m/include
LIBS += -L /usr/local/openssl-1.1.1m/lib/ -lcrypto -lssl
INCLUDEPATH += /opt/lib/curl-7.79.1/include
LIBS += -L/opt/lib/curl-7.79.1/lib -lcurl
}

即,当在Window环境下编译时,不会包含这些文件和库:

include( ./wifi/wifi.pri)
INCLUDEPATH += /usr/local/openssl-1.1.1m/include
LIBS += -L /usr/local/openssl-1.1.1m/lib/ -lcrypto -lssl
INCLUDEPATH += /opt/lib/curl-7.79.1/include
LIBS += -L/opt/lib/curl-7.79.1/lib -lcurl

   当在Linux环境下编译时,会将上面这些库包含进来编译。这样就可以做到Window和Linux来回切换调试了,如果在调试过程中发现问题了,那么相应的模块继续分开调试,然后再合并工程,直到调试成功为止。

往期精彩

QT开发之字符串处理


增加预编译头加快QT工程编译速度的方法


嵌入式QT应用程序与WEB端通信遇到的HTTPS校验证书的问题记录


WIFI DTU产品设计与实现(基于STM32F103+QT配置上位机案例设计分享)


手把手之如何在嵌入式Linux上运行QT应用程序(以百问网imx6ull开发板为例)

目录
相关文章
|
6月前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
630 4
|
6月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
266 0
|
6月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
123 1
|
6月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
194 1
Qt开发技术:QCharts(四)QCharts面积图介绍、Demo以及代码详解
Qt开发技术:QCharts(四)QCharts面积图介绍、Demo以及代码详解
Qt开发技术:QCharts(四)QCharts面积图介绍、Demo以及代码详解
|
5月前
|
XML 存储 JSON
技术笔记:Qt基础之配置文件(QSettings)
技术笔记:Qt基础之配置文件(QSettings)
360 0
|
5月前
|
调度
技术笔记:QT之深入理解QThread
技术笔记:QT之深入理解QThread
52 0
|
6月前
|
编解码 供应链 开发工具
英飞凌采用Qt图形解决方案增强Traveo T2G MCU系列,实现智能渲染技术
在竞争激烈的全球半导体市场,制造商一直在努力缩短产品上市时间。同时,他们对流畅、高分辨率图形显示器的需求也在日益增长。
Qt三方库开发技术:QXlsx介绍、编译和使用
Qt三方库开发技术:QXlsx介绍、编译和使用
Qt三方库开发技术:QXlsx介绍、编译和使用
|
算法 Ubuntu Linux
红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...
红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

推荐镜像

更多