当前位置: 首页 > news >正文

⚡ arm 32位嵌入式 Linux 系统移植 QT 程序

🧶 1. QT 简介

Qt 是一个跨平台的 C++ 图形用户界面(GUI)应用开发框架,具有良好的可移植性和模块化设计。它不仅支持桌面系统,还广泛应用于嵌入式设备上,例如工业控制终端、车载系统、触控面板等。Qt 提供了丰富的控件库、信号与槽机制、强大的多线程支持以及灵活的图形渲染能力,是嵌入式图形界面开发的常用选择。

🌱 2. 软硬件选型

在开始移植 Qt 之前,需要先明确软硬件平台的整体架构。Qt 的移植不仅仅是软件层面的工作,还会涉及到底层的显示屏驱动、触摸屏驱动以及系统图形库等硬件支持。因此,必须确保所选的 Qt 版本与嵌入式 Linux 内核和交叉编译环境相匹配。

🌼 2.1 硬件选型

  • 单板:s5p6818单板(arm 32位架构 Linux 系统)
  • LCD显示屏:wy070ml
  • 触摸屏:gslx680-linux

🌻 2.2 软件选型

  • 内核: Linux 3.49
  • Qt软件: Qt 5.4.1
  • 交叉编译工具链: arm-cortex_a9-linux-gnueabi-
  • 中文字体库: wqy-zenhei.ttc

🌺 3. Qt 移植

🌹 3.1 配置交叉编译环境

将 Qt 5.4.1 源码包拷贝到合适的位置,并解压

cp qt-everywhere-opensource-src-5.4.1.tar.gz  /opt
cd /opt
tar -xvf qt-everywhere-opensource-src-5.4.1.tar.xz

然后为 Qt 创建好合适的安装目录

mkdir -p /opt/project/qt/plugins

然后进入到源码中的 qtbase 目录

cd qt-everywhere-opensource-src-5.4.1/qtbase

执行以下命令进行配置,生成 Makefile 文件

./configure \-prefix /opt/project/qt \-plugindir /opt/project/qt/plugins \-release \-opensource \-silent \-strip \-xplatform linux-arm-gnueabi-g++ \-qt-libpng \-qt-libjpeg \-qt-freetype \-no-iconv \-no-openssl \-no-cups \-no-nis \-no-glib \-no-dbus \-widgets \-plugin-sql-sqlite \-qt-sql-sqlite \-no-accessibility \-no-sse2 \-make libs \-nomake tools \-nomake examples \-nomake tests \-linuxfb

这里需要注意几个参数:

  • -prefix /opt/project/qt: 指定 Qt 的安装路径,所有库与工具文件会安装到该目录下。
  • -plugindir /opt/project/qt/plugins: 指定 Qt 插件的安装路径(图形、输入、平台后端等)。
  • -xplatform linux-arm-gnueabi-g++ 指定交叉编译工具链。
  • -linuxfb: 使用 Framebuffer 图形接口作为 Qt 的平台后端,适用于无 X11 的 LCD 屏幕。

就这几个参数需要视实际情况而定,其他的参数基本上照着抄就好。

在 ./configure 生成 Makefile 过程中可能会碰到如下提示

在这里插入图片描述

输入 yes 按回车即可

🌾 3.2 交叉编译和安装

编译环境配置完成后进行编译和安装

make
make install

💡 提示:编译过大概需要半小时左右
(可以去泡杯茶吃块小蛋糕☕🍰)

编译和安装完成以后检查安装目录下是否生成库与可执行文件

ls /opt/project/qt

然后用 SSH 链接单板,在单板上创建 Qt 目录后退出

ssh root@192.168.10.29
mkdir -p /usr/local/qt
exit

然后使用 scp 将 PC 上的 lib 与 plugins 目录传输到目标单板的 Qt 目录下

scp -rp /opt/project/qt/lib root@192.168.10.29:/usr/local/qt
scp -rp /opt/project/qt/plugins root@192.168.10.29:/usr/local/qt

🍂 3.3 确认触摸屏设备节点

使用 SSH 再次链接单板

ssh root@192.168.10.29

然后使用 hexdump 工具检测触摸屏对应的输入设备节点

hexdump /dev/input/event0

命令执行后触碰触摸屏观察有没有输出,如果没有输出按下 Ctrl+c 退出程序,检测下一个设备节点

hexdump /dev/input/event1

如果还是没有反应继续检测下一个,直到终端上出现类似以下信息

在这里插入图片描述
记下这个设备节点的名称,他代表的就是触摸屏设备。在我这里是 event1 。

🍀 3.4 添加环境变量

在单板上打开 /etc/profile 文件,如果没有就创建

vim /etc/profile

添加 以下环境变量

# Qt 库与可执行文件路径
export QTDIR=/usr/local/qt
export PATH=$QTDIR:$PATH
export LD_LIBRARY_PATH=/usr/local/qt/lib:$LD_LIBRARY_PATH# 插件与字体路径
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
export QT_QWS_FONTDIR=$QTDIR/lib/fonts# LCD 显示设备与分辨率
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QWS_DISPLAY="LinuxFb:mmWidth300:mmHeight400:0"
export QWS_SIZE=1024x600# 触摸屏设备配置
export TSDEVICE=/dev/input/event0
export QT_QPA_GENERIC_PLUGINS=evdevtouch:$TSDEVICE
export QWS_MOUSE_PROTO=evdevtouch:$TSDEVICE

完成后保存退出,重启单板使配置生效

🍄 3.5 添加中文字体支持

在用 SSH 链接单板,删除单板上原有字体目录内容,并退出

ssh root@192.168.10.29
rm -rf /usr/local/qt/lib/fonts/*
exit

将中文字体文件(wqy-zenhei.ttc)通过 scp 拷贝到单板字体目录:

scp wqy-zenhei.tcc /usr/local/qt/lib/fonts

至此,单板上已经具备运行 Qt 程序的能力。

🪐 4. Qt 项目部署

🌲 4.1 配置 .pro 项目文件

进入 Qt 项目目录

 cd /opt/Qt/MimicHerb

使用 qmake 生成 .pro 项目文件

/opt/project/qt/bin/qmake -project

该命令会根据项目中源文件(如 .cpp.h.ui)自动生成一个 .pro 项目文件

然后编辑 .pro 项目文件

vim MimicHerb.pro

在文件开头添加代码启用 Widgets 模块

QT += widgets

💡 提示:如果项目中使用了其他模块,也需要在此处添加

🌴 4.2 生成 Makefile

执行 qmake 命令生成 Makefile

/opt/project/qt/bin/qmake

然后检查 Makefile 中的 CC CXX 等参数是否配置正确

🌵 4.3 交叉编译与部署

执行编译

make

完成后赋予 Qt 程序可执行劝降

chmod +x MimicHerb

将 Qt 程序传送至单板

scp MimicHerb root@192.168.10.29:/home/

登录单板,并在单板上运行 Qt 程序

ssh root@192.168.10.29
cd /home
./MimicHerb

若屏幕正常显示界面,则 Qt 项目部署成功。

🚫 5. 问题解决

📛 5.1 Qt 源码包 ./configure 配置编译参数时报错

如果你在 ./configure 配置编译参数时出现以下报错信息:

在这里插入图片描述

注意观察这里红字的 error 基本上都是 C++ 代码语法上的报错。所以这大概率是你的 C++ 交叉编译器的版本和 Qt 的版本不兼容导致的。

这里编译的是 Qt 5.12.12 的版本,需要用支持 C++ 11 标准的编译器来编译。也就是说至少需要 5.3 版本以上的 c++ 编译器。如果你用低于 5.3 版本的 c++ 交叉编译器去编译就会出现如上图所示的这种报错。

要解决这个问题要么就是升级交叉编译工具链版本,让 c++ 编译器升级到 5.3 以上的版本;要么就是拉低 Qt 版本,让 Qt 版本低于 5.6.3 版本。

🛑 5.2 Qt 项目 make 报错 error: ld returned 1 exit status

如果你在交叉编译 Qt 项目的时候出现以下报错

在这里插入图片描述

那么说明你的目录不干净,比如之前 make 过一次没有 make clean。

解决的方法就是把目录里面各种各样的中间过程文件全部删掉,只保留最基本的头文件,源文件,资源文件,重新 qmake,重新 make

http://www.dtcms.com/a/446085.html

相关文章:

  • VR大空间资料 02 —— 常用Body IK对比
  • 什么是网站建设需求重庆建设工程信息网查询系统
  • 高校思政专题网站建设南京有哪些知名的网站建设
  • 【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
  • ionic 浮动框详解与应用
  • 开源 C++ QT QML 开发(五)复杂控件--Gridview
  • 下载建设银行官方网站工程承包合同协议书
  • 第九章:装饰器模式 - 动态增强的艺术大师
  • OpenAI 发布 GPT-5 Instant:AI 有了 “情感温度计“
  • 苏州做网站公司选苏州聚尚网络做百度百科的网站
  • SSE与轮询技术实时对比演示
  • 示范专业网站建设深圳联雅网站建设
  • php 8.4.13 更新日志
  • MongoDB 认证失败(错误码 18)
  • 深圳网站建设主页什么公司需要建立网站吗
  • 陕西省建设信息管理网站网站开发 家具销售 文献
  • 数学标准库
  • 怎么做跳转不影响原网站排名云抢购网官方网站
  • 漳州手机网站建设公司陕西专业网站建设哪家好
  • 利用 VsCode + EIDE 进行嵌入式开发(保姆级教程)
  • 长春企业网站制作优化微商好货源app下载
  • PlayerChoice系统介绍
  • 网站要实名认证旅游网站建设方案之目标
  • [ SpringWeb ] 搭建和配置
  • 高层次综合hls设计第一章
  • Docker 启动 Easysearch 时自定义初始密码的几种方式
  • 15.C++三大重要特性之继承
  • AI 训练大显存配置实战:24G 显存(RTX 4090)如何配 32G 内存?—— 从 “显存挪用” 到 “效率翻倍”
  • JVM即时编译
  • 【JVM】——结构组成和垃圾回收